|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
0 m8 F+ I9 i+ c/ V7 ^" O; u, k' S) w0 E8 T) e4 q) O3 {& e
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
7 M9 @. B o- i8 f' r! t) u, wExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。, g& e7 e5 P2 u* D2 B* q5 i5 C/ c
! ?0 Q9 b* |% ]7 | G
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
2 `- W2 U5 w6 n: [假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
( F \7 V" H! Y7 |3 W" g8 \先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
( X% p+ R2 z/ t% ]5 A' P
7 J" t% a: }) \3 j; c1 k1 h步骤 1. 新建一个 Python 文件 i/ ~$ k. \, F8 z" {& I
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)/ u* `1 {+ o- g7 R' G
把下面的代码复制进去。" I5 }0 d6 i6 I0 a0 M; n5 J
保存成 baccarat_sim.py (注意后缀是 .py)。
+ o7 ^1 j7 D* n9 l! z
$ d2 X7 h! G5 O1 H' V$ nimport random5 t! S6 y$ D& Y( G
import argparse
) w$ W, R K L& ?* e
6 Y9 Q$ v9 R8 C4 H% ?: Q# 初始化鞋子
) \+ C- x1 t4 fdef init_shoe(decks=8):
' H! L- Y: g( I' R: b2 ^ # 每副牌52张,8副共416张
( a" l9 P( f4 d& [ z6 b; { H T2 H( [ shoe = []
$ e* I( B& d* `- T# E3 ]* _5 f for _ in range(decks):$ k, m! q5 O* H p1 N. m
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4' ^. ^. c; S4 I# r' l: _
random.shuffle(shoe)
8 N; F3 I1 T+ w4 f$ L- g return shoe
# T# E" A! M; I: U4 Q* m" e! x0 k/ {, V1 Y3 j
# 发一手2 O4 z+ P7 L) P2 m* _4 d) g
def deal_hand(shoe):! z# ^- L/ e; N1 g
if len(shoe) < 6:. i# H6 g' d# S. S0 }+ ]
shoe[:] = init_shoe()& C) [4 ^- K$ m& C/ ~( h6 |" h
return shoe.pop(); T' u7 k. K0 j) o/ q
, M' g! } q. { h" W8 }$ o1 s
# 模拟下注法 A
4 d6 Q. N. _1 @, sdef simulate_strategy_A(num_shoes=1000, commission_on=True):# B k5 `# W ]! m/ f
profit = 0
; S4 `. Z0 B; r" N% {* i commission_paid = 0
. _! B, G, M9 J/ g( U8 X shoe = init_shoe()' [. S( L3 M7 u/ i
8 w& g- f. Z7 y V4 }1 t' j
# 策略参数, k" f+ Z: q) K$ v& P$ K
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
+ V3 T$ V$ ^( i1 D6 a; r stage = 0
. j3 _5 a. ` G, Z$ M) w* M target_side = "B" # 起手投注庄1 _) g, g. j9 T9 ?# T( W
8 L/ R' g$ M9 t( u8 f5 ^- V9 Q
while num_shoes > 0:
: ^% ^% q2 k. c6 s; a result = deal_hand(shoe)
/ G2 W8 f6 m6 l& _
* a3 a* w/ M `4 C2 ^5 c& @5 G. | if result == 'T':
4 U. f, }3 x6 i0 g- s! I$ K& @' R$ k$ \ # 遇到和,不输不赢,重投
' P5 i+ K! c5 K7 i7 \. ` continue
) l6 y+ H/ V2 ?- {' `# ^2 K- w0 j5 {$ Q y5 v7 L+ a2 p
bet = sequence[stage]6 j# Q- ?+ N( ]0 T5 K
! Y7 N, `5 G' n+ p* ?* k if result == target_side:) \ H" w1 V0 n1 T& @ ~ P
# 赢
c' I( J* k1 e& t win_amount = bet* q& W J g" o3 k
if target_side == "B" and commission_on:8 E& a. @) Y( a5 x; j/ B( S
win_amount *= 0.95 # 庄赢扣5%抽水
2 J: d, ]7 [: T6 a commission_paid += bet * 0.05; W; S* B" B% K1 o
profit += win_amount: l/ |* P" h8 n! h& Q9 G9 _( o6 t
stage = 0 # reset
4 b: \& Q) `7 S+ N target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
# f' v H& I5 `4 M6 w; y" O/ U else:
) I& S- X' j4 d7 _* l8 ^ # 输
1 {& _8 _- M- _1 f l profit -= bet$ K0 Z- [& p1 W; ^ X, l
stage += 1
* Y5 v( @/ F# u: J8 A$ g if stage >= len(sequence):$ t+ j T! `9 O: p( @
stage = 0 # 断缆reset9 |+ j& e* D( M, I" k& ^
num_shoes -= 1
$ ?* w/ V/ B# V: ]; u9 z# e' L% H1 {: X
return profit, commission_paid
+ e& M8 _; r0 e. I: z
9 q' i2 g% x3 @: A# w# 设置命令行解析2 D' \ R6 d! q/ L
def main():
! |$ B7 {; T& }5 b$ o! V R parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
$ w2 q% m O9 D a5 n' f7 P parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")( R9 o7 U; \) Z9 _
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")& Q* }, O; y: h2 ^) E! Q- ^. d9 r
: R; p% }/ \/ [/ Y args = parser.parse_args()
0 z' A7 ?' F i3 z* u$ m( |3 v$ C
! S+ ^5 d- P, J # 抽水开关:开启或关闭
) U/ ]. B$ l& n/ n, y+ }7 ?, q commission_on = args.commission == 'on'
! p' y; b: ?* X . J" u1 M% D* O! _5 b( `2 d
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
2 V/ n' z2 t3 k' S, z print(f"最终盈利: {result:.2f}")
0 O% R- N- _) t* _' x print(f"累计抽水: {commission:.2f}")1 L, ?9 j. |8 P
* d4 h' U) {1 D8 R+ V+ Wif __name__ == "__main__":
g9 \' M; V# G9 U main()
% T* a" _7 r, Z- s$ @ {
1 y' I* r; @( u/ \) f8 @. X( d% ]
; R% U$ E: K% \步骤 2. 运行
! ]0 a; r. V- {3 m- r
]# J% W$ u% p! r! G/ V# Y# z" g在命令行里进入文件所在的文件夹,例如:
2 I: l1 f: F/ C, k- O) Fcd C:\Users\你的名字\Desktop
. A* f Y, a9 S) c" e; J) zpython baccarat_sim.py
8 Y0 a% a1 }! \0 t1 o* |6 Y9 v1 W! d6 { j8 g
输出会显示:
! K- C1 t- I! [1 T# n# i% u" W- t) {# |+ E
累计盈亏: xxx4 ~5 y8 J7 H* a7 `
累计抽水: yyy
; b$ ~1 Y! ~, P& N-------------------------------------
% P( V' M3 N6 G' Y) Y, f实例:试跑3次,
1 H" n) g! P7 \) h7 B# MC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
" ^* p: W/ i3 U- K最终盈利: -5360.35
# X Z) Z! q4 G8 \4 R累计抽水: 5176.35 ) ~5 I5 W" C2 O8 h$ w/ l9 Q8 r. I
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ) T8 r5 [+ J( ]+ W! t5 _" D3 `( ~
最终盈利: -5661.65
9 f: X9 g( a R( v累计抽水: 5174.65 % |) {3 Q7 a$ f) T& N1 W" ~4 m T
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 3 Z; n6 s) k7 P$ w, u+ K
最终盈利: -4244.50
1 D% c& ]+ }8 S7 h累计抽水: 5176.50
$ v% P- A, q+ K( i( c8 o5 n
8 h, {3 N+ Z' v* p5 y" x说明你的 Python 已经能正常跑模拟了。结果也很有参考性:4 R5 `4 O' O: O* q
3 C9 B1 K* t/ R& h. t累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。8 g T4 K. G( ^: O
# ~, f; F: I# A! Y$ J& O$ ?% F, E最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
! s* c/ T+ [$ W, ]: }" X这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
5 I9 O& J! g g) G/ U2 _0 [: K人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。# L/ r3 B& ~) ?
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
/ P/ a! R2 A0 H4 S9 s- q- n
0 z3 T2 T, Y! V启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|