|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
# y1 M- u8 X2 ?1 D2 @4 J% D0 M( |8 Z; ^, S) R' p3 m# I+ ^
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
9 C" d5 I7 t" E2 |$ C# MExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
: E. u3 { J% ~0 x' Z4 d5 |7 N- q+ N1 `0 @
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)# F; o3 O6 j) l+ ^) K
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。, R* Q7 [* N+ i0 F- R% Z( ~
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
# Z o' x8 j+ @6 V" A
( A. [6 j2 K0 ], t# o- S步骤 1. 新建一个 Python 文件
* T: L) u. k+ y4 @) u打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
! o7 Y- ^! w2 w' w2 D- `把下面的代码复制进去。
' b# `/ L/ ^/ ~保存成 baccarat_sim.py (注意后缀是 .py)。
/ F" z/ I, Q' \/ `8 l
" Q1 }) d* T: s. {% Q* himport random/ K D6 d" d, g4 l6 u
import argparse
# \# e. E7 I1 v$ i5 b4 I
9 A- I3 `4 ]* _; [# 初始化鞋子! H: W0 _5 W$ i( m2 f! |
def init_shoe(decks=8):# w) N9 f; L" `( U5 S
# 每副牌52张,8副共416张
$ ^' p7 M. N7 Q3 @2 v7 F4 w4 e: W shoe = []
, `* [# g' A( W4 ?7 d4 U0 y for _ in range(decks):7 s- {2 N: M$ Y+ O) U
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
6 X' p+ ?9 k2 a1 D random.shuffle(shoe) J, L/ p' r4 l2 M: s
return shoe
6 a; s) I2 X& u" L# ?7 S3 E. o+ V* Z5 ^# n% Q& g4 B! q7 [* n
# 发一手* f1 p) Q6 }7 k# h8 y9 A5 f
def deal_hand(shoe):. S1 C/ w! M3 U7 L9 N, F1 M8 z- g
if len(shoe) < 6:
2 [6 z6 U9 u& i, s shoe[:] = init_shoe()
* {6 ]* N1 q2 c return shoe.pop()+ G" w; E# Z# `
5 H! H9 F3 {$ V- u% E0 k, |0 e
# 模拟下注法 A. b* K y6 M5 M) f/ I! a; y
def simulate_strategy_A(num_shoes=1000, commission_on=True):
1 {# x/ S# H; @6 X/ U profit = 0
, D/ j0 d+ j6 I9 o2 ~4 E4 V commission_paid = 0
1 u u8 |2 m! l$ T6 H/ \ shoe = init_shoe()7 F2 p# S. t7 R% K" c( C! d: y& k
6 [+ t+ V& d2 V% {& N
# 策略参数8 \- f' u6 C$ p. @1 F& _3 j/ k
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
. y0 `% ^: k7 G3 W8 T4 r stage = 0# Z, ^$ s5 t! z z
target_side = "B" # 起手投注庄 K. y$ c* G: u7 |2 b( c
6 K! j$ n! U0 T* }% }2 Z P' g$ E% o while num_shoes > 0:0 x6 H) e7 S D1 ]' m+ v
result = deal_hand(shoe)% x) H+ _' j) t
8 @6 P% n; v$ G
if result == 'T': $ x- w( d |$ A
# 遇到和,不输不赢,重投
$ E" i, v& P, T! i. M2 W continue
% M+ B- r& [, z7 z, f: i: h V8 ?6 q# e6 |5 W6 a" G# m+ X/ x
bet = sequence[stage]
" ^1 Y1 V( D6 S0 T- Y' n2 o, i$ U
7 Y5 a0 ~4 u: `8 m3 Y if result == target_side:- n" f4 T( p* p5 j* N
# 赢5 _) m! d q P: ]( B" y1 S' u. s" z
win_amount = bet
5 r; o% a1 {4 H$ t if target_side == "B" and commission_on:
! O" C3 z/ @8 I M win_amount *= 0.95 # 庄赢扣5%抽水
& G2 H3 f1 N2 ~ commission_paid += bet * 0.054 |6 ]1 m4 W; I) i, B! Q& s
profit += win_amount% e3 B) K/ \ p D" @
stage = 0 # reset
! J% l: H: n7 G* G& G: w7 L+ k9 O target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)* {' w8 X, s0 i& a
else:
4 a) D9 v, V5 G # 输
# Z1 a7 F- L- ~ profit -= bet; K, s2 p0 h. o g
stage += 1
7 J& \' {' v% q2 u if stage >= len(sequence):
: S ]. W( ^7 S z5 L# z0 z: z stage = 0 # 断缆reset# o2 Y. T" S! V
num_shoes -= 12 v# A2 Y! Z# n: F p i: i+ r
" y& X" k5 ]( |/ T ~4 W0 a return profit, commission_paid
# J/ I1 C6 ?4 v `, ]( [/ H* g9 D* `; i8 M' C& H
# 设置命令行解析! n, T; x0 R! p2 n7 b
def main():
7 q/ ]4 Q, J- d- A parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")2 ~' E8 \: r9 p+ ]' s( R o) i
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
9 N$ j6 |. R8 V, O parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")6 F% B: Q! Z; k2 e4 ?
1 m+ T4 \* Q' Q0 v0 R4 t4 d
args = parser.parse_args()
" x& R1 b. b) W `! J# ]
* \4 {; t* T3 W# M0 m: t1 V # 抽水开关:开启或关闭5 U- A- Q6 `( G1 J9 W7 U/ _6 ]( l
commission_on = args.commission == 'on'
9 S8 s! i N5 d 0 R& e: p0 l* h# i: v
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)) f2 w8 u5 y! ^5 a
print(f"最终盈利: {result:.2f}")
) E' g4 N- Z3 L2 y; S) z( A print(f"累计抽水: {commission:.2f}")
& T0 z+ @; k, O4 k( W O4 i% h% `) ~$ R4 @. u/ F! r/ _8 G
if __name__ == "__main__": B e/ h T1 a6 @7 {, x
main()
7 Z6 A% V j- m5 j. C) W
# _2 h0 q5 e9 `2 ^7 n4 ~9 d+ R2 r0 N+ c
步骤 2. 运行; C6 t+ X8 \& g1 z
/ G& L+ l3 X6 s0 p v2 a
在命令行里进入文件所在的文件夹,例如:, D3 k- J2 u' l1 l& ~5 t. N& V
cd C:\Users\你的名字\Desktop: H. a) @1 V4 w* n5 z9 `
python baccarat_sim.py
6 h# u$ k. {. K) i# K: f- a0 v5 y, w' y' H4 O
输出会显示:
$ Y' S: c9 w) r* D8 m5 X# g
6 G/ ~% O: H1 b _累计盈亏: xxx
$ E5 v' k9 k$ ^累计抽水: yyy
( c5 G* j7 g' v- E Z1 l$ F-------------------------------------9 r& S- \0 d) C. G4 e0 C
实例:试跑3次, / |8 \7 ]4 X' j2 i9 r1 a) c
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 7 e# _7 S8 @$ h( Z
最终盈利: -5360.35
6 r( z. M/ _2 B* u+ l0 E% s累计抽水: 5176.35
1 V3 V5 W9 y; G# _& D# Y2 _C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
0 v$ r9 v4 M7 h7 a+ ?最终盈利: -5661.65
' N/ e7 T+ n% U/ f, P累计抽水: 5174.65
" s5 u c. O. t2 H; OC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
7 g# C9 _9 w6 o1 z1 A8 ]最终盈利: -4244.50 2 z' i! C2 L' z5 d! }1 Q9 k
累计抽水: 5176.502 k7 x8 O" C c, ^# I3 s
Q1 G* } }! X5 E$ _+ m" `2 q' m
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
5 v/ d+ m+ t: t6 I) o" ?$ F
8 d' |5 W% c3 ~4 I累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。" I* V2 a! l* d% u5 @4 I: k2 l$ X' L
' |, _% a. ]" }( v) F4 S
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
7 `1 m# g" d7 |! {( e- _这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。0 d. z) Q5 u. n. Z& [4 A2 {
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。- {: M! E9 ]* o& i5 K
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。" Q, F y2 P6 S- T0 B
% D# y, ^$ G7 ?: X
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|