|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
# h2 }$ U$ V3 I$ Z4 Y: Q$ l2 B$ B6 D& {) r
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
\ V1 u9 s( i. i) H* ]Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。5 \. B, z6 \- e6 T+ Z
3 @6 X) u6 ^3 M" j在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
& m2 m' {8 u0 @. ?假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
. Z, K8 |( Q( D) F4 {& K先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
. i& l% }. t$ b, J7 l3 S$ U5 @. O1 T4 ^5 Y
步骤 1. 新建一个 Python 文件
- Z" N2 _( b0 l- ^: D. A9 S+ c& ~打开记事本(或 VSCode、Notepad++ 都行,我用记事本)$ r0 o+ l) d% \8 J" v& c
把下面的代码复制进去。
- V+ S/ J) e& k: i8 G保存成 baccarat_sim.py (注意后缀是 .py)。9 _5 q6 T) n' T' _5 G6 P) f. Q
. q# X' y+ V) ~: r# x, q, m: K
import random
4 ?4 R% J: H- J+ h6 b: fimport argparse
! T9 u) Y2 L5 {8 z+ B; N: v; X& o. h" W- _! f6 ~3 J
# 初始化鞋子
/ i4 o0 w- A v7 i* W( jdef init_shoe(decks=8):
& S$ m$ f' J1 i8 K # 每副牌52张,8副共416张
2 X4 e( | ~( s q2 a: _+ n O( a shoe = []* J+ |7 w F0 d: \. y2 @
for _ in range(decks):1 s* A6 i* S- O& X
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
2 J# @: U4 r A- K. D random.shuffle(shoe)
$ e8 V3 J: u! g2 \' E! v3 x return shoe
# H. h8 O. M3 U) Q
- s. x" K8 L I" R- V8 S# 发一手
! ~# b8 f8 X( Z. i Rdef deal_hand(shoe):
: E1 U6 f/ d/ ` J2 Z- F# G3 w if len(shoe) < 6:
/ y1 x; ~0 t( M x shoe[:] = init_shoe()
/ c; Q& A- \ L* s return shoe.pop()2 b. f* Z6 Z. O: d+ O
( i9 @& ]6 E1 v8 L- S# 模拟下注法 A
# e/ ]& m* `8 ~6 J2 |def simulate_strategy_A(num_shoes=1000, commission_on=True):
1 e- m' M4 r1 d# D5 B profit = 0" Z( W0 t7 {* M1 p! G- z2 s3 ~
commission_paid = 0
9 O+ r( \- G$ \6 U8 n; O shoe = init_shoe()
2 z" s+ e& J1 u/ r: w2 e% y ; s R* H9 m. i9 J$ Y
# 策略参数
- e. G; i4 s' Q" | Q% R( s9 Q) O% q sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级. y7 N* e$ d& G% |; s2 c! T% y) M
stage = 0
( E( z$ S+ f* c3 g+ P3 e' Q p4 w target_side = "B" # 起手投注庄3 }+ A+ p5 J' n6 l, b
1 |0 J& P _9 G/ L
while num_shoes > 0:' ?: I; \5 w( y% x; {
result = deal_hand(shoe)
3 g% V. |6 s- m7 p0 o( Z
( Z% B7 u i+ K6 ^% E# @: c+ b0 f if result == 'T': . ]: Q2 O3 _' E9 E& C) w0 `
# 遇到和,不输不赢,重投' s* Q/ o: q+ P$ u
continue
a/ S# B; d! [$ m i/ w2 @
( t: G* y; j* t bet = sequence[stage]
8 s) ~( o4 |& S( p# P- d! a: i& V' g- v / @2 j- I- P$ x2 p4 i6 D
if result == target_side:" w9 B/ q H( N9 v
# 赢 }, L7 k/ O6 C
win_amount = bet; o4 V- m9 [; u0 R
if target_side == "B" and commission_on:
7 _( |5 D' q% ^ win_amount *= 0.95 # 庄赢扣5%抽水 q. a8 x5 j3 B4 O. q& `4 _
commission_paid += bet * 0.05
8 C7 K% S k- _+ t. h3 k) L profit += win_amount' g; a+ d" V* @6 X4 E G& H
stage = 0 # reset& z& G+ y5 y, b
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
( @$ C$ x, V; N8 e else:4 ]" @3 }" i5 ~+ ?& q) i3 d
# 输/ V- e" S4 {4 G, N+ ~( R
profit -= bet% n7 Y$ H8 _& k0 t* I
stage += 1
9 J7 P8 ^, g. H. c0 X if stage >= len(sequence):
$ R7 j6 {7 o" g0 V) s' ]$ A' X stage = 0 # 断缆reset. W v3 H$ |+ C. W4 N
num_shoes -= 19 I }4 d" I! v! [7 J6 y3 \
& [+ K7 L# e, I( C return profit, commission_paid
) E+ F. [$ u9 K) d. A6 X: n+ Z; n( J5 f; n/ T: z
# 设置命令行解析
7 R) Z. b- S9 J! t4 Vdef main():
! V8 h* ]2 K1 u+ K- P/ [ y parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
! S, N2 J2 w+ C( Y. S" a. J/ ] parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
3 l5 ]6 d' j6 J, U8 `, I4 |* J parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")7 \2 g) Z$ X& `% h
" R9 G: @2 P2 H& L* E args = parser.parse_args()) p$ d: i8 l: ]( Y+ t
; f) z7 ~ ^& R3 d+ Y5 ~) d
# 抽水开关:开启或关闭
- _* N* ~7 H, Z6 P, Y y0 G$ g2 f- m commission_on = args.commission == 'on'
4 D% `( Q3 e/ d 2 v* C: I; ?1 S1 I7 y$ w3 ^ p
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
7 v( |0 ~8 t6 i print(f"最终盈利: {result:.2f}")% f, { W# Q# e) v/ W& s
print(f"累计抽水: {commission:.2f}")4 y7 E, o5 L0 G, J7 [
9 Z% J F) x7 Zif __name__ == "__main__":: a3 c5 n0 w2 B5 @: {2 f# i; [. K% E
main()( H5 D7 {: }* U3 e2 Y
^* H- L& {* }3 X J" N8 s
2 G0 A9 g0 l& m6 H) R步骤 2. 运行+ \) e2 f- Q2 o) e; H c) U
6 U4 [+ M5 s2 Y' g# T在命令行里进入文件所在的文件夹,例如:9 {: Y! j2 n/ H1 H& d& H
cd C:\Users\你的名字\Desktop: F. |0 O6 i) ? b' o/ Q
python baccarat_sim.py" D+ d% F0 Y* r8 Q" |# o; g1 L
$ R( u( C& M0 l* M
输出会显示:
- c# {& i1 w/ }( T( K% Y2 y) g
& E: c* r( q, h) |2 i% Z累计盈亏: xxx
9 W6 u4 g+ E6 f R& j( W& A9 n7 |累计抽水: yyy
" ^* W6 y* N1 f& K% ~-------------------------------------5 m9 j" X$ x6 J. h' ~, y9 T( O( ]; }- q
实例:试跑3次, # a8 t: b4 h% Q& w- p
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
* @: ?- L: b2 r3 i% e. }* |; m最终盈利: -5360.35
" K+ s1 ?2 C+ a, j( T, s累计抽水: 5176.35
5 I: [3 n; L4 l& H/ dC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 ^) V: V4 u* i" D最终盈利: -5661.65 + q+ ?6 R$ }4 y) b0 d2 ?8 r
累计抽水: 5174.65 : g2 b2 Z& g4 q" o
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py + s+ d/ g" M. e6 c+ Y
最终盈利: -4244.50
* ?9 R8 q7 I' z7 g* a. n2 U- c/ M$ `累计抽水: 5176.50& ^/ z; H" ?" o4 f
6 W; [- t: D7 O, w9 ]
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:. `- P( c2 Z% v" Z, C6 D
9 a. V/ Q9 ]& v A2 N+ R累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。4 |8 ?: w5 D B* ~& s
! l& q/ D- S6 |# i最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
0 F7 Y( l/ r' W: \这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。! y$ Z' B D$ n$ ~8 ~1 m
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。0 F% O) t/ [1 Z w; R# u0 S& u
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。% }- f }2 e5 Y& e9 L8 a) D0 i0 p. Q
, c/ M) h$ i- B6 L# U, r; n% x
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|