|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 : F- T# [3 w. I) `
! `' }2 O& j2 T5 ^9 k1 r可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
+ u) K" d$ T% l, wExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。9 J. ?: Y! x' m1 W( D
1 s9 W1 u X% J) @% L9 I% [- Z! H4 E
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
* L# u" `- y2 F! C% L) @假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
9 p# u7 V/ w" m$ X( v+ l3 y$ i先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。8 v5 x L4 k6 y i
" \+ D0 a) u' \3 R' q% a. |
步骤 1. 新建一个 Python 文件
+ |& k# L0 ]2 J9 |打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
8 {) G% S! Y* V* l' }4 W+ Y* P把下面的代码复制进去。- f7 U! z+ k+ F& K7 P4 A2 [0 _$ p
保存成 baccarat_sim.py (注意后缀是 .py)。
9 i/ s& g0 F# X2 c: ]9 h2 m+ A) Z" \
import random
+ Q# G) r& o* _2 d4 zimport argparse, |+ @7 |* Q% ]# Z9 m8 E Y z* |
0 [ N" w! \% U: R" Z1 p
# 初始化鞋子; \. ]% d' O% s- S
def init_shoe(decks=8):
" B5 [$ Y; j0 A5 c P # 每副牌52张,8副共416张
& k8 @; I8 g3 Y/ s: B9 f% D shoe = []
# w8 g9 r7 }: H7 s( n/ F! ^/ T. r" Q# m for _ in range(decks):
% Q6 ]: y( ^6 d/ I. H1 u shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和48 L2 j- f2 h6 ~+ ?- u1 c; R
random.shuffle(shoe)
, b' C4 Q6 f' Q return shoe3 |' q9 N7 X0 S! g$ k. m _, b3 U
% t4 J* ?, v3 ^* D) w# 发一手
$ M; q- }) b0 t( K P: O* a& wdef deal_hand(shoe):$ S6 V( H8 f' A
if len(shoe) < 6:
D( S& f$ r& J; p( v5 j shoe[:] = init_shoe()
: f8 n( J' I s+ S7 Y. G return shoe.pop()
1 _2 W( C9 R) V7 Y3 ]9 e( s3 R1 ]# Y6 B% u, K8 |& G+ a& d: O
# 模拟下注法 A
) p2 l/ X4 g# [( cdef simulate_strategy_A(num_shoes=1000, commission_on=True):5 [9 ?" u; V0 y* h" P# H
profit = 0
8 j# [0 N) s' l. _1 _4 |1 H commission_paid = 0
5 e, D' N2 M+ ^ T1 c8 Y shoe = init_shoe()4 K$ L2 o9 ? k! P# z- W
' f0 T% ?8 a. I # 策略参数; B! ~8 H( W0 S7 B5 y. s: h5 u
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级. D- E! c- r: F, Z: _5 n
stage = 0- A/ _/ l" z8 V2 V* B' k }
target_side = "B" # 起手投注庄! }& ?( h# o/ c3 e! r. d( G( }
4 Y! `/ a. i! m6 m6 w+ |
while num_shoes > 0:
8 Z1 W9 z( i+ | result = deal_hand(shoe)
/ B5 ^0 I9 [# ~+ X2 [, J" c' T
# |, ?1 e" }) ?: q if result == 'T':
3 b: z" L* W! q4 n # 遇到和,不输不赢,重投
. u1 U+ z. t* i, G* b continue
$ v4 z+ j7 q0 Y" ^( t
% b0 X$ T# @ l& N1 L1 j8 N& [ bet = sequence[stage]
/ W1 V- ^+ ]: h+ n ) K% [9 T3 Q5 [2 j% O% r9 Y
if result == target_side:
6 e5 Y- K5 E' P0 `, w) c # 赢0 z, N$ _( w0 s+ n! A* B
win_amount = bet; r C& S S( z$ g T) {3 Z9 B+ D
if target_side == "B" and commission_on:
4 J v/ W- ]# p+ G, j. O+ O+ G# l win_amount *= 0.95 # 庄赢扣5%抽水. _$ K. K% L& F: y" ` s& Q
commission_paid += bet * 0.05- W6 _" C- ]1 f
profit += win_amount
) B. C# p3 T8 z. q o stage = 0 # reset! T" W' Y7 W( B" G$ l! @% P
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
5 T$ c( m/ z: A/ z else:# p6 R U- b9 `5 b6 ` E% `& M
# 输. x: R' {* q: F5 e# _3 b
profit -= bet
v' f9 B1 [9 S7 o3 v+ k* L, V stage += 1; y% ]; i% ^$ P" n, ~5 |7 [3 v
if stage >= len(sequence):$ w5 U( O8 l7 j# w# H/ @
stage = 0 # 断缆reset# l) ^5 ?! \: q& y b
num_shoes -= 1
& o0 ^2 N, g3 v i* A6 p5 e/ ~! g+ G; r
return profit, commission_paid
1 u% S7 `' b' @& O
2 B" a9 I7 J' E# 设置命令行解析
2 [- L+ _# D- O3 |def main():! N9 s- h9 q3 Z# Z
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
1 R; N Z. c' A, I$ l) y) ^2 l parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
. X. M2 H$ Z3 M& V$ w5 n. y! v parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
8 F& c; A4 b7 b- F& _: }
8 V; ]: X* a( o3 ?0 E% T9 a args = parser.parse_args()
2 [: [( \4 a( _- O7 Q% i7 d/ U + h7 M9 g( r2 R/ }% I8 }
# 抽水开关:开启或关闭
3 J1 p+ H4 ~* _# L$ o I; k7 I6 ~" p commission_on = args.commission == 'on'
5 H7 x1 h/ n8 v) R3 N ) v! f6 q3 y) x9 F5 G7 Y( \( i! b$ ^
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
7 m* @& ~" _$ E5 V7 }) | T3 l print(f"最终盈利: {result:.2f}")
: W4 q+ x! h' o- F7 a print(f"累计抽水: {commission:.2f}")! p7 \% n+ H. } h3 ?
/ o; ^" |3 w& k+ lif __name__ == "__main__":; ^- [- c* h6 J) ^; I
main()
) P' Z3 O/ [) P, ?8 c. b3 N( y! E0 P0 G; S1 p! \6 z( s
; t. p; L6 v. M9 ]' y* k
步骤 2. 运行
) ]" M3 F8 h0 a- e" Q# ]* A; Z1 ~
在命令行里进入文件所在的文件夹,例如:
7 |! W7 @$ i% N& r% f. ]- Q9 d; `. Kcd C:\Users\你的名字\Desktop
9 I) \" r1 e$ R- F) Apython baccarat_sim.py
; [0 t$ x0 d! } {4 S5 b+ p) N9 U* U# V( ?7 _$ Y3 ]1 C8 S$ h2 s
输出会显示:
* J* A) H# }$ K
# S% F8 b1 S# ?" M! g8 Y X+ u# [0 J累计盈亏: xxx
, x6 `" g* u3 D8 q累计抽水: yyy2 M- G. V' W& H2 x9 Z! D$ `4 d
-------------------------------------
& O9 p0 } ], s1 a实例:试跑3次,
3 G' u6 D- h+ F3 [2 G: qC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
) ~8 n8 h2 g1 `' I最终盈利: -5360.35 s/ ?2 y; X4 U, h( T
累计抽水: 5176.35
; O6 K/ G! z3 @5 k* |* pC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
1 ~. J( m/ [/ z1 O# k4 D$ ^! h最终盈利: -5661.65 $ C# `9 [, Q2 k, n3 j* j8 g( e
累计抽水: 5174.65
9 L3 t7 {: o5 f, \& qC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
: o! T% d8 N/ Z最终盈利: -4244.50
! A' n8 f' X4 s0 {累计抽水: 5176.50
- g, c) j/ d: n+ `" i7 k. Z. z2 w9 `9 n) t" R
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
4 P) A# l) Y& [; D" O
K" I5 D( r/ v0 x Z累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。$ _5 b8 F- S; |7 c
. F9 Y* K, }4 `8 C( z' D
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。3 d/ a0 L5 Z& n6 [9 U& Y# }7 \" d
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。* t" o& ^. G! W& u
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
1 T* ] s$ ^& x5 f; N! G2 U但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。8 ~; x+ c2 j+ H( U5 I
9 h a$ ~# x, K# Y7 V2 G启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|