|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
% m; M6 g' ?+ R+ I, B, ?0 g$ v& S- R* N# N
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
/ E `# ?0 g( X9 c8 UExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
" }% E0 E1 g2 h; l1 D* T) M) N4 G* L
) D7 k+ [& F* S: ^在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)) w! c" f$ {. k$ u4 R8 t, C4 P. Z
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
% C3 }) ~4 L% q0 {9 Q' `0 Y先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。% @* K! L& D# z! b2 b8 u
6 J4 `+ L5 d+ t9 B8 X步骤 1. 新建一个 Python 文件
6 t+ c; ?3 c5 Y打开记事本(或 VSCode、Notepad++ 都行,我用记事本)9 w; i- l0 G, K- w, H/ o/ j* u! |
把下面的代码复制进去。
/ ~$ S+ j- W7 g! n* k. P8 W+ j保存成 baccarat_sim.py (注意后缀是 .py)。0 Q! l: X P! [/ n
3 N0 I9 t( \, E% h( r/ uimport random
3 m2 { {- ^3 D, h- Limport argparse
2 O6 `3 y; J7 E* D& _* Z! t& F7 W& _4 ?
# 初始化鞋子; W( R+ e3 T9 G9 j: h
def init_shoe(decks=8):
3 v9 k+ p7 ~1 y9 Z7 @4 ^ # 每副牌52张,8副共416张$ R0 h1 T: S1 c2 D% t
shoe = []% z. P/ l# c* `; t) s0 Y i( W
for _ in range(decks):
* ~4 G; S: A O, y shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4& k F7 n; e( x4 v, w8 }& \( @
random.shuffle(shoe)
s5 ?$ { P, G) L return shoe8 A& j, _# k" w) H, ^7 l, u# P" @
_ }+ j+ W! c' W1 ~( F# 发一手
! k$ t, z: Q9 G- i+ adef deal_hand(shoe):
( x1 t5 K; t: {% @& ^ if len(shoe) < 6:
8 w# c$ i; q+ ~, L# y. v8 p shoe[:] = init_shoe()
6 ?! V" v# o$ p/ t7 s return shoe.pop()6 K7 ^+ ~& [' H3 ^% ?- L
3 l' d1 M6 O, n% W& ~; i
# 模拟下注法 A
% [6 i2 B/ L7 W/ Pdef simulate_strategy_A(num_shoes=1000, commission_on=True):
; @$ n! b/ s3 G profit = 07 ?# |) p. W! x, T( _9 W
commission_paid = 0
^) A3 O& w. A" F8 p7 E. y; C1 o+ @ shoe = init_shoe()
& w+ k9 ^" i' j4 L- v9 J
! ~, ^, h2 H7 ?8 n, X # 策略参数# M2 G+ H, D- O" @) C
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
7 r! B. p4 Y4 D+ F* C; `( d" H: { stage = 0 A \$ A4 v/ D: ]& s
target_side = "B" # 起手投注庄
& A ^% h; i9 \
! V) L9 `3 b3 ` while num_shoes > 0:
6 F% W# V# p& J9 w( W' m. b8 X' {: O result = deal_hand(shoe)' J3 ]# B- y9 H! W m _
- B) D7 [& u. V8 _5 u4 [# x
if result == 'T':
- V4 z8 `5 `5 G' S # 遇到和,不输不赢,重投( {8 H* \2 R3 n! e. \4 A* o1 J5 }
continue; T v4 d+ D$ Y- Q4 M; H
% f/ o m+ O/ b$ o; U bet = sequence[stage]) ]8 H T3 `2 P
1 L1 |, X/ k3 G2 G. b V
if result == target_side:% l! x3 x( r0 L( A
# 赢) J+ r' g: Y% }. F) F/ g( K
win_amount = bet
' K' z1 J/ E; R0 g3 v/ _ if target_side == "B" and commission_on:& ^4 @; w3 n+ |7 T6 I1 s. s
win_amount *= 0.95 # 庄赢扣5%抽水 h" I% ~8 X8 I; Z
commission_paid += bet * 0.055 r U; u% E: D0 x+ O, M
profit += win_amount
/ b$ D: o6 N c" B# Y; k stage = 0 # reset
0 j; J% ?/ B8 I" T target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
7 D0 G, ?) W( c: ?$ r else:
2 G4 |0 W% G2 g4 M# s" ] # 输, W* U* d0 ]7 J. l' Z
profit -= bet
3 U( u( Y4 w! s3 C! W& |; Z5 O stage += 1
: n/ u. B2 c# ]/ O( o* q2 a if stage >= len(sequence):8 [) @3 I- ]% K$ V
stage = 0 # 断缆reset
! n% G# F* Q: G, J1 X( e: n num_shoes -= 1- B3 b6 w& H: g! @% B
- s1 o c+ o+ Q3 I! N) _( J return profit, commission_paid
8 ^ ? l! O( q- A% G. G, ?4 m6 x/ S! @+ Y. S. t% Z! l
# 设置命令行解析
R* r8 x) s, j7 ?' ldef main():
4 j+ S: Z, L% U8 }5 G3 p" g! [ parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
9 \( k4 G% ^! Y* d, f2 |1 Y$ H parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins."): L; R. d' O: Q. J; E0 h- t
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
1 K" Y( F z, w ! [2 l/ S# B7 b
args = parser.parse_args()# X" F: e; Q; o; g
( V# E8 E' g5 M) M9 B # 抽水开关:开启或关闭
. J3 C) ? C& Q/ b' M commission_on = args.commission == 'on'+ r4 W" e# `! \) U' b3 G% e( b
( n ?. ]( M& t/ x5 i {
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
n( o9 M# W# c print(f"最终盈利: {result:.2f}")
. U$ s2 y- x& a print(f"累计抽水: {commission:.2f}")" h& A% T% n5 n# @1 P7 N
7 C; ^5 u9 O, q, L8 k' D8 |1 {. y
if __name__ == "__main__":5 G! y/ H$ ~8 C) @) A
main()
& B2 B2 N. u+ [8 K. L6 B* c
. B5 `$ w0 c4 u' f& ?
8 O2 N: }" h! z* p d* @' I' w步骤 2. 运行
2 ]. Q3 f( h) N# t% w. L
7 l6 ^: d8 T1 H k: t# y在命令行里进入文件所在的文件夹,例如:
4 y/ {: {+ H! V/ a* l1 ]cd C:\Users\你的名字\Desktop
3 M5 }( j6 Z! p# Y7 X$ S5 U3 Rpython baccarat_sim.py0 \% v% n5 z) H: a! P; Y
* N! M* F9 f( J' c, B7 |
输出会显示:
- c0 e" l. ~! P
& d9 ? n: {5 G, \8 l! `* ^累计盈亏: xxx
: ~6 I: n6 p8 c% m. q# F% c/ I累计抽水: yyy
5 o. q! k* i/ l5 p$ J2 u-------------------------------------5 H# Z0 E4 q1 G9 h8 S8 @% h
实例:试跑3次,
9 W& `9 P8 ~. t; b3 PC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 3 c* Z8 X9 | s" p3 O" @2 \( L( A: `& ~
最终盈利: -5360.35 $ N7 @1 Q+ }) U& ], x% _
累计抽水: 5176.35 ) l* {) V. }3 Q3 V. |. D
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
& A2 w% m) k) m最终盈利: -5661.65
) w9 Q% `+ v6 Y4 C/ E9 v w! P" D; m累计抽水: 5174.65 , D; J/ F& R7 A8 t( f& d
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
@% L Q( B& y& G) N最终盈利: -4244.50 h/ k, `/ k6 r( u3 P- R/ ^
累计抽水: 5176.50. Q( [2 G) C# Z9 s% R! m
+ e: Q+ L" K, h说明你的 Python 已经能正常跑模拟了。结果也很有参考性:* ~. c, P) M& t( A" S1 g
- U( v. H$ h0 M7 h, c累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
# w% y* x$ z4 M+ s4 I U
9 D! L7 q4 M3 Y1 j8 E% F最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
, B! G1 |, D0 Q/ H* m2 C, m这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
' X1 d" l. K/ i! q4 u人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。. D, b2 z1 Y, Q9 ~$ R
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
# p; @+ |. n/ A+ P( `& ~* W
+ a' M1 A, G* l" ^' c6 P启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|