|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 9 e/ V: a- W: K" o! h* R
, L9 l% v' a" K3 W( }% H+ z$ f可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。; h. B! Z& d$ m2 d2 u P# l; W
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。% g6 B( j2 m7 o. t+ J. D* x1 r8 b
/ S" t) G6 w4 A7 Q3 Z4 Y- y; O. ~) P4 c在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)6 v. ^' j4 w1 j6 G' Q A, @6 R5 \, m
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。4 K# a( K6 @% R
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。" y* r: p6 I# ^! I
) a/ b* n" O7 ^/ a6 i
步骤 1. 新建一个 Python 文件- @+ c( G* r' v
打开记事本(或 VSCode、Notepad++ 都行,我用记事本): N- {+ B; R: K5 u1 @ Y$ I2 W+ v7 ?$ K
把下面的代码复制进去。
$ w' Z. Z( C. ]' _6 I' @4 j保存成 baccarat_sim.py (注意后缀是 .py)。
1 m- [2 J2 Z9 G0 c. j
- H- w/ u+ i* x" W5 Pimport random
7 G5 L+ X- ]4 k Timport argparse
) M# o4 q- V0 r/ u0 D9 ^
. l2 K& e& D& t/ F% U2 x( l3 p w# 初始化鞋子. f' U7 H$ Z6 L
def init_shoe(decks=8):$ g& A. f+ g( |, Y. O( m: h
# 每副牌52张,8副共416张; W; ?0 X- m! T5 B/ q7 v. K
shoe = []. F5 i. H/ M: D, D0 s
for _ in range(decks):% W% f- h% M, Y6 ]
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4. I! @* X& v* S; b9 ]. O% r
random.shuffle(shoe)
- x( [# G7 F+ m/ |( ?9 \ return shoe: N% J f: Z' A: \1 z1 b6 D) Z' X1 E
& s, Y( z) o' E- F; F# 发一手
2 A" B/ r- a& F" Z+ s% i# Jdef deal_hand(shoe):8 [& s3 E, c" C, E2 X; A
if len(shoe) < 6:
/ G# D4 l4 B! p% F' \9 _$ c shoe[:] = init_shoe()
+ f, m1 ~& a" v5 d) {$ }. n; Y$ t return shoe.pop()4 x3 h- H# c) O; T4 N7 R4 L& Y0 ]6 I
# n( \, e" S# g6 H2 Y# 模拟下注法 A
; ]8 H$ Q) u" L4 E, X8 a5 Y7 ]4 ldef simulate_strategy_A(num_shoes=1000, commission_on=True):' `% R' V8 K. [+ n
profit = 0' L4 w0 v! U* l1 X+ h7 S
commission_paid = 0
0 r7 M4 ?, k8 w% h: G shoe = init_shoe()
1 q" e @& ^$ l$ h/ V/ S* s U0 c( e! f: q3 l
# 策略参数, |1 O( b+ @- f1 N$ l) m
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级" Z* h& N5 b7 y9 [
stage = 0' t6 i' m2 k; a# b, A
target_side = "B" # 起手投注庄
( |6 y, D, t7 b. h' x, Q5 b6 Y3 E O: r
while num_shoes > 0:, }7 n L; A! i) w8 F) U
result = deal_hand(shoe)
+ L* O, V. R6 M2 j% T1 d. T
7 \1 {, G' _! ^( L: ^ if result == 'T': 2 V* E" W' H# k# h
# 遇到和,不输不赢,重投3 X) e" U A1 Z
continue, B) _7 @) [, q! b2 `
6 k! H/ l' ?) B
bet = sequence[stage]! v+ ]4 g; q& }' l7 N. g
! U1 l5 h! r1 k7 i
if result == target_side:! @( L- u; S- Q9 j, D' c
# 赢4 Q5 i A- H1 F- u6 R+ p$ h
win_amount = bet
- t3 k- c' F M. W( P3 ~7 n2 Q if target_side == "B" and commission_on:' q) k0 z$ Y' P9 g! u8 O+ m
win_amount *= 0.95 # 庄赢扣5%抽水
3 R" J' _3 {8 p. L0 B+ Q: c commission_paid += bet * 0.05& h/ Q2 P8 c; ^' f" a
profit += win_amount7 `. p5 M/ @/ Q0 [% w6 \
stage = 0 # reset; Z7 u1 |: s0 J+ @3 A
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)8 G2 v0 k1 o" Z1 n9 P' \# @" n
else:
/ Q" @& C, x. ^& F4 `$ t. S # 输. x; E0 L- S: q6 c7 F; ^
profit -= bet& F' w+ @, s) b5 n
stage += 1+ }( o- e( X7 ^% x8 f7 E
if stage >= len(sequence):
9 _+ w. h: d% |- P7 z! b& _: Z& C9 d stage = 0 # 断缆reset
" U# N' b/ ^' Q num_shoes -= 14 V$ f+ D4 @3 ?5 l$ \' }5 O
7 p: }. C Y, D4 K& c return profit, commission_paid
# O U% N3 |2 X; G$ n+ J2 B2 U* B9 L3 ?# `& \
# 设置命令行解析
; N% a0 ]. o$ E/ G2 O( S" Jdef main():6 ]1 x" ?' f8 M, o3 b! [! u
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
$ g6 E' r' \( d& h: z" p( S' F parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")7 i( \& p2 l5 K. J' }" E0 j
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
+ H2 N5 Q0 Q( t" f # g' |' {' A8 K
args = parser.parse_args()7 `2 Q; }4 p8 W- B% \9 R) a
0 T! l1 I% f5 F5 G7 M8 C' Z$ \, j # 抽水开关:开启或关闭
- [& b( i& |% z" `. U1 O2 t( |4 K commission_on = args.commission == 'on'/ w" x/ L( J/ ^6 j
/ y: }! v3 i# v- s3 x7 j result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)/ l% e9 _+ }& `7 u9 a) ]" e: y# {
print(f"最终盈利: {result:.2f}")
5 o! d0 P* `* c print(f"累计抽水: {commission:.2f}")- Q- U2 K3 E7 I9 B) w
4 E% l i; S2 e- a2 q1 `' Lif __name__ == "__main__":" o* G7 ]9 H! C# \
main()* @* O4 p) g# ?. a8 M1 k6 r9 ]; o
8 ^8 C% U- @+ e& }
0 g G+ X! ]9 i步骤 2. 运行/ z |. J; k, V! A
( `) r: B T* l4 c
在命令行里进入文件所在的文件夹,例如:% h* d8 z+ i4 ~* k5 N
cd C:\Users\你的名字\Desktop" P; }% V4 e3 V
python baccarat_sim.py; _6 z' d& Y1 X$ |' _$ j
8 f- P/ D! F Z: ?输出会显示:) B; @# [7 N7 h1 w
* a( A0 \' L7 J+ {& M累计盈亏: xxx
4 b F- I( b% T4 u累计抽水: yyy
3 s4 W U) @2 P4 L-------------------------------------
; E4 a8 v' [7 C$ T* R% z" F实例:试跑3次, 0 x9 z: q l5 L7 K# e9 Y
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py / ^ C0 Z' o% `$ p7 Z: T" F) O" u
最终盈利: -5360.35 , G2 w( {- D+ p ]. P9 t
累计抽水: 5176.35 1 X1 K: J* O* L+ y9 H7 U
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 4 G2 {/ E/ b* i \9 n7 N
最终盈利: -5661.65
9 _' D2 s( L% f% C累计抽水: 5174.65 7 h4 J n" \5 l
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
# H: f; @' n. Z最终盈利: -4244.50
S3 [- ?+ l1 |0 O2 h* X: x4 t- X. s累计抽水: 5176.50
' n3 Y+ |6 E& L! k/ Y7 B- j5 T7 m
# K f/ R: o2 E, w6 b9 ^说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
5 F" \# J5 |1 A
2 z1 x7 c0 c$ e4 q9 N累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
6 ^# H8 C( U0 L% ?9 P7 ?7 c3 E
+ s7 `$ p# z: a# q最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
9 T! f- H- v( `9 t* j( K这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。& w( O% ~7 V% g: g
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。5 Z, s$ K* c. O# ]+ h
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。8 w% l3 ^0 Z( F: f% G& S1 Y
1 e) N* c, Z; K5 R启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|