|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 , b: f" Z) _+ q7 ^6 O$ |
+ ]/ ^ Q& Q$ O可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
2 L5 e# n4 Y1 A. s! D- gExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。, L5 E# _) o& o
5 I# E, j7 p3 o在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装); y* r1 @ } o* T1 C5 P
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
0 b9 ?5 N8 A o/ B先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。; @4 ], v6 y5 T
& k6 R" \$ y& V+ d步骤 1. 新建一个 Python 文件
# p# L" I. B+ I7 K# D9 a打开记事本(或 VSCode、Notepad++ 都行,我用记事本)1 D: f ]+ o/ T3 X! t* j
把下面的代码复制进去。
6 b2 |; ~/ e, _+ {" k7 h保存成 baccarat_sim.py (注意后缀是 .py)。
8 F5 Z. r& }- Z/ H% B5 l/ U
$ W9 D# o9 ]- s* uimport random( [( z4 y' z( e$ E
import argparse4 o8 ]4 A( A+ ~5 T R
; U% j+ W; Z3 X; W# 初始化鞋子
4 q! }7 d7 V) |8 [% D( q; xdef init_shoe(decks=8):
3 ]2 T8 H1 y* z3 [ # 每副牌52张,8副共416张
( E! d9 Y$ {) @4 Q. Z& X shoe = []2 {+ \4 w5 Z. I
for _ in range(decks):
$ w0 Y* A. s2 R( T Z, p6 w; X shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4( A1 ]3 D) s8 c& O- j7 U. V( @
random.shuffle(shoe)
, j# ?( I) V7 N- ^. \ return shoe
: }, j7 Z9 J+ \3 B9 [7 \: B
& {4 ]5 {! P2 X% a( ^# 发一手
+ L3 h- |" A. ^def deal_hand(shoe):$ W& Q3 k* r( _2 H: c% l5 [1 L
if len(shoe) < 6:
9 O5 `: C# y: \6 i! A; v: [5 u shoe[:] = init_shoe()1 C: q- E, A6 r6 [ B# u) I8 a$ h* z% r
return shoe.pop(). Q6 e, `3 Q5 [- L7 X2 |
& N5 F2 m9 k) z b( i. u
# 模拟下注法 A0 ]& ?( V+ s. s' T
def simulate_strategy_A(num_shoes=1000, commission_on=True):
6 v8 h/ M8 B7 J! s( k6 c1 B profit = 08 m) R* U0 y# z; a$ t$ |
commission_paid = 0+ T. L7 H, V" i, j
shoe = init_shoe()% f+ ~/ E% Q, m
9 m! |1 P% m9 ~) T: K6 T2 Q5 v
# 策略参数: K3 j; a( s# w( T3 Z# y
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
( B& @# h+ w% U: t: { m stage = 0" u6 ]! ^7 ]5 h4 F* F$ o, ]
target_side = "B" # 起手投注庄
. f5 ]$ R$ l( H2 e$ F S( E; i- L1 E
while num_shoes > 0:
( n8 T7 [. m+ j9 |; k$ U result = deal_hand(shoe)( I' U+ C3 K3 J- M
i D; f n9 p9 m" o( j$ t" a7 H! l if result == 'T': 7 }9 w& {' S8 s1 g
# 遇到和,不输不赢,重投
0 q) u# D1 S8 ~% D continue
A2 T; s8 {/ M9 X5 q, k+ q4 x4 W; t
bet = sequence[stage]
( s: X' ]4 f$ P' z, g0 b ! W. P! F9 k7 a6 P# G7 ~
if result == target_side:
* f. w- g" F$ @( w # 赢
U8 s! J# p( c4 u3 r win_amount = bet' k4 _- r9 Y* P. e2 c5 l+ T6 G
if target_side == "B" and commission_on:
# L* \* f& I* E- I5 N: B! r win_amount *= 0.95 # 庄赢扣5%抽水5 m6 b+ r; h8 S2 r0 x! e- C
commission_paid += bet * 0.05
1 b; F6 Z7 a; H, q profit += win_amount' L& Y/ R/ m* Y" H
stage = 0 # reset
9 G8 [, d3 U/ ^6 u( U4 Q target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定) B7 Y' i% `, A
else:
( E& `$ ~( R$ L8 q7 Y/ u- t! P # 输
2 H! s/ ]6 G: x0 O j5 D% O& z profit -= bet+ D j* t; s7 g( U
stage += 1
/ ^. O2 a9 n' h# n j C% Y if stage >= len(sequence):: d/ s6 B" q6 m/ }" }5 ~/ a
stage = 0 # 断缆reset
9 y, V2 K3 x; [5 P6 w num_shoes -= 1+ E4 P( x( p, V
: ^/ d( r& z7 E return profit, commission_paid$ L! u+ X6 U1 k W$ X, h
9 \- X1 ^$ g0 ^- q' k# D
# 设置命令行解析
* l3 V* a5 Q" l9 e! O& Qdef main():
4 I7 i2 Q" o- h! e) ~8 w, o parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
1 P- v1 \4 f1 H# r* I1 e) v parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
+ h+ J" W. j4 Y' Q* O- i4 U- ]* X parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
8 R& i9 B; a/ Y, J5 h% e, S 1 y6 \, g c+ [4 C
args = parser.parse_args()
. u/ b9 G. ^+ B8 Q- H : ~! v' N3 ^+ _* t q' s9 h {$ h" |( _5 z
# 抽水开关:开启或关闭
! T' ]" A5 b& k4 U* a5 X commission_on = args.commission == 'on'. L* p3 R, X% o) B' I
w+ ?& y) o: t+ i* [ S2 [9 ?
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
% e G+ {3 a' Y* E2 S print(f"最终盈利: {result:.2f}")" d# r, Q0 H# r+ D% m
print(f"累计抽水: {commission:.2f}")
x; y8 s" ?( P" S( {+ f- y8 n& G: o- }: c- @
if __name__ == "__main__":, H# R, g; V- j3 c0 q+ T5 Z) J0 n6 m
main()) @3 W# V: X" j: t/ h
" z$ g }+ v: a6 \% u$ ~6 C6 W$ _
- \" C _! G2 _步骤 2. 运行
E9 R+ g9 X ]4 J: g, s
* p* F) \2 s- S9 v在命令行里进入文件所在的文件夹,例如:* }& c* v3 _ g3 J( {6 k
cd C:\Users\你的名字\Desktop
$ G# G7 Y, S8 \2 Dpython baccarat_sim.py6 d2 E( F9 o% h) y M0 Q2 W
S. {7 m" W. U5 `( c输出会显示:
/ n7 }* @8 { i( n* Y) H0 `5 ]( b7 {; x- z) _: S! e. q2 S
累计盈亏: xxx
: P- P2 v: A0 R) W( ]: J累计抽水: yyy
# l4 Y2 P( A- u' B. E-------------------------------------0 M- p6 |8 [2 T2 \5 Y6 X
实例:试跑3次,
8 a4 j. @& y2 k( V( z5 M& u2 {/ tC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
6 i: J. r) ^+ S最终盈利: -5360.35 3 |5 T- r& C5 P3 Z
累计抽水: 5176.35 k! C! W/ _" `8 D* f$ b
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py * C. ?) I: Y7 k! b" ~4 F
最终盈利: -5661.65 9 V2 [6 A% E Q
累计抽水: 5174.65
5 o5 D" R6 h; B$ h& g& nC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py " e0 _, O. i! T" V) y* {# P
最终盈利: -4244.50 0 q7 n' n' M7 t- j
累计抽水: 5176.50
% x9 K t+ X8 h a( `+ C( [! S* y' I9 s; @; [1 I
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
b2 Q& j: I6 h6 O+ w: T0 V& \: o3 X3 Q! F
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
! f0 C! ]" j2 U/ Q9 }: \, h6 C0 b) r6 v9 ~! ~
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
( F! G- B4 S- j/ a这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。3 R7 D) D9 g- I$ @/ y
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
7 N# ^& W% X3 ]% v- v; [9 L但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
: t- w& `3 |) B: m4 ]- F: S$ U* J( r3 \7 `' R5 _6 p% X: G
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|