|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
c* F" x3 P. n" [# Q# L- _' ^# ?) ?3 N/ x, ?; J
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
6 m f. Y+ O( }3 u: s8 }0 hExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
$ D& j) t( J$ z4 a3 a
5 v4 N. d, f1 v/ W0 J0 T在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
: R2 a2 ^. e: E# f+ ]4 V假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。3 d$ ~2 o6 w4 m
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。/ D5 C( \9 M! J5 u8 G
1 _3 R, A& k. {/ Y' _+ X, M/ I
步骤 1. 新建一个 Python 文件
% `1 Q3 z7 Q9 ^% Q7 l6 s' j6 Q打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
, e4 M- @1 e" G2 S0 C把下面的代码复制进去。; E# k) j0 L# e# [2 E
保存成 baccarat_sim.py (注意后缀是 .py)。, g, L% M$ J4 n# f1 G" a
0 Z) U" a3 U0 k/ d# Q- ^
import random/ H& ~( \3 b+ A
import argparse
9 M6 ?0 k+ B! Z' W5 s
& [ Z! B: p. B# 初始化鞋子
6 M; G, [+ B/ `, A% _& S: O, ddef init_shoe(decks=8):
4 q {+ M: k- v3 [ # 每副牌52张,8副共416张( x. Q! A/ j) z3 M
shoe = []
+ |1 f' K3 t+ [! O+ F for _ in range(decks):
4 F" Q; w& g% ?6 K7 ? shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和43 }+ J* Y7 M; ?6 x/ X: K
random.shuffle(shoe)5 o ]- b W& m& V0 }% G, e/ {0 ], V
return shoe
+ y, ~' q, Q# M# c6 ^+ l
" u7 ` l( N& h( K# O7 X# 发一手2 g. ]- p- G8 X. d! I) A# g- y
def deal_hand(shoe):
/ {8 X/ ]4 b/ ]1 \, K% U' b/ m if len(shoe) < 6:
! J `2 p6 |8 d% K2 g1 o4 H, p shoe[:] = init_shoe()
4 ^$ s& c% u8 i4 q* x+ [ return shoe.pop() G; K) ?' A) C% I7 `2 K! c. ^
( B+ l$ P$ C" x& |* p/ `
# 模拟下注法 A% `4 R" u# }- D) |" k+ x
def simulate_strategy_A(num_shoes=1000, commission_on=True):
3 ?3 O: F, L; g4 C2 m$ g profit = 0
) M9 m+ b' E! s2 g! I commission_paid = 0; L# Y, B9 ` s/ F8 Z
shoe = init_shoe()
8 d! l, w9 n6 A2 J$ h& A
+ h. v; \& [0 j8 ^9 F # 策略参数7 T, Z6 J/ u2 T+ `/ Q; ?! `
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级) h' _, U5 O/ j3 ]
stage = 0
! q6 n- p, j* W target_side = "B" # 起手投注庄; a0 o" U5 Q$ U$ l# ` u: h
0 }' b, R" _% ]& Y$ T1 U; o6 E
while num_shoes > 0:
3 {; M- s8 U0 N; N, G result = deal_hand(shoe)
* B6 [1 q# N& O9 B
# w1 f3 t: b: U. ?* I6 { if result == 'T':
' r# T1 e* a# I3 Z$ n # 遇到和,不输不赢,重投
+ i6 R& ]: }9 I ~ continue# U, [6 S3 u; p2 E- z. i
4 i+ S0 [" X1 V$ A5 ?+ V Y5 @3 v bet = sequence[stage]
, M/ ^% C$ i; q- h, k5 m7 U
& z8 J5 Q, A& w, X F6 R7 f if result == target_side:
# f7 S$ O6 k! [2 g: u3 v' e( c( G # 赢
2 F4 ?! [+ j* I6 z win_amount = bet
+ ?2 k( W0 Q; d7 W0 r if target_side == "B" and commission_on:* y# _0 }0 c6 V3 _" e' Y
win_amount *= 0.95 # 庄赢扣5%抽水
6 d, J5 g, {8 ?8 x) u, r8 y commission_paid += bet * 0.05- n, W/ Y9 K% A
profit += win_amount; l3 c3 Y" _/ H: L; R4 z6 r+ d, M
stage = 0 # reset( f `+ i2 ^$ O) w9 H; j
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)8 ^$ w8 L7 h' T6 @# ~
else:; A) B5 K/ o/ c9 S
# 输
+ g" U9 ]# {4 Z$ N! z1 E% m profit -= bet
; \, w% |" _; R stage += 1( y: N2 X) J x' n& @
if stage >= len(sequence):# x G- g+ q2 c9 y
stage = 0 # 断缆reset1 I9 P8 N9 {$ n
num_shoes -= 1
" C2 o% C; A3 q2 g: [' z8 t1 X5 `, x+ p. x
return profit, commission_paid5 W. \4 `% `8 N- }" O& i6 f8 F8 C
) h( \# e0 i, ~4 s1 ^
# 设置命令行解析
9 v4 D/ T0 |" |* @. N& t1 L2 \& C5 gdef main():, i3 m0 _" b% o M
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
4 w+ m" @+ O7 m# V0 U* ^' }' ^8 X5 \# ^ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins."); a1 `, w/ o4 J0 {! b. I9 X
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.") ]+ T& `% a2 e: W
2 J0 S" Z {0 ~. K" _ args = parser.parse_args()
! E: h" K1 C* E7 n+ O6 Z4 F- m 1 f* m d7 _. G- c" T# H
# 抽水开关:开启或关闭
% W8 }' Z1 p/ f5 x1 M commission_on = args.commission == 'on'
* p0 W$ M3 z$ m& I$ a$ m/ U/ x9 e8 h
1 Y# I$ K1 p: S& e3 o result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
0 T) {6 @4 a3 J7 M9 S0 z print(f"最终盈利: {result:.2f}")
; H& P+ u/ d! [ print(f"累计抽水: {commission:.2f}")" C! z0 d1 K/ c' J& `: Z
2 {: z8 x4 V7 A1 wif __name__ == "__main__":
: d' D% m) D" k main()
& I6 f1 _2 W% q2 [# {8 q
0 X$ p5 f0 y1 e1 j5 |
/ a" w1 {$ z, v. I步骤 2. 运行
9 k: ~& K+ h* b+ ^3 ?9 E3 `# @% t7 N" J: [$ V4 P+ J
在命令行里进入文件所在的文件夹,例如:5 ~$ D4 m* p+ w! N
cd C:\Users\你的名字\Desktop
3 s! E4 A/ L/ apython baccarat_sim.py
& H ?& F$ w1 I; ]; F- t
0 K) m' r/ ^3 N1 H1 _8 p+ k5 s1 y! D输出会显示:
. Z& D P: U* k. W
* O7 w( u2 g' m. z+ w5 z累计盈亏: xxx- {( {5 h4 Y/ G) Y; j$ H
累计抽水: yyy
" s$ R- d+ Z/ O------------------------------------- y s+ W7 k" _! _* n
实例:试跑3次, * ?0 {* u% O' _. O. _$ C: K
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py * r7 j0 x1 @1 E6 ?
最终盈利: -5360.35 7 e' j/ d" Q9 Z- S; x
累计抽水: 5176.35
1 r% o* I; D8 _+ ~0 PC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
, T+ G- Y+ f5 m1 T+ P2 a1 D最终盈利: -5661.65
# V! _7 W3 g/ A1 ?0 G累计抽水: 5174.65 / f) i1 D. a" R1 a8 |$ ]0 E
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
4 X1 z& {1 n2 ]最终盈利: -4244.50 1 L" I/ M* W+ \) Y8 |1 d
累计抽水: 5176.50
B! a" i; h* f5 l! ^! h- n
. ?! ]- f: Q5 s+ O2 Q A) Z$ m说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
+ a0 F) W' \- O% ]2 q4 }
2 y) S& p$ x- C/ a$ r+ x累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。; h& X& W/ ^7 Y0 ?% h- @
, q4 Q2 i% A- } Y
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。0 a0 A6 {$ U" f9 N2 d% V' g
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。 l' \, y% r) N4 q# C
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。2 b9 S+ n3 V* M8 Q
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
# J5 _( h ]- X- L* b/ `( @2 w9 L
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|