|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
! }& G: t& |) F
- E" w/ a) A# T1 s% `可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。/ v% t, E6 _4 E \5 p
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
0 I3 U+ d8 y: B- f0 z$ { c. m3 b. m. Y' Z% Q2 ~9 t& f
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
. j/ O b' ]# h) H" [/ K0 T假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
9 }) Z2 f2 C2 n3 ?2 r先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
( m" N+ E9 E3 U6 N( g/ ^0 X% m9 Y; ?- t" i+ |0 `/ D2 R( ~0 ~7 _
步骤 1. 新建一个 Python 文件
5 V6 x! u; ?1 h6 k' }6 g( o6 V打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
2 \4 k* n) {4 G2 P1 e6 J把下面的代码复制进去。; J0 {1 z0 Z8 \$ F, r" m$ x" g+ Q4 z
保存成 baccarat_sim.py (注意后缀是 .py)。/ f& y; O5 F' i' N) K
, t' w) w6 E4 c
import random
' Y) V1 x. b' V& I3 {import argparse7 J- `4 J* R, u/ `
K3 E& p# i( X. N4 \& h# 初始化鞋子
* ~: s6 K- f' Adef init_shoe(decks=8):
4 o9 h \$ a: b' i5 h # 每副牌52张,8副共416张
) X* ]+ ?) p6 l) ^- |" t6 \ shoe = []2 O6 _' D& L% `) {6 h6 H- w# C% n2 `
for _ in range(decks):+ p6 r4 L& [' f' r! ]: c
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
$ a Q" ~3 P6 O random.shuffle(shoe)" p6 N# L% C) \$ B6 s
return shoe
. [8 m% e% H" @0 O1 P2 p& N! k0 w% f7 X/ e: s) C( p
# 发一手) N5 D: W7 D9 G6 t
def deal_hand(shoe):1 M. c: o( c; O, Y
if len(shoe) < 6:
5 a$ c) l: ?0 X3 u, l shoe[:] = init_shoe()
$ D( Z% o1 k* m7 o u9 L8 t return shoe.pop()
+ _; M9 d% [) n6 y7 M0 e/ b
( [; A$ w- {$ K3 z0 T; a# 模拟下注法 A
( ]$ ?, w( _4 D8 r0 Udef simulate_strategy_A(num_shoes=1000, commission_on=True):
/ X" {" c k; P& ` o1 N profit = 05 E( R/ S! [& Z. I0 S: l7 O
commission_paid = 0
; O* }1 `7 R5 G e shoe = init_shoe()
: j( I6 E% o( S; N0 H - X4 |" | f. J
# 策略参数1 u3 G, J/ h! W. T' L
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级 s: G4 Z$ A/ z1 O) J( K
stage = 03 J3 n% K$ s' n
target_side = "B" # 起手投注庄
7 _5 @# F6 T) O1 j" I5 j/ E$ Q
. y; @& z i4 `( G, A' h' S: X* R; z while num_shoes > 0:/ S6 t j0 v" S$ E$ I
result = deal_hand(shoe)3 d; D0 j5 A, x. Y- m* ]
6 N- c8 @0 {5 d1 n if result == 'T': ) Q) ]) o: a2 `1 D
# 遇到和,不输不赢,重投 W1 X F+ P2 A4 }4 J
continue
7 S9 o7 i% L& D2 X
; k- H- y) W& T* ?& g( a bet = sequence[stage]6 Q: i, y6 Y- I/ ^& W
) L5 p9 T0 @' R- L5 ` p
if result == target_side:* ~* k5 X$ P) r' H3 W$ z5 N* J
# 赢
- I$ t( l5 z; N# s8 A win_amount = bet6 T% U% n& X: d8 C/ ~
if target_side == "B" and commission_on: ~& L, C1 }5 Q( A& t
win_amount *= 0.95 # 庄赢扣5%抽水! k8 I8 D9 g& h6 I }
commission_paid += bet * 0.05: D0 P% m$ N3 V2 z
profit += win_amount3 K N5 e3 o9 |# O9 V" u; Y* I
stage = 0 # reset8 [& p6 M: u f
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)6 c: X0 ~4 t {7 k {; h) k9 H
else:, o, {) S/ h9 [, p/ l
# 输
$ n) I9 Y4 I: ?1 @( p profit -= bet8 D8 N7 k, ?8 Q+ h) [+ c
stage += 1. R# K! k2 v9 H' h2 j" e5 G' `
if stage >= len(sequence):
2 B5 d& X: M4 g. m$ d stage = 0 # 断缆reset
& Q( r7 ~2 C, j- ]. R6 `1 Z num_shoes -= 1
# K4 ?$ ^) E& A! O4 U) y2 v f) @
' ?) X" v7 C, z7 ~; w3 E, ` return profit, commission_paid
( p7 ]0 B7 I7 y9 B# V7 d
' e5 K9 Y+ q0 u( s2 h% j# 设置命令行解析. V0 `, \3 T% S/ b+ l
def main():' t8 O, G9 h; t, J( @7 S
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")* x- P2 S( G1 z4 j4 k2 n
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
; U0 s( @; K# O8 \5 | parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
. N4 J- ~/ k/ X- r. I ! }/ [6 n# H" W3 t: R
args = parser.parse_args()
9 Z. Q2 w% z9 s. J0 l* y v: x , H; l2 e3 r5 B T9 P
# 抽水开关:开启或关闭
7 g: }! a$ }. i; ^' Q commission_on = args.commission == 'on'; r1 B/ }* P' T5 C0 B9 u
% o8 j+ k- |7 L4 z
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)& i7 R/ O( a- M7 Q6 W- o4 E
print(f"最终盈利: {result:.2f}")3 n" |) @* T& h8 Q( W4 c
print(f"累计抽水: {commission:.2f}")
# Q& g4 K) H, A% |
; p- J; c( w( Zif __name__ == "__main__":; g. ^& t" w0 H7 y9 h/ e
main()
# H4 C) d1 }" o* t9 Z O
4 E; @9 z. \& Q; q! ] G6 A$ g6 m( W2 f- d$ C
步骤 2. 运行
8 A8 P$ P7 t3 t7 V
3 E% ~2 N5 Q( @0 e Y在命令行里进入文件所在的文件夹,例如:
) }% d. Y& G$ _! C( q( n' S5 _( pcd C:\Users\你的名字\Desktop/ i% h: c7 A( u! U" E
python baccarat_sim.py- Z) t5 x$ @8 ^/ q, _
9 w% w# V) ?) ^
输出会显示:; @( L3 M8 K9 M
4 i! p" z: E' m5 g# b. v
累计盈亏: xxx7 \. x6 K( M, d1 I L
累计抽水: yyy$ x8 {( T2 U6 u% Z5 j3 Q
-------------------------------------5 q% O* q [* n( V4 v
实例:试跑3次,
6 G$ q; i9 g r4 m! b( r$ x: |$ N0 QC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 g4 ~6 r/ m8 E/ a最终盈利: -5360.35
3 h+ j6 ?' G% b- R: X累计抽水: 5176.35
% G9 C' g* W. Q( c4 e- U4 `C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
. D' g6 G2 S! Y! Q最终盈利: -5661.65 * s8 a. b5 ]! M- {* p7 }
累计抽水: 5174.65 ! S) ]$ A9 c# _& u" @
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
) A; n& f/ e; g* S& ~0 W最终盈利: -4244.50 9 b4 h( v" Q$ v3 Z5 u3 Y- ]
累计抽水: 5176.50 i7 v Y0 D! N" f2 o$ [1 m
) Z, F: d) M% C# C说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
, M3 ?1 P& Y) ^+ ?$ R) `
- l" T' K4 t; ?0 e累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。3 O. F: i* K2 P3 c. s4 r
9 C4 P( F. m- C. G% n& F) @最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。+ B" f5 f3 P7 N5 v
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
, t$ Q) K+ r* Q0 _( g, Q- ~1 a人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。/ Q$ f3 {2 v D8 t% ~& q! F
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。* F$ p/ T3 Z, ~1 _& _( j
* z% g; l# I, m- ]( Y启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|