|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 " D! e8 B7 Y) D2 |
; e' ?8 E- p- W( ]可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
9 f' b2 H& a* ?% m q3 l' h" {) UExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
1 E$ b) e& f0 z4 n7 k. g- v; _
( i. J# |! L# w2 ]9 o在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)# `$ Z; W! O" x) J! k N7 c- I0 Q
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
6 M8 r2 _! E; [4 ]& ?$ R7 e先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
- C! j4 n7 ]& T# i1 ]( l; p# W7 R* B3 T* d0 D5 q9 w3 ?! @
步骤 1. 新建一个 Python 文件$ I5 K; h6 H; J% d( F# v
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
$ e% z: z& S8 {& c d& R把下面的代码复制进去。
1 B* r. o3 ?" K' g$ P保存成 baccarat_sim.py (注意后缀是 .py)。
0 H% i# S2 v6 [9 a7 G, Z1 H* n/ q7 N9 {# G3 z) U. y s
import random5 l* G/ C# a9 {+ P6 ?% O# G. p
import argparse! D+ q7 j9 } A) t, E
' [( l5 A8 I' w( _0 u1 q6 t; y
# 初始化鞋子
$ ~5 I$ l( l2 [* Pdef init_shoe(decks=8):
( _% l1 ~* h/ v0 a0 V' n( r # 每副牌52张,8副共416张4 h- Q% z* k" }8 e4 f& X* K& Q
shoe = []* W0 x* O) ?6 M+ z; y
for _ in range(decks):5 ?# G" X7 r# A
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
0 F! F: D2 K/ O) _6 e- a random.shuffle(shoe)
' c% ?5 E# N0 l: m% m return shoe) K% F9 T9 V* L: G X' L9 Z
6 {% O# y4 D6 A
# 发一手: N! ~+ d$ Q' h) }6 x
def deal_hand(shoe):) }) c: _- p5 Z1 D- o. g, |6 D/ T
if len(shoe) < 6:
* m+ \ J+ z+ u shoe[:] = init_shoe()
0 ~- C) I m. h* K return shoe.pop()7 Z0 I; i, A7 z7 z$ O/ e
) g5 z8 E9 \/ ?0 Z# 模拟下注法 A
5 x( ]; h1 v+ k7 Z7 A7 Jdef simulate_strategy_A(num_shoes=1000, commission_on=True):
- u! F L ]3 Y D+ T7 [0 I0 P1 b. y* Z profit = 00 J0 y: A+ c# ]
commission_paid = 02 b) `. r0 S" v/ P3 B) b
shoe = init_shoe()
; o8 u9 ]+ ~9 T# n
9 ?' M q+ s0 I- D3 X5 R, n4 P # 策略参数
: b$ v' n. n1 }$ O sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
* H; r0 n0 ~; s! s stage = 0
) \. h) m1 o; b, X- _; O% P4 K, L target_side = "B" # 起手投注庄+ k! `5 q$ s+ m! l8 z
% z7 t1 B$ P- j( `
while num_shoes > 0:" x% \, a1 L j/ L. |) K
result = deal_hand(shoe)
2 a0 ?+ m5 b0 _7 X8 k5 n" s( @5 P
$ J5 C/ T, s) M! v7 s' `% c. G if result == 'T':
5 t8 M& a$ H5 s' E. b1 j# S # 遇到和,不输不赢,重投: A8 o9 `' W7 a% Q+ ]
continue$ q- t N5 S/ j5 M$ O1 V
% Z7 ^5 d* b. k4 \9 \/ H( O bet = sequence[stage]
6 f) p. T+ N1 j8 \) d" j% r, A
% i& m% U" H) j1 s$ z if result == target_side:# @. {; V* B7 z$ ]7 M
# 赢
* L( b$ i/ r) e# W; r win_amount = bet* J8 T2 R4 C/ o. q
if target_side == "B" and commission_on:
$ u5 a+ q# |3 W) ^ win_amount *= 0.95 # 庄赢扣5%抽水
' m+ I' L! r& w7 ^0 H/ X* j. R9 K commission_paid += bet * 0.05
# }% {7 b6 m; _1 t% B8 k profit += win_amount
` h& Q% l+ ?, N stage = 0 # reset) }4 T$ A \8 M
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)7 _" _! ?" L) M2 t8 Y1 L. x
else:
$ }3 U. k& l5 h# R5 `+ u # 输
- W+ q w! d/ P! ?9 |; w8 D profit -= bet% D4 f9 r8 v8 J( \4 t! Z
stage += 1
( U: }7 R$ E+ g if stage >= len(sequence):
- x, E, k+ V5 c+ r3 ~0 B5 ^ stage = 0 # 断缆reset& h# a* z" a( {( _3 D
num_shoes -= 1% g# {* z. S4 Q2 c" T! `
% |: h/ x! ]3 L0 }+ V8 R- {. g return profit, commission_paid
* U: l5 z8 N# v5 p1 d. N
) O+ @- R" Z& f8 G# t5 N N# 设置命令行解析
1 `9 R% L( P( M) J6 S% A- N6 P7 Edef main():
: f6 r* R- F1 d- N$ r: a7 M parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")8 e5 `( v2 \, l
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
0 D6 _7 w) U/ P9 h' f N: } parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
( K- f0 x$ E# P2 F
. g3 @: o* A; k" F/ S6 E9 ^ args = parser.parse_args()
% Z, G6 R* h* D6 m- T/ v, V, } x0 u. e [$ Y4 _
# 抽水开关:开启或关闭% ]! J$ x' o+ y# K% i) r0 M+ E' z
commission_on = args.commission == 'on'- m! m# V4 z* p! o7 f& X `/ J! k
& w9 z% r, R1 K7 s9 q
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)1 ~. u* r4 t4 `; q5 X
print(f"最终盈利: {result:.2f}")
/ |2 x% _! X7 K- j8 D2 t print(f"累计抽水: {commission:.2f}")1 w E. s* e) z, g
1 }9 @; Q& ]" Z+ B* o$ C2 q
if __name__ == "__main__":
) \' Y8 j# O" | main()( }2 m, `/ b$ Z7 x9 V
) E+ ?* S) ?" C: _* G
% _( C' _7 c$ C7 ? n
步骤 2. 运行$ ~0 F) l3 n/ o
3 w1 S& ?1 ^/ U; f0 z7 t* V在命令行里进入文件所在的文件夹,例如:3 {) N' g# ^5 d# Y- C
cd C:\Users\你的名字\Desktop1 }! N2 k0 `4 @. d- u, x
python baccarat_sim.py
% C }) `, D$ r0 Q
$ T$ A& O4 a) j* d输出会显示: y; L' H: ?* ]* o1 o6 |# { H8 x* |
+ ~$ t) f& D r2 T
累计盈亏: xxx
% _* {# [7 j9 `$ h" J9 X- r9 ]累计抽水: yyy1 W4 w. a$ T2 A! b
-------------------------------------
8 s0 E1 r% A! i2 [3 ?% h实例:试跑3次, & l- ?4 H) V, e0 h5 _1 o
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 9 B$ a: T; ?" ^4 G2 Z2 r+ U
最终盈利: -5360.35
^6 q5 f0 O! h; j2 B: H, R累计抽水: 5176.35 ; S5 k( ^% x3 I
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 8 t8 e* i9 `5 k7 `* c' P
最终盈利: -5661.65
' W8 @7 p3 Y* A) x+ x$ x/ ?+ p累计抽水: 5174.65
& x) b! Q' R+ k1 _C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py $ N( e d6 s& }
最终盈利: -4244.50
" U) Z+ z# B& U$ {5 i U累计抽水: 5176.50# S% v% L6 E( B* g4 E
8 x* g* h. B# [0 K8 c$ B) Q) i) o
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
/ f. H: T3 I7 k! y1 @( |/ k4 h9 R& o& K; u$ C
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。( D& b! g4 S' U }. ?
# r, x4 y* \9 d* T; c. a, D) @' o
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
# m) ^8 j- v9 q! X这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。$ q1 x- s- ^/ M7 H& n$ Q! R
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
, U0 s0 g. ^% J" Z/ S7 A) J但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
- A# B! `# z8 P: }; R3 B$ u% c, }, G* u) \, B% R
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|