|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
e2 ~ \; h% a6 p/ j8 O1 Z9 |
- v' V2 O: C; ^" U9 o0 B可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
4 T& w% h. Y# u! b% E* d" N6 lExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。, n) v6 M9 {& c! t# i$ |
0 m, e N* g* I" {: A9 ~/ A, G在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)' A* m% |0 f( Z( A8 }' D
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
8 s6 @1 J7 H. w0 E" T先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。/ Q" ^4 h) h: z2 M0 W s8 l
8 P |- Y2 x$ L: ~ q
步骤 1. 新建一个 Python 文件
! F: q! j- c7 Z打开记事本(或 VSCode、Notepad++ 都行,我用记事本)% g$ W! c V9 ?% t3 _
把下面的代码复制进去。: {! l+ J7 j& d! k$ S! }
保存成 baccarat_sim.py (注意后缀是 .py)。! u2 n) _4 e, c7 ~% v: q
, Z6 Y" o1 p t, C' O9 W G" pimport random( y" S% I- c K& Z2 |1 |
import argparse
3 T/ e/ @6 N& z- c9 }
7 U6 E4 j- |: Q; i4 ?# 初始化鞋子
0 F/ W9 K; F Z5 ], f0 O$ bdef init_shoe(decks=8):5 b3 o; |0 L. Q. w2 r* H) K
# 每副牌52张,8副共416张
7 n1 d0 Y7 ?( M1 }/ \9 h/ J shoe = []
0 [- f- J3 T+ M/ h3 f for _ in range(decks):
, C' e/ U/ ~$ u' U3 f& M1 P shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4# V. `5 E9 @% ?$ P2 B
random.shuffle(shoe)7 _2 T; R4 @% j7 e2 Z. N8 s
return shoe
$ g1 {8 s9 {/ f% R1 R
3 q8 K" P4 q3 x! b# 发一手& T- e: e$ _6 l
def deal_hand(shoe):
9 R& H8 H" [1 B5 y. r2 n7 R: { if len(shoe) < 6:# U3 _. D2 T7 q5 M% Y) E
shoe[:] = init_shoe() @8 |" v9 d' n; i
return shoe.pop()- |* n$ [% v& a! ]0 J) `
' c, \, B1 d1 O( v1 k6 M
# 模拟下注法 A
% o% |; D% F7 i# `+ k1 ~def simulate_strategy_A(num_shoes=1000, commission_on=True):
1 k! u2 Z$ S2 E' L& B profit = 0* d! O8 V2 K$ H$ y3 k0 e1 }
commission_paid = 0$ n+ L) G$ ^( C8 B; S
shoe = init_shoe()3 S Q; q5 g) P4 n' B& J' a: J/ x
v6 j2 e% L/ t" n+ ^: `
# 策略参数# j8 |8 i$ L. V( b% S0 P& J+ ` V
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级+ S* g& {: U. E" ~$ P( X
stage = 0
- q* G! e0 b6 `9 z) P7 x& e target_side = "B" # 起手投注庄7 ?/ z! Q A* f( `1 j
% W8 v; A3 h# q
while num_shoes > 0:
1 p) X1 k- _1 k/ Z: }# o result = deal_hand(shoe), d9 U$ D, _0 a2 T0 k
7 K- q' t* X+ t9 g3 o ~ if result == 'T': 4 D, [+ ~9 U: I2 }
# 遇到和,不输不赢,重投
0 d0 e9 C6 q" a. Z' V3 a" Q continue
# d+ [( [0 q1 N+ j$ c( D/ h5 s' t; f2 e( j: ]' W8 g! F; h
bet = sequence[stage]7 |) D5 V' Z6 [" u
* i; G' Q/ [0 D# g2 U
if result == target_side:
, ?' Q, n3 Q8 N# s* m' G5 x # 赢
* j7 G$ v6 ^$ Z' L( R( h win_amount = bet
$ p: p8 F' m5 w! _ if target_side == "B" and commission_on:: ^; q) T9 z+ ^1 Z# ], Y
win_amount *= 0.95 # 庄赢扣5%抽水7 y6 L! Z5 A2 g& ~/ r2 q
commission_paid += bet * 0.05
7 A+ b+ U( b1 ]! S* ^( ^ profit += win_amount& x2 q7 l' O/ t% K1 N2 x
stage = 0 # reset6 T8 m' z! C4 B. }6 c, D
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
, R$ y1 N- q' t" p else:
# C3 K+ `0 n' o( z/ Z2 ~ # 输$ q) K4 G t7 r: E& f- R
profit -= bet: j" z c- V( F; w
stage += 1
8 H4 f8 j; w" O( T if stage >= len(sequence):
! X0 }4 x+ `5 d; ?- { stage = 0 # 断缆reset$ d4 n5 m5 G% ]6 R! X, J) D
num_shoes -= 1& P0 N/ K% K# d% Q
( B0 O- E C* s- V3 A
return profit, commission_paid! B" O& y$ \: x5 k& m3 I8 R" x
% u: h9 f& B) v
# 设置命令行解析) J) Q& e, p/ Z
def main():1 A! E' P3 F0 R% d1 Q6 j8 a
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
# ^8 E$ g$ ?* a- L. @& ^ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")/ q% p1 D' e4 N8 N; g* g" G9 p
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")/ F- D/ v- m, M. b* }6 E5 i
2 v4 o$ E, p9 `! V/ k3 ^ args = parser.parse_args()
4 q3 z; i% R2 m8 ]# b F) |7 e
* e+ g' A: Y7 k( E$ |9 G+ V # 抽水开关:开启或关闭- n- X& l9 I: p8 P- B
commission_on = args.commission == 'on'
/ D3 I7 F" w: \5 Y4 V$ [ `; k7 A" D- M. e8 H
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)4 }6 s7 b: S7 f x2 K9 A6 ]
print(f"最终盈利: {result:.2f}")$ U1 \) @/ S3 R$ p
print(f"累计抽水: {commission:.2f}")
/ E/ R9 ^; X3 Z* E( i1 }7 e: Z) z7 M x, `$ h8 y0 X6 H* P
if __name__ == "__main__":
) L& f( [5 k+ a% {7 z- H0 Y main()7 L: h# ]8 _! s# g
* v) o* k% q: q+ R& ~1 w4 b' ?/ u Y4 m1 T1 ^5 p
步骤 2. 运行
2 B- o8 T8 y1 y' @( u; ^" W" _* D: W F$ R" Y
在命令行里进入文件所在的文件夹,例如:
/ f/ C( G% l) |) s% Z. t+ Zcd C:\Users\你的名字\Desktop0 L$ Y+ H4 C+ e2 m2 C) P9 w
python baccarat_sim.py
, M o+ X1 U0 _1 c8 s
. p {9 e% ~5 }0 A3 c1 z输出会显示:
, i* v) \. k; E
( ~5 R6 \1 z' i1 g累计盈亏: xxx
/ ]" R4 |; e, N' [) U6 N) e累计抽水: yyy* S( j* [( T, e7 N% v* M
-------------------------------------# e# h" y' r" j: }/ S7 G+ J/ z) u
实例:试跑3次,
& F0 ^/ @: U7 H$ qC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 W4 c# q" E! G" j最终盈利: -5360.35
* z3 f" q6 s5 `9 y累计抽水: 5176.35
; c% V- R$ Q8 f! |' T1 wC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
8 \& J5 Q y: `/ C* C* v" T7 N最终盈利: -5661.65 $ z9 k5 f" j/ v2 `/ D8 h' |1 t a3 T
累计抽水: 5174.65 & e w" @( ^% s) c! h2 s g+ @( E
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 }$ o1 {$ Y, B/ V x" n: ?' t5 ^最终盈利: -4244.50
. L a" A+ N8 A# `: s8 _) |累计抽水: 5176.50/ f0 X, a5 A) [) a
& h- j" p6 P& f9 J/ `! R说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
+ c e3 _$ r: m/ t/ k: [5 K- d$ p
% { |2 A) V4 i& s; ~! d) r, I0 K累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。6 e8 E! U$ I% x: G+ i
$ S* y: G* m( Y0 H最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。, D& o, r G% m; r
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
\/ F% s4 O6 g5 `. L# o' }人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
3 R0 S( {- Q. L7 b8 k& I7 e& ? F" S% k但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
6 ]# q( {4 a8 G$ d Y
0 F% e- x- j+ `4 I: F启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|