|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
$ {2 W2 E% m1 W! k4 y) y @/ r7 o; Q6 L
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。( E0 u+ e3 T8 @
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
" f( n* V, g3 M1 u8 l6 `* G4 X2 [( O/ T7 F0 A2 D
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)( b8 O) K- H5 g% w8 ~. b- _ z
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
& `) o3 O3 o. ~) G" L/ R. {9 i: |+ ?先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
" O7 P, T/ L/ s0 O' y3 g, b% d7 E- I e r8 X
步骤 1. 新建一个 Python 文件
8 c9 v5 ^2 v! U: d: ^打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
* ]% D3 N' N. w0 e3 Y* v把下面的代码复制进去。
" H2 q/ D) h+ _( M r Z& }2 ~, V保存成 baccarat_sim.py (注意后缀是 .py)。
% g% [: ?: s) [" o' r, F4 W- o& Y& H- s( `
import random$ n2 X$ o7 L' C5 s
import argparse
) _& w/ L4 W8 ?# b, U' E0 ~9 x
4 D) q: p; v3 F# 初始化鞋子
) S; x3 f( g3 m% y7 [8 Hdef init_shoe(decks=8):% U2 Z* Y: b2 c* p% T4 N
# 每副牌52张,8副共416张
+ G9 U5 z9 I0 V9 A& o shoe = []6 X- m( E9 Z: p. f3 l
for _ in range(decks):
6 F M; L1 K9 Y, r# y shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
d" v, P8 s9 ^ random.shuffle(shoe)
1 G: u" F; \" w9 I2 a4 r7 }( Q return shoe7 Z( G( H' z% ?) l$ a; j
5 C5 L" ? J6 q
# 发一手
7 C; L' d0 S) X, C6 t& kdef deal_hand(shoe):* a7 `# x3 j: y$ E
if len(shoe) < 6:
/ x- K' H: B' ~" W5 N# N+ a shoe[:] = init_shoe()
) f$ m6 F* P! J# i return shoe.pop()( V! U1 w2 {( W' J2 h" u8 ^9 i
/ M$ Y' j" A/ k M" |/ i2 p/ F1 M% b# 模拟下注法 A/ S4 J' H, b3 K; B" Q: X3 [( K
def simulate_strategy_A(num_shoes=1000, commission_on=True):
7 O) g! B8 d2 B4 F2 m profit = 0
+ a( y# S2 n' H$ a- P5 f6 g% m commission_paid = 04 x7 k/ O; @ i$ ?* P
shoe = init_shoe()
+ V8 F& p8 N& z I 1 P9 `$ H, a" t
# 策略参数
' Z7 w) C, V3 C. ? sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
+ z" Z$ U! X# v/ T$ }: P p( P( x stage = 0
7 y$ f& v) V. O8 P! t, J target_side = "B" # 起手投注庄2 _8 R1 P" K5 N- E7 ~
" p- G3 ~! R+ ?! o
while num_shoes > 0:
+ l0 {( V5 j4 Y1 r% f! u result = deal_hand(shoe) h- U1 [9 w* |1 a7 [: A& ]/ A
" ]( Q: ~* G6 r& ^ if result == 'T': . u9 @, u- n# N: y- \& s2 {' B. F: E2 I
# 遇到和,不输不赢,重投1 a \: p$ _5 C7 p
continue
+ \ \& f6 O) k
, M; {# ~- k3 u& s0 {1 E bet = sequence[stage]6 }. }2 j R0 b
% R! E) T* z; c7 P0 I4 S6 @ if result == target_side:) h( `9 K1 i4 i9 ~& _
# 赢
# ?' }* i! Q U5 |$ A% J5 T8 Y6 y win_amount = bet
$ W) C8 Y# x) R& d if target_side == "B" and commission_on:8 i4 p' F: V% O: E; M0 X* R
win_amount *= 0.95 # 庄赢扣5%抽水8 L& a+ _( x' Z4 P l# Y! E% q8 Q
commission_paid += bet * 0.05
' a9 j* p& P) i, T9 |. ~ profit += win_amount) {' f9 M8 }+ H3 t6 D. N
stage = 0 # reset
! {9 u9 ~! P2 i R target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
. W, \$ m& ^3 V5 y% h# k% r- y1 ` else:
6 @- t8 Y7 A/ S8 s8 O9 \2 I # 输
; B+ m1 r% ~% [ profit -= bet4 _( G, d6 r( N* T& R1 q7 e
stage += 1
0 Y- q( r$ @' E5 M if stage >= len(sequence):' H5 r: Y+ A$ P' _# f
stage = 0 # 断缆reset
. N1 m; s1 B. Q5 ]3 s1 Z" U num_shoes -= 1
2 C" P& U! M$ g' u9 c) D" p1 Y6 j9 R* e* J! l/ Z n2 \
return profit, commission_paid; I# c. Q8 \1 p! M
. c3 L$ L" _, {" h2 `# 设置命令行解析
2 n K0 ^/ V# W- Q4 { ?) P7 Rdef main():
. ?6 z+ O( [; w/ H parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
' Z7 h# m5 Q) [. N parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")( y6 g- g- ?8 R/ a
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")% o4 C$ Q6 c) L) _; _4 B0 ^
/ i: a' k5 w. n, Z, `
args = parser.parse_args()+ K' W) @% N, H0 d2 ?
+ H. V5 l( Z# f& Y4 W5 J # 抽水开关:开启或关闭+ n/ h0 j! S. o- _1 w2 H
commission_on = args.commission == 'on'
( w3 C4 q& U3 |' j/ ?; |& n
) U$ |5 H5 k# V4 S) |" { result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)( L+ W& B" k4 M+ w' Y! F+ O
print(f"最终盈利: {result:.2f}")4 [3 }4 X' K; |0 v
print(f"累计抽水: {commission:.2f}")0 {* K& H! _. F% E0 N- `9 ?2 u( [+ k
" m% z7 I% \) T, M
if __name__ == "__main__":
5 V5 f0 `- A6 S3 Z/ f main()$ V; Q3 t) _7 I! H$ V5 m3 g6 A
4 b' d) `5 X/ F/ y
9 G- {3 j `7 J& K5 C步骤 2. 运行
! m) Y) C: {- `
# |* ^* q/ D; x% }1 \在命令行里进入文件所在的文件夹,例如:1 [. R s0 z+ `$ _: ^1 h* r
cd C:\Users\你的名字\Desktop6 {- f3 E3 u3 O; l( G# i: ~
python baccarat_sim.py5 Y0 S) b+ x8 q
. ^ m9 n) v* B/ i输出会显示:; ?( u4 T/ e9 F1 T
' Z6 d" |1 b8 s+ A5 N9 U累计盈亏: xxx! `/ Q3 h. {: P3 ^6 g v
累计抽水: yyy+ a6 c) q! J7 J$ O, w5 k: I" i
-------------------------------------8 u2 l) z' H+ `
实例:试跑3次, 5 i' V8 K% ^3 L% m8 c
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py * x/ S" a; |# T. h
最终盈利: -5360.35
/ L/ m+ {! E$ b/ s! F累计抽水: 5176.35 4 c& r; E1 h& C& x
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
3 V% |8 ~0 U: Y6 r最终盈利: -5661.65
' a6 R+ l( B5 B) [" O累计抽水: 5174.65 ) R, C$ F+ o" A4 N; d9 M
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ( {& k+ T* r2 l* T! t: ]# ?+ u
最终盈利: -4244.50
- k2 k5 I6 d( }; l1 Q% ]累计抽水: 5176.50- e) _1 S/ n- A. N' D) `
9 ] E( k/ J' [' o; n! G
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
' A$ ^ F' ^ p9 ]3 f3 J6 H8 h
3 `) y$ B: {( o7 D4 `; Z累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
! f7 c# l. g; T5 N" M+ R
0 F# i1 S6 o. n最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
1 t4 p; H% H/ M! B `. v6 c( ~这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
0 a }% n7 Z, ~/ e" y人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。! `% i6 o+ W" {: D% U
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
2 @9 t7 X0 r& @, p* b9 P. `: y# {
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|