|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 % ~1 X8 C T0 C$ B' C) n
* z: C3 e: u% j* A. _7 U+ ~7 ^可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。$ L5 t. q! D; l, l; @0 m: M
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。* e0 B* L f7 ` y! s
$ X+ i% G0 |, u, L在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
, j4 r& ?5 {, M) ?1 D* g' D假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
# y& D5 t# N- {$ X+ n/ S先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
1 q: I2 d7 G9 O* Q( A
# w; {8 {8 H; M" G, t8 E步骤 1. 新建一个 Python 文件
& Z/ u* ~1 f# [$ z9 }+ x4 `打开记事本(或 VSCode、Notepad++ 都行,我用记事本)" a. |) M( [' d& m
把下面的代码复制进去。
. l- X9 q5 Y* h, n* d- W保存成 baccarat_sim.py (注意后缀是 .py)。4 e' P) d; F" v A6 V' H
) }# y/ M& N! Z& m+ zimport random
* }& n% Z3 V2 z9 M( B+ d9 e" Rimport argparse& V3 m {3 ], h; L- ^' c
: J# V. D# E1 E. J; r: L/ E# 初始化鞋子
) K" n4 K1 O0 D% x o# K$ Q2 Cdef init_shoe(decks=8):9 H8 T- N9 R f H |6 C
# 每副牌52张,8副共416张
/ ]5 t% g+ L1 f' r- h: U9 K; y& ` shoe = [] h5 D: }0 o# ^8 c" t7 k$ a9 l
for _ in range(decks):
' q' w4 }# I& |5 ~+ m: [ shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4 b- b6 r X" D! {( z0 M
random.shuffle(shoe)- t* w, K9 c1 X; ]; i H5 S
return shoe
' k, H$ p4 j0 C3 Z* \, e
1 o4 p- }5 X7 [8 x$ E$ _8 U1 [# 发一手
+ H7 L ]- `) K$ N) f5 jdef deal_hand(shoe):
, Y1 `' v3 Z: `2 i if len(shoe) < 6:
# `+ \4 z7 n0 g" ^4 q" ?" U$ } shoe[:] = init_shoe()
3 i( C2 S6 @- V return shoe.pop()
) L3 O6 T, H! O5 `' v+ V
& ^6 h$ b, @6 R: l, m# 模拟下注法 A% `4 q, p: ?$ Q7 s9 O8 s6 a7 [
def simulate_strategy_A(num_shoes=1000, commission_on=True):6 V& g: S9 q2 |2 ~1 ]) n6 `, r
profit = 0
1 D4 [ }4 u# C& D0 @7 F5 Z; e commission_paid = 02 G0 m3 K7 A6 L& i9 t
shoe = init_shoe()
5 |4 v$ l% }& {+ [7 N% q" z+ }& Z
9 c) R* ]: k. M # 策略参数
1 B# E6 G8 `' q _0 d sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
) c% S/ ]3 b6 P! p1 G# ] stage = 0
& @/ c3 J& N4 K- g4 P; x, \ target_side = "B" # 起手投注庄
2 D; h) R. a' `+ U2 r
2 z* C2 c" Q2 l+ g$ a5 ^9 h while num_shoes > 0:
# ?* K! K+ V, x5 Y4 K, e0 R result = deal_hand(shoe)
! e9 [$ ^$ j* x. H* G
$ @7 t) f, ] J: C- e if result == 'T': 4 q* \ g0 y% g- t
# 遇到和,不输不赢,重投2 Z5 w4 W6 G5 B g" ^+ v
continue5 U/ |7 b+ I. S8 K: H; {
: b. _9 |& t4 ^+ i* K0 |+ ^ bet = sequence[stage]8 Q. V, d0 V2 l* y' N" @
4 a* h* L$ H6 Y9 @% r if result == target_side:
7 u8 m* Q, g3 j0 c # 赢
$ h) L+ K5 N* ~9 R9 B+ C% M9 l$ y* L( T win_amount = bet
( p4 v- l! S7 w$ T if target_side == "B" and commission_on:
. a: U! p) Y% F' n9 `! n win_amount *= 0.95 # 庄赢扣5%抽水
4 ~! m0 f* v* Y |$ K0 d commission_paid += bet * 0.05
. u& \2 ~% X1 { profit += win_amount+ R/ }7 z& K/ ]2 ^. a- Y* v8 V) R
stage = 0 # reset
. X9 i8 q: v& i: `8 h target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定), B7 K( O0 W2 k% J
else:4 M3 K0 C2 V6 V3 v ^
# 输
4 Z- g' |+ t' I9 L% U; U, K& I profit -= bet G) W* M$ V% j* R0 K- x+ _
stage += 15 G0 T! ?" O- C8 G" U$ T# w
if stage >= len(sequence):: K* B( g6 e( f9 X5 Y/ O
stage = 0 # 断缆reset! ^# r! Q. Q9 n- @0 c; c
num_shoes -= 1
$ O0 m* m2 U4 @! e: C+ J$ m6 @( |
return profit, commission_paid
( o$ ]2 W1 s- W1 Y
% H8 h, F3 J( M2 O) Y# 设置命令行解析
% z9 u2 q1 l9 ]) Y$ w4 jdef main():
9 D0 S8 ]; R4 x: ] parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
7 K* A0 X1 a. H$ r$ Z parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
9 M$ I. P# I# I0 W" d( f! y' j ` parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
6 z4 f1 d1 p$ k8 M3 e
0 z w' ?5 [/ Q$ ~+ F4 X args = parser.parse_args()2 u# W+ ]4 ^. ?7 H
" D" H2 K9 | @& K
# 抽水开关:开启或关闭% P1 n3 g# t0 ]; W; A* S5 Y8 J0 z
commission_on = args.commission == 'on'$ J% W9 }6 V5 B C
; N0 i! p" p% P; y5 w) D. K result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)3 n6 @1 x# i, Q& F m" C0 a
print(f"最终盈利: {result:.2f}")
% x1 R" j. g6 a( ]2 s print(f"累计抽水: {commission:.2f}")9 Z) o7 y7 s# U5 m; C
- I0 a& y1 o% u# x, y
if __name__ == "__main__":/ H4 _: e+ {, x n
main()# }; }4 j$ T' H, h3 ?2 M$ g
& q$ M& Y" h$ b) c2 Q9 ]
9 `' N+ K5 k# g* z) ~6 O5 `步骤 2. 运行- o' D( }, u. R+ T7 u8 }
2 l( Z0 k' Y0 Y& U* y# S
在命令行里进入文件所在的文件夹,例如:
& @8 G$ g' l) }$ L) l \cd C:\Users\你的名字\Desktop
7 }8 u* ^8 j& |% i; Upython baccarat_sim.py
7 g) `* N8 w7 Q$ ~7 g' x# N4 O; s0 W" N# E) u
输出会显示:
: b" W# \ Y4 N; q' w" R0 w+ P- b! P% X4 d; `7 Z
累计盈亏: xxx! r1 H3 h# d- Q; L' q
累计抽水: yyy% V6 e: i" n6 U7 Q
-------------------------------------
1 K4 q# n% P0 p# a1 C1 n" U4 v实例:试跑3次,
( K' M; r1 G, ^0 |0 \4 H' l: \C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py / C8 z( `) Q3 g) k/ z& R4 ?+ `
最终盈利: -5360.35
9 A: P! b; |) x5 \0 Z ^累计抽水: 5176.35 2 f+ {4 {: k( o4 a+ ~3 b/ i0 `+ n9 @
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ; r, v z \- N
最终盈利: -5661.65 : u1 u; I8 F% z) c! B4 R
累计抽水: 5174.65 / m& z" u- |1 h3 ~0 h" b0 \7 @; l( Y
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 5 f! d: g: s/ Z0 P$ x
最终盈利: -4244.50
9 Q( l. p% @9 K) G累计抽水: 5176.506 Z3 S# Q2 E. M
! @' e' |; r7 B3 C
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
M1 H2 \+ s! h+ W9 N5 R. F [) ~- t3 l4 E
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
# F7 v U& q: [- }
/ u" Y% C4 \3 A, @; C# y+ Y4 Z; m最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
' X; r5 V7 [# e; _2 B: q7 |这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。% D+ ]# Y! s" l/ w5 ?: z$ B
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
2 o9 z* E. K1 I但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。, E, z' O* j7 C4 N, W( t
4 I! F( M1 x8 K& f9 @" Z启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|