|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 7 g+ v' T2 P9 S" S, l2 z$ @
8 c' a& c; h6 X可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
- ?4 |9 y- U! @! SExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
0 ]; A0 u; {0 b1 F
. S, f2 J; b5 j1 H+ I在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
& m3 l( M+ s, V3 p" j( W- d0 ]! D假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。: P! P1 C+ \- i. y y+ f" ~
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
% J, h" G- \& _$ o9 A' r
% o+ o6 o: ?8 }步骤 1. 新建一个 Python 文件
0 ] Z7 O5 K4 f0 x6 b/ j打开记事本(或 VSCode、Notepad++ 都行,我用记事本)9 S: Z: Y7 v0 q" P- N
把下面的代码复制进去。+ S. y- Z4 s j# z
保存成 baccarat_sim.py (注意后缀是 .py)。
, i% F& E: n' n5 O1 f0 N
7 u2 A! b' e* u3 T8 O- M0 E0 b( kimport random
7 h! D# i$ w. A) Limport argparse+ p' |; M) o3 d" f8 e* g
3 W4 t6 V" D; Y# 初始化鞋子4 p) t3 D h( Q1 Y0 S8 j) w
def init_shoe(decks=8):# S+ n0 b. W e6 z, K( ~' c
# 每副牌52张,8副共416张
) k/ R Q+ z, _7 R& l: W0 K0 g shoe = []
) _ D5 u, K @9 [, Z8 x for _ in range(decks):$ m# B9 ]: o0 S" b; G- @7 }4 N
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
* K* P4 q/ M' J( Q0 u2 E: Y* L) f' K random.shuffle(shoe)
& T1 I# k6 ~( z( d/ d# k) T return shoe
4 ?, t+ i+ v' D& a8 `
+ a) e* _' g2 H, o' \2 M( P# 发一手- ]/ w4 p4 x1 u0 Z) N. y9 @8 ]
def deal_hand(shoe):6 n, k+ w C Y/ a7 F
if len(shoe) < 6:$ ?! ]9 m3 m; {
shoe[:] = init_shoe()# D9 \3 e! [+ U: @+ B' h
return shoe.pop()
# t% m. S& }( S& R
( z9 ], S5 S3 r1 k# 模拟下注法 A5 \ x5 f% ^; S9 e, B. m/ ~
def simulate_strategy_A(num_shoes=1000, commission_on=True):
" U6 y! X/ s, x profit = 0
" L+ k( X1 z7 E( W2 ?: Y commission_paid = 00 D# G& [8 I6 T1 b- K9 a
shoe = init_shoe(); @7 f1 N# w: Z& y6 B, h
7 x$ |3 f9 [: r # 策略参数+ _5 Q3 \* p+ K8 i" H+ f4 c9 R
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
' T4 P7 X2 }/ `0 G+ Z% u: w; P stage = 0
/ b" E3 @0 c2 D" ^2 h1 g. k, c target_side = "B" # 起手投注庄
# M% ], y" n) _ t9 v! ]8 h5 l- H j
while num_shoes > 0:
, F- I( _2 @3 n+ v& O1 @# b result = deal_hand(shoe)
8 A" I3 Q$ _. o7 @# w2 I. F$ F3 [$ ?6 L. Z& `6 {1 x
if result == 'T': , |' l) e7 ?0 i$ t/ t' @$ B" C
# 遇到和,不输不赢,重投
' p, o5 N; ~: ` continue0 G. Q, M4 _2 V( R6 ]- ~) S
! L5 l2 b, q* q1 Y
bet = sequence[stage]3 g& M* d# r3 ?. y
2 R3 l5 W8 {+ k5 o7 g9 t
if result == target_side:
5 p Q6 g% e0 I # 赢! d3 ? R, S$ v5 G& P) y3 v
win_amount = bet
, \2 y" a3 U" K/ @% |1 f7 I% H if target_side == "B" and commission_on:; G& h0 ?! f" W1 F$ e2 k& a
win_amount *= 0.95 # 庄赢扣5%抽水. X- o# I! f5 ^9 O
commission_paid += bet * 0.05
6 G9 J) i: e6 A profit += win_amount# [( E" O2 R% I# q5 \( X
stage = 0 # reset
0 ~% L! i& C6 e1 i' a: F; P) d target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)% U0 h, O) W- j9 O7 p
else:
: i' _+ r( W' j5 v4 ` # 输' J$ \2 g! Y4 _9 V
profit -= bet
U4 ~0 K( Y( N7 D stage += 15 y7 G' c) R8 {. Q4 L9 A+ K
if stage >= len(sequence):
4 _( C4 ^/ C7 j6 c- f stage = 0 # 断缆reset) h$ _* G, }+ g, F# I5 Y0 X
num_shoes -= 1
4 {+ P4 b! d" n% _& t2 O& K$ F' c6 L d
return profit, commission_paid
1 [/ Y3 A/ j2 l: x$ D/ P) g' b. ^5 C& B- `6 E
# 设置命令行解析0 l+ a7 F, K: K- Y1 `) g; K
def main():! j# y1 L _# H8 q" p# T$ j
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
8 C& Y; c) V1 w9 ^ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
0 |; m+ V. L& L& q3 G7 Z' S& X parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
7 U8 X' F" q' Y( ^0 Z4 y- ~
2 Z$ N2 C4 c8 w# V# D( v0 k args = parser.parse_args()
- B7 F) U& \2 Z2 w; z# _ : `" C2 E' B, H! z
# 抽水开关:开启或关闭# Q1 \3 F2 H9 ~- f3 v
commission_on = args.commission == 'on'9 [" w$ @1 o, f- x; |
& P: I C- F: a Z1 n: v# W
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
6 g4 M ^$ o9 W/ [- k print(f"最终盈利: {result:.2f}")
# |/ x& f7 O7 I1 n print(f"累计抽水: {commission:.2f}")
: ]8 O y8 m0 D% h9 m
/ p4 P' v% M1 D5 N1 ?% z+ x# q9 pif __name__ == "__main__":
a- b4 H$ N8 `4 J/ ^. L% @ main(). m3 ~' }0 X& V! ?
8 s4 v" C f: h7 Y4 Q) H9 _
: p. M1 R: V; }
步骤 2. 运行
- t! Q% X6 T8 S( z. X5 Z0 v W7 V
}0 @7 ?. n7 u9 F在命令行里进入文件所在的文件夹,例如:
) \! O5 F/ v( h6 m. H0 tcd C:\Users\你的名字\Desktop# v; V/ Y8 E; @: k) Y
python baccarat_sim.py
9 `8 g, |3 W! c. J f' L+ G1 B2 j- T- y
输出会显示:' Z5 N* R9 J' v& J* ^
T# @; P l7 K. M, t3 h
累计盈亏: xxx
1 V& r6 r) L6 |7 ?6 x1 Y j- U累计抽水: yyy
+ p( G3 x1 R# d s( ^( n-------------------------------------
" f+ o. `$ I! n实例:试跑3次, ' P* G' N$ n+ s' ]
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py & v$ G! R7 o5 D4 }
最终盈利: -5360.35
8 p: y4 l+ m) U2 @4 b3 B- i累计抽水: 5176.35 # v( ?6 @, I& ~
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
$ k& B" p4 v5 |2 H( Z7 k最终盈利: -5661.65
' q8 ? O' O, L3 ]6 y2 r" C4 M累计抽水: 5174.65
% `) z" y8 S- i% X, t; JC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
7 @( c5 m2 J7 P0 E' D. O% D最终盈利: -4244.50
+ d& @" b1 c k- k# f% s& c# }累计抽水: 5176.50: E% D4 r$ s U# q
/ u: M7 C6 p8 Z5 q说明你的 Python 已经能正常跑模拟了。结果也很有参考性:8 A9 D$ q1 a; N
6 F; _: f, c2 A: I e
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
2 u: M, Z1 ~: |4 l0 i
( D& @ E1 V+ E+ Z1 q$ A最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
$ o; C0 K5 l. W" P) V1 a2 X这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
1 p( V8 u) P, ?9 @人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。) }; t7 u& o: }0 |/ P
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
& T Y; j1 s1 J1 |5 K7 W
% e8 d& k" I9 J, T4 d7 ]启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|