|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 / X. `! s, Y8 p% |5 b! e
# E) d) v$ P' V7 t6 _! W! n: @可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。7 \" A3 a2 K5 T) _+ b: L
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
6 ^1 c- u9 q9 h6 f& g9 e
, ]8 H& g5 T5 b% p5 W9 [" `# ]在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)! M k6 O1 V+ R2 n# v% l ~2 O$ l
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
7 `( ^( O: }! X3 O0 y先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
7 }2 ~* R) s5 O- i5 }+ S- v1 d% T" m: `# ^& T. V6 [) y/ `* X
步骤 1. 新建一个 Python 文件
. N; e, k. O- \( T: L( v6 G打开记事本(或 VSCode、Notepad++ 都行,我用记事本)5 d6 c" i4 H$ z& k7 L- F
把下面的代码复制进去。
: c$ N: ^6 y* p) Z保存成 baccarat_sim.py (注意后缀是 .py)。, f* y% y, a9 s
2 u% B, g, h. o; L7 h/ ?
import random
7 T7 H+ `' {7 `4 L+ k. x4 B- Himport argparse
% @ {0 ^9 ~1 t0 |; W% a! B v2 s
. Q3 o2 |6 D1 q3 s4 B# 初始化鞋子
0 v4 z* P) l3 n: J& f+ R: X( Fdef init_shoe(decks=8):+ `" r0 y _/ U$ s
# 每副牌52张,8副共416张) E. ^& s( j. R+ x% z3 D' [2 z q
shoe = []
1 a# P2 w! Z1 b+ Z$ f for _ in range(decks):
4 r2 v! }4 i' w1 i shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
" } j6 [% r' m6 l% Y& b random.shuffle(shoe)
9 Z8 A& w% n* F+ e1 I$ O return shoe, g- D( |( U7 s+ h6 V
5 w" ~; K- q; |3 Q. E2 a8 P# 发一手
& M( G+ Y1 |; B, f3 u- T. ydef deal_hand(shoe):2 J- f0 {+ q. h" J' y! K1 l
if len(shoe) < 6:6 v. A5 r- B2 R2 r9 `5 O! G8 P
shoe[:] = init_shoe()
$ |( X; b7 [6 L; T# W" d. ~ return shoe.pop()6 Z' ~3 X. P0 H* V& ?1 Z- X+ H* Z
$ N& w1 L$ W2 Q7 I0 ^
# 模拟下注法 A
; p: l3 Y/ J( }! D) \def simulate_strategy_A(num_shoes=1000, commission_on=True):# s; ~5 Y4 G R6 }4 [
profit = 0* B R( x4 O( u/ l/ l5 c" a6 ^
commission_paid = 0
! R$ z1 g% }2 w( J0 h. N: N shoe = init_shoe()$ W6 {# F+ s- }" Z1 N% Z
& j7 M( L) [" W! {3 ^% w
# 策略参数. I; i' N6 D- d1 ]5 N' B
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级5 i* t) P M: M, T5 ~. U
stage = 05 R# h# a$ A4 w5 N, Q6 s
target_side = "B" # 起手投注庄- w W q G7 s; c* D
3 @+ U) _4 m- W
while num_shoes > 0:
- F8 p8 S3 `9 j) I result = deal_hand(shoe)+ D+ H% d r/ U' [/ f
; M$ ]2 V7 x8 n; ]* B if result == 'T':
; ?& z1 I) a6 w # 遇到和,不输不赢,重投
, g. C9 K' p" Z5 Q. u continue8 b6 \2 Q" I- |. D
0 `- F* S$ R% x$ }. V1 Z; n! z bet = sequence[stage]( S. T8 d9 W5 B# ]
0 h Z z5 L( g9 I5 p% Y1 A if result == target_side:+ h0 ^) A% y% Q8 X3 r
# 赢
! L' S* g7 O' G6 B- H win_amount = bet8 W4 I7 e6 g/ m/ s( E* H! y1 A
if target_side == "B" and commission_on:
$ P0 F s( c2 g2 l" e win_amount *= 0.95 # 庄赢扣5%抽水
- s; z; o" v z8 f9 m5 v% ] commission_paid += bet * 0.056 P/ v& @; W' e Z% ?$ X- m4 G) m
profit += win_amount2 ?- C$ D8 n, w v
stage = 0 # reset! U6 z9 C6 n" @& ?. M {
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)) X& g6 Z# W& }2 O' q
else:
! d! i1 P) n/ I" g( V7 N$ E% m$ G # 输; q2 V: M: n" ~: b( l; g" J* z9 r
profit -= bet" e" A9 B X' M1 o5 t" T9 z, J
stage += 1
0 `: \5 Q; o8 D9 @5 ^' F5 x if stage >= len(sequence):
: ^7 ]; J6 y p+ Q: T stage = 0 # 断缆reset, V- i7 S" ^0 y* Q
num_shoes -= 1+ y. s6 j% ]0 A4 ?% o
3 ]: j- c: S: [4 Y' u return profit, commission_paid
- A1 ^% }4 n8 l2 q$ s
/ q5 H' s# f; A6 B+ C# 设置命令行解析
2 Y, j# @) U6 W. K$ k3 ?def main():
* n" v: {% H% ]3 T parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
$ ?/ V* B* S* i6 t& m' h6 i6 T parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")' q% }+ R4 }! k5 y) G9 x$ X: t* U
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
" G! l8 \- R. o; o9 w2 ~ 2 r3 V, X1 X( h7 p
args = parser.parse_args()
% j, Z! c5 }2 M. [% Q1 X0 z/ ], I $ M5 R6 L$ e# o5 [
# 抽水开关:开启或关闭
9 e3 E# U! o# x; d8 y2 i9 m+ B/ Z" w commission_on = args.commission == 'on'3 q6 x% @' h- k6 `5 c. X* y
4 C3 O4 k8 ^8 W+ [6 g result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)& s" R5 d- a- U8 K
print(f"最终盈利: {result:.2f}")
6 a. `9 O q6 r- T& x9 }, Y print(f"累计抽水: {commission:.2f}")
- x* g ]# j i3 O$ X# W x8 a, {- \9 L2 o4 `9 \0 G* C* W
if __name__ == "__main__":
}; V' [) n9 z. Y/ Q main()
& g. D G4 {$ o' r4 T' f. y
) ?/ @( g3 [. R' Y7 m$ B8 K M
步骤 2. 运行+ F5 F& W8 ~9 h2 y$ k# E8 o
9 w7 x5 U% U6 k! W
在命令行里进入文件所在的文件夹,例如:
: g4 b6 [* e$ Q" p) F" kcd C:\Users\你的名字\Desktop; s1 i8 _2 `9 d
python baccarat_sim.py
1 ~$ r4 e( F' A( @, ^1 s
" n7 f0 c9 b. G* C4 J" }输出会显示:) K9 i0 V4 o. w f
$ i1 p U: `, ?累计盈亏: xxx
) z' \9 ]- Z3 G. x* I4 B6 s' X s累计抽水: yyy
1 T9 x3 Y& ~) }1 r; I4 n5 _-------------------------------------7 ^8 j! [, q( k T3 k$ O
实例:试跑3次, : M! t& I9 w9 E- Y
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 3 y" q# Q h" Y1 T U
最终盈利: -5360.35
4 N8 S# j, e: w- D6 d8 E* o" k累计抽水: 5176.35 & H$ Z7 ?- x- h2 w3 }3 X, `
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
! j7 X7 q6 S% q% n. |; o. O& b6 m) m8 X最终盈利: -5661.65 * P5 L) z8 X0 D! z$ y
累计抽水: 5174.65 * w+ o! m6 f) j2 q7 } R
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py & g) X4 x2 c* |
最终盈利: -4244.50 ' [6 y4 K; c. a' z: g. o
累计抽水: 5176.50
5 V* e; A4 `( D4 I0 d4 e7 j# L8 g" i$ A3 O
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
& r7 u% n' I: n8 s Z9 Q9 j8 L0 G
6 W }0 c8 A& t9 D累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。& h5 { Z8 v2 N9 @& s+ r' V1 n
$ m& ~7 j6 A, \% O8 e5 B2 U' A) v最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。9 [# T8 t" D: [
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。! K9 {( i7 a6 Q+ M
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。7 S) a5 G2 }+ v6 A# P- Q# p& p
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。- O$ p. E9 ^5 X/ N" I; |
9 b `: Y! l6 D5 ~. [# ?# G9 ]& {. j
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|