|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
* ?: x% s: ~1 {* n
$ n" S7 R4 z# |0 j* P6 x可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
, [* G) x( U1 ]( X' q1 W9 \ O0 SExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。: }. M7 D1 [) k8 J3 ]3 K
6 n; O5 f7 j' ?! f* x; C在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)5 t s! G4 r2 @1 k; q
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
6 k5 ~4 U+ L# H5 _+ |先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。$ {7 ^( E4 @8 C4 b
2 r9 H0 E3 d, K步骤 1. 新建一个 Python 文件9 b1 s( n d' ]$ ?5 y0 s
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)+ |9 ?8 w4 }2 |
把下面的代码复制进去。# Q1 r: Q% H, x# c( \/ b
保存成 baccarat_sim.py (注意后缀是 .py)。" V: \" H1 `, `
# T0 C$ s' a T" Y }4 [import random
& b4 q& q& ]( ~8 R) t* ~; t: P* Ximport argparse
1 D$ q: |/ v! t4 M/ @$ a1 e! S3 h
3 l$ E* {/ V4 m# 初始化鞋子
7 B! _2 L* Y5 Q* J; p0 adef init_shoe(decks=8):' o6 E5 J# l9 z" Z" U: L5 s
# 每副牌52张,8副共416张
* i- J$ C; s' i6 p5 s1 ~; h shoe = [] A k2 I( W* g9 S( I6 Q
for _ in range(decks):+ H5 n" g0 P! Y: t* F. G
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
- U5 w4 _! @- g* k. R0 V' Y; G5 Z9 U1 ` random.shuffle(shoe)& J( S7 K" Y# G' e9 v; _3 l4 G7 a! k
return shoe
9 U+ O7 j! n( j* F) x7 X8 w# f( S: {" y' h
# 发一手
, p f+ z- @+ X2 [' Gdef deal_hand(shoe):
* t: ?3 h! W2 l L if len(shoe) < 6:9 |% S2 z" p" t) z7 \2 w$ ?1 _9 e
shoe[:] = init_shoe()
5 m6 {" o/ P) j; Z0 Q return shoe.pop()6 P0 N; V4 b& Y
- t0 f) h/ `* `9 y3 k6 v3 ~ S# 模拟下注法 A# D# O7 q3 h" H$ p$ J3 n; y! ?+ S
def simulate_strategy_A(num_shoes=1000, commission_on=True):; v/ u* e3 V4 g5 @
profit = 0
8 K7 p1 I% L5 E; j8 |9 P- M commission_paid = 0
3 Q9 r! V4 w7 K, V7 ]6 C shoe = init_shoe()
! V3 r+ [+ l0 i1 y; ?! e M0 A) U8 {& [& D! k+ l/ ^
# 策略参数, M9 I! d( ~& a* l
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
' B/ c! [" R5 [6 W! M stage = 0
6 R: l- Q0 y" C" d( {7 j+ c target_side = "B" # 起手投注庄
q8 k' B F$ u) c3 U
$ S. j2 m; {7 `# L. `" I while num_shoes > 0: z" P" f1 ~5 L; I! _: s& o
result = deal_hand(shoe)
( H" m4 y5 t) _7 a) x# _
. t% _8 \6 g1 N3 m$ U/ T if result == 'T':
! P" O. O/ c# R; E: D) h # 遇到和,不输不赢,重投 s" N# X2 Z) b% y& C3 s; m+ v0 c6 h
continue
* b) b: w# [# t" U
, F# |: N; |" a1 C- U( x0 Y; O! [: O bet = sequence[stage]% `* {6 n5 a+ s. ]# w. h: T+ t; g' h
1 }5 R* B2 t2 V! f if result == target_side:
3 r% X0 z& y6 g( X7 F # 赢. M. R) {2 K6 \6 `" b8 }: V
win_amount = bet' e2 r* N& C4 S
if target_side == "B" and commission_on:# P6 r% G* f4 K" L
win_amount *= 0.95 # 庄赢扣5%抽水
# g* @5 V# E8 e" U, o0 x( _" H commission_paid += bet * 0.05
' R1 a4 [' x) B$ |1 { W profit += win_amount
' f5 _( P( _5 @ stage = 0 # reset' A9 l- @. S7 L1 p3 y
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
b% R: r' C0 M7 _) ^# D4 Y9 U& N else:3 Q4 p# F/ u; a$ ^% M1 U2 ~7 s
# 输
" C! X+ M2 a* h# P# ~ profit -= bet6 c% R, V. x% b8 [$ U! M; j* }
stage += 12 O6 _& |' b* a$ x
if stage >= len(sequence):
) i! X3 e. i/ f1 x. X stage = 0 # 断缆reset3 |+ D& w5 P& d' k) t5 h
num_shoes -= 1
: b/ N: O$ j" N2 v# X! V" }+ {- u
2 U3 r( s' R" u- k, f' O" @ return profit, commission_paid; B# m4 A; W8 h5 L( o
7 E; s! x+ K* Q# 设置命令行解析2 x$ C) X; I7 o% H# `
def main():, i% _2 R% Z; b, r
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.") w/ ]$ f9 e1 T- r: @" c
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")# i1 x- N; e2 r
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")- V$ f% v/ U2 u9 `; h
1 x) W( t2 X& o+ p5 Z
args = parser.parse_args()
7 n% n3 r+ X& T) h
# D0 U3 i0 ^, G6 q4 O; E; S( R # 抽水开关:开启或关闭
7 Q( m, X7 x, e/ u commission_on = args.commission == 'on': p$ O# j3 r: h5 F
2 j$ S) i# o1 ~8 R+ f result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
. P7 f; n6 d7 `2 ? print(f"最终盈利: {result:.2f}")4 Q2 [7 X( `9 N; i* {6 c
print(f"累计抽水: {commission:.2f}")
# N4 G4 b4 W! R* A4 t+ c& p0 C- w( [+ |$ ~- w
if __name__ == "__main__":
% O, [0 F0 u6 D! L main()$ V8 e- F* j% ]5 I, y: D
% G4 Q3 H; r8 D3 P& E- g0 I" c* U" T" j; ?* N4 ]) s5 U* |
步骤 2. 运行
+ i6 i4 k- ]1 r: l) W) N/ M
& u* o8 y9 j- g) h& e) B在命令行里进入文件所在的文件夹,例如:
: v( q" A+ |, |! O: f& _cd C:\Users\你的名字\Desktop
: O7 ?0 ^' O. _% y: j1 K2 V o0 tpython baccarat_sim.py `: ~1 b- L' H- M4 J1 y7 `; V
- F8 o$ z, ~" J. K2 R: E( r# w$ m. S
输出会显示:
* Z, ~& U+ m1 a) G; D- \: i8 n0 @, T& f; E
累计盈亏: xxx$ f+ B+ e! F% M' N1 _
累计抽水: yyy( C+ T; y- l0 H5 n
-------------------------------------3 ^+ a$ }9 B A2 z
实例:试跑3次,
3 W1 _( Z# Z! @4 z" X9 G7 UC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 3 X1 G! V$ i, O# ^( t
最终盈利: -5360.35
$ ?3 U6 A9 e6 Q$ u* Y累计抽水: 5176.35 0 P9 d5 Z. z! i/ r1 R! `6 A' E8 `
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
' Z# a; J! \: Q4 B最终盈利: -5661.65 1 Q- y* r$ E" Y5 D+ z9 {. u2 [
累计抽水: 5174.65
3 d. _* P3 N `! A3 f+ ZC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
& ?! k' j9 o6 l8 N l9 V最终盈利: -4244.50 0 ~9 Z' W! B5 l
累计抽水: 5176.50- A2 r6 O p# v9 E
* t F8 }7 f, ~9 W
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
5 Z2 Y0 W: H; c! H1 S3 ?5 D0 `! r$ y _' I
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
f5 D% ]! Q, _' F: y8 a) w1 K4 v! l0 I! v# y; I8 J: y$ S
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
# v$ s( o5 ]' F. l* _' D" w这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
/ s! y3 I1 V* D. m9 Z) k3 c人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。5 a" _6 a7 m* u
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。) k- b! F1 M- x/ {2 P9 p
+ s! \) a2 A+ F& O" D启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|