|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 ; f" B( S& R% Z' t, ] Q' C- E& b2 x
7 x- h0 j H$ Y: X* ]# w6 o" k
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
0 h) z$ ?" Q# Y2 f1 W: R# S3 e+ nExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。* C/ C. @" L& _5 c& d5 E5 E
. y& y* X1 L5 u0 G: Q5 [
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
# X( M4 @3 }# \3 V) C3 N1 \假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。) C2 l! L9 k$ U8 x- q+ h2 @
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。9 J/ z1 i& a" ~! Q; t+ p& E
) i$ z) X7 O a4 ]0 |步骤 1. 新建一个 Python 文件
7 v8 A. w% o0 X1 k打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
, }2 T* A! l& n( l; J把下面的代码复制进去。% T, H* l3 p0 v% ~ h' ~/ y
保存成 baccarat_sim.py (注意后缀是 .py)。5 @4 n) L( S' ]; [
( T9 Q& [( a# I3 d. g, a1 I, F0 q! [import random
+ c0 O6 _8 n1 E+ himport argparse
& J' s" J6 _4 x* _! P$ t3 `7 I( R5 Q7 {1 _' r7 X% M8 @
# 初始化鞋子" V2 N& m% k0 F6 U( g+ Q4 i
def init_shoe(decks=8):5 G4 o L, b; a
# 每副牌52张,8副共416张
l' A; Q. ^4 s shoe = []
' v y4 }2 x3 g( ? for _ in range(decks):
: U- `6 ]+ ?2 m5 f7 w2 K& t M shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和47 e7 L) q5 l5 @- m; j6 K
random.shuffle(shoe)
9 s2 O) p7 W r1 _, C; a" B H- a, a return shoe" E! n7 Q; {) ?/ N2 O
. V% V# N' \9 m1 m# 发一手: K+ v. x/ m2 a/ i
def deal_hand(shoe):' H$ `: S( E+ Q: x2 E
if len(shoe) < 6:- R& f' p& i6 p: n+ X- }: [7 \
shoe[:] = init_shoe()( ^# V- I7 g# j& }9 q( C% W
return shoe.pop()
4 o( ~6 L4 c8 |& S1 K W w- N5 }; N7 y0 u: z
# 模拟下注法 A
1 S% h8 {: k7 M; udef simulate_strategy_A(num_shoes=1000, commission_on=True):( {4 j5 L$ D. ?6 _: [5 A
profit = 0
9 @* W% `3 M, A' { commission_paid = 0" b( ^3 f/ v6 l5 C
shoe = init_shoe()
! }0 G% H: c- h+ s1 b 2 e0 _2 U" j) ]8 f
# 策略参数% e1 l; b/ V* C6 t2 E5 C! o
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级7 a1 U6 s; C( b/ z" l! q
stage = 0
. Y2 B7 M$ j* X: S, Y$ {6 M$ ~ target_side = "B" # 起手投注庄 g* h" p. i D) B* K
6 a& H& M1 w) G2 i d while num_shoes > 0:: o, H( P0 c4 k1 Q* k" t
result = deal_hand(shoe)
# r2 q) n3 S7 R; @- T, F$ X6 B4 M; z( `/ v- V7 L# Z, w
if result == 'T': G8 m2 C; i: g9 {
# 遇到和,不输不赢,重投
, }4 C) u% J W2 v3 M# [ continue
% k* x5 P" P# Y6 U; V* B: z1 m& X* r. T, C7 @" c/ g2 p2 n
bet = sequence[stage]
$ U9 S4 R1 a6 W" |
6 p( V# ]* I* r* N, r) b- Q2 b0 k/ Y if result == target_side:
; \, |( O$ q1 P$ }% J1 A& b # 赢% s6 X. a0 Z( O! j& t# t- }
win_amount = bet
% F& p" \+ H& v Y Y ~& F8 i% `8 y if target_side == "B" and commission_on:
# o3 }9 i: Q. p% o' t% T2 W win_amount *= 0.95 # 庄赢扣5%抽水
! X3 J3 f+ G; t commission_paid += bet * 0.052 q" w5 E, j; }
profit += win_amount+ K% U+ Q d8 A2 I1 e( V1 K4 A
stage = 0 # reset
. a/ I0 Y, v9 k9 C! c& W target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)5 C" n& o( ]6 W& H1 C9 n+ s
else:
7 ~; k+ h0 b) v4 V: Z; g! h # 输
$ h9 g& l2 c4 P3 P- q' \8 ]: p profit -= bet+ ?: d$ x% ?- q4 h3 x- E* J
stage += 1. P. J" A/ n, a# n% t
if stage >= len(sequence):! I$ |! A- P( b& G
stage = 0 # 断缆reset' a! k1 [+ {1 m/ Q0 G
num_shoes -= 1
0 _+ |# @' ^, t* N# W" d8 `4 x" z. \* Z6 X) y! A0 `) u$ t' \! R
return profit, commission_paid
# \- S8 Y3 Y' F& U& V1 p7 r' ?0 p! D6 w- z( n" f% m
# 设置命令行解析5 q: u4 X3 v6 O1 O/ q
def main():2 z! Y/ B9 a0 N# j
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
4 O. n* ~8 c" g# E parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins."). @& p) ?6 M3 y" j' R6 \
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
5 k6 F% x. Z2 h* W / F9 B" C# ]: J8 h6 }! h
args = parser.parse_args()) b2 V, P. b! e1 E! g& a& ]
3 Z" f+ j/ C$ M& H # 抽水开关:开启或关闭6 c3 E, I7 I* {
commission_on = args.commission == 'on'7 e, T+ K0 H1 i$ T. g O
8 V% h) G+ f, | result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)' ^6 ~% ~" D( W, U3 C6 S; m* O# M' o
print(f"最终盈利: {result:.2f}")
& \3 @$ n" V1 X, v( V4 p0 K print(f"累计抽水: {commission:.2f}")
( n ]- u; d' U2 l2 }6 c3 V* v& [% C* R2 }2 f$ p
if __name__ == "__main__":3 M0 [5 D' e# k& ]4 Z+ |
main()( R. p" H. y& i& g$ H& q
) ]4 \- c8 t3 d( _* e7 H
3 g7 _6 i9 |& w: f( E步骤 2. 运行
+ H7 d+ W& q" ~( n( w4 I; n/ y" [. P, h V" z3 s2 L3 p
在命令行里进入文件所在的文件夹,例如:
H+ w. ^/ f* a+ W4 ]. |7 \cd C:\Users\你的名字\Desktop* g/ k! W* y( g( z0 x
python baccarat_sim.py
' w1 [: l& n- h9 {3 S7 i9 m: T7 Q+ k: _: @
输出会显示:0 n1 h+ M: I2 t3 F; i. `
+ g1 F/ ~) U$ j) c1 H9 A
累计盈亏: xxx; M) P) E y4 Y0 g& ]
累计抽水: yyy
- _/ z- I; O, N! p, f% m& B-------------------------------------. g2 N! n8 A$ H9 e. m
实例:试跑3次,
H4 f7 z5 p( H! j( R: fC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 1 j/ v8 M: W; k' T8 |
最终盈利: -5360.35 . L* V# X$ R2 P
累计抽水: 5176.35
1 x' j4 }+ m" uC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
: Y' b9 i9 N) j/ _9 R最终盈利: -5661.65
% z+ O' T% w" ]" }2 m累计抽水: 5174.65
. ~- x$ g ]1 W% E* l$ XC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py + o" ?( K) z/ z* R' m7 \
最终盈利: -4244.50 , ~8 G, z9 P& J% p+ l
累计抽水: 5176.50
/ k6 M% x9 S8 O+ v3 {( k* U: d O, f; e. C y, {( I' }
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
/ o4 b8 `3 s7 R9 z0 Q6 U5 P/ j z
) Y! y! |* y& K' t, A累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。8 K5 c& f2 E: ]# ^
% i: U& D1 F: Q+ u
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。7 Z! X, T& ], t3 W, ~
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
5 t' f8 O. J5 P5 g* H9 T; r人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
: J2 l3 t! ?% B8 W$ j; K, v但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。3 M4 ?: T0 O! A
4 o: `/ e. r$ M, o# H8 T启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|