|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 0 Q3 G+ d3 d5 `4 s: g0 g
' ]( W& T" a2 ]3 K( ]3 f可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。- G Y- Z6 T6 _& O" m, u
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。, g0 H2 o; U# `: i: c" }8 v
: N1 C# x( |9 I. R! D" F3 j$ `
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
& b+ r1 D, O! X+ q" [- W8 K假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
1 }3 s7 H" T2 ^; C先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
# }* j0 |0 t5 n3 H3 U! K( i. m% v! f4 h& `
步骤 1. 新建一个 Python 文件
( r: j& [# M0 }0 t打开记事本(或 VSCode、Notepad++ 都行,我用记事本)8 O# W# O; j4 K
把下面的代码复制进去。5 {1 o! z% M) p4 ^" g
保存成 baccarat_sim.py (注意后缀是 .py)。
7 x! N5 N! i1 v3 B+ n2 G' ^* c" H1 H2 J% B$ E- B" S7 z9 ?
import random
/ Q% {% E; W8 z, I* K' q n% @import argparse& O' ~: f% [, [- Y6 H+ V7 \
7 r. K h3 K8 L+ {8 {
# 初始化鞋子
& ~2 n7 [; A" P+ G5 vdef init_shoe(decks=8):/ ~* `# M/ n5 p0 d2 q
# 每副牌52张,8副共416张# s& e) }1 W8 Q) X: W
shoe = []: f1 y% X$ ^0 `# D! c% `
for _ in range(decks):3 T/ i1 {! }9 y5 \3 {+ q
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
- W9 _! S7 a# F random.shuffle(shoe)6 v" R+ Q' A5 `/ Y/ H4 t
return shoe
8 o# d r. P' t$ e" C* k% s4 _7 m- U3 [1 n4 A" ~
# 发一手
$ C0 Y4 ], G$ R) D6 f* S) Ldef deal_hand(shoe):8 y7 D8 I$ F( S2 R+ m
if len(shoe) < 6:7 A5 N( h0 d5 ?
shoe[:] = init_shoe()
$ ]9 V) U( Y- t4 R7 N return shoe.pop()5 I6 }4 J# J/ `
+ C0 D. h+ T k% D# 模拟下注法 A' I; ?" w# G8 l% w1 ]
def simulate_strategy_A(num_shoes=1000, commission_on=True):- s; U4 A9 R6 X& X& c* d4 y
profit = 0
* S6 d/ X0 |7 y& F) E commission_paid = 0) J( D- C) F: E9 ]+ ]$ _; }2 m
shoe = init_shoe()
1 d2 M& |; A0 x: K 6 u, A( h9 K, E9 G' x2 j# E
# 策略参数
* G b6 X, O% c# g K sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级9 A; @, M0 e& c) O8 h: E4 V
stage = 0! w1 v9 V/ ^% t3 a! d; u
target_side = "B" # 起手投注庄2 H6 h b0 h4 i; g
$ U: n! J3 ]# s, }9 v0 M- B while num_shoes > 0:' ^8 K! L2 P3 F; O* R
result = deal_hand(shoe)
! |; S# y5 c+ L5 ~5 r
4 G; N+ B2 N) k0 n- Z if result == 'T': / L. g. u5 X1 I* f
# 遇到和,不输不赢,重投
1 {& h5 k x8 G, l% r continue/ R: {4 |' ]) J, A: [; g5 s
* @; L5 z! B* w8 q bet = sequence[stage]
0 `# N' S; E& ?% S( S( d6 q
$ O$ M$ J# H! t2 A5 O if result == target_side:
5 d. _/ j7 L' A( N- K& B& ? # 赢, |6 h" i5 e: f5 k/ z+ w
win_amount = bet
8 j9 T4 m% ~2 l0 F' ? if target_side == "B" and commission_on:
& ]" X5 V+ `$ m& ?& i/ q/ y win_amount *= 0.95 # 庄赢扣5%抽水; q0 x1 B+ {" D- p
commission_paid += bet * 0.05
j4 i* @( t7 B7 S profit += win_amount0 d! \8 l6 D. \" A
stage = 0 # reset
& _4 [' y, s* H% l target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
: d. f' c! t9 l, \ else:
' T1 Q* C% W5 v. X # 输
) J" f$ {; P5 A/ [' {6 E profit -= bet8 G! H9 w" g- P
stage += 1
$ R5 Z8 s) ^0 N. J if stage >= len(sequence):0 {) C4 a: M5 p* w- M
stage = 0 # 断缆reset5 T# E" K# Y$ b a3 N; d! }
num_shoes -= 19 y2 l# R* b- G7 e' F7 n' W+ z0 l
( X3 \0 F3 X# y( Q0 t+ [0 v
return profit, commission_paid
: Z; x" K. l" b1 t8 ]. M5 E9 I2 W8 L. a9 _
# 设置命令行解析
) z9 W5 ^& b+ R) Vdef main():
' e, z, s9 E+ i' n/ D" T* J parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")! p% a2 @* m/ r2 S0 L& k Z8 j& F
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
9 i5 a8 E |; A- a( T: d9 V. N parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
) l& s/ C) n/ v
& k: A1 f2 f2 I4 M/ R args = parser.parse_args()
+ s% E7 S: E9 s( U; U! |: t 6 h3 h- ^4 j# W1 o
# 抽水开关:开启或关闭
" ]8 B( Q1 u, \' X2 P commission_on = args.commission == 'on'0 U& g/ ~! D! ?' Q
5 G$ I7 I8 A2 x" M; ? result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)# }3 j0 t' c1 s
print(f"最终盈利: {result:.2f}")5 N1 U# [& [( K+ `7 q
print(f"累计抽水: {commission:.2f}")
2 |5 P, B* G7 S i. I% G, {% |% F. _. A! c% N7 f
if __name__ == "__main__":4 z% c6 |6 {& F+ m; ^
main()
1 h: a6 |+ S, F2 l* S0 G4 |& Y4 h
R3 X% `: k: v; ?$ ]. c! P7 T# Q/ z( \, S* B- P- a: R
步骤 2. 运行
" h& o- Z8 m/ K
: H0 @/ \/ Y _# J: E: a在命令行里进入文件所在的文件夹,例如:* C0 D" p! J0 M, @- f
cd C:\Users\你的名字\Desktop
n# p1 M& x& c+ W0 s% ipython baccarat_sim.py
) ?+ [9 u6 E1 A6 Q7 v, r0 z+ }: a/ |8 }* {4 i! ^; f" N! J, k1 R
输出会显示:* i b& M, g4 k" V8 h M9 W; y6 _
; |; Z G, W' u% D! \3 A
累计盈亏: xxx v& P7 |0 f: l4 u
累计抽水: yyy$ A Z4 S; m- }1 N# O! w
-------------------------------------
g, @1 v! R; O# t; j8 x实例:试跑3次, 4 r# c3 @2 S: k5 P. _% `) L9 ^
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
; k, m/ ?8 B1 w; |5 c! i5 m3 K! u最终盈利: -5360.35 m9 S9 l+ t' {% @, d: H
累计抽水: 5176.35
# A, w$ R) M( M8 [) OC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py . s2 i* @, ^( a U
最终盈利: -5661.65 ; A ~$ Y2 Y) F1 v7 ^) N
累计抽水: 5174.65 " [$ u5 E- E& x! v0 u9 `
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py : i+ `/ C0 Y' D" V- a$ V" m
最终盈利: -4244.50
( V* Z' a. D! `& k( S+ Z累计抽水: 5176.50
- g- f" a2 {0 V/ C9 f
" t) P: S& X8 \+ B# t+ a说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
5 N( \, e" [6 l( \1 ?) e5 V( f: ]0 G1 G
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。) I! c% g. I. d K% ]
5 n6 L5 ^! M& y( b( B; x9 p最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
. l A5 A. G7 u这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
g, X- w9 u" t/ r A# {人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
6 b. T5 @$ R0 r( ^但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。$ J, x; n4 F8 t1 ?
- {) q8 I4 {5 w+ J2 p0 J( T$ X1 M
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|