|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 & P# L3 U- H, v( n
9 n4 {: c+ k+ ]( K# I$ ?8 c1 i可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
( h% r+ b( U3 e5 \Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
5 d9 V. x$ Z' x1 l6 V% z6 s. A' M {0 _& } E0 g- N
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
, F4 C( d8 W# d* s1 Z( D* q( t假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。! S! h* j0 w, a. O7 i* Q
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
1 y2 ^' X4 x! j% H% K( Z
6 T W% p$ x. C e$ ^步骤 1. 新建一个 Python 文件
, |/ H* P' D. v打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
6 E# C5 l* c6 L5 e; i把下面的代码复制进去。
O7 ^. p6 S7 W- C* o0 i保存成 baccarat_sim.py (注意后缀是 .py)。3 S q/ F* m( ~. i. N3 M
( z" H U( p8 ]: o( v' Jimport random* k$ I/ \: P; q; N* N6 R
import argparse; g1 Y' s" P5 H5 T
% w+ \' v3 [6 J# K$ g1 y. k" f+ H# 初始化鞋子1 G( C+ b$ H' X2 E) z7 K2 ^
def init_shoe(decks=8):* m' P, i$ [# m; I, K) X/ h
# 每副牌52张,8副共416张( v- d! C; l3 v! u
shoe = []
3 P# K7 ], d7 D8 i for _ in range(decks):
5 I( A2 b, a% ]' o/ X- X, @4 h/ O7 i, [ shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4( a Q% q7 G3 u# X
random.shuffle(shoe); @1 R. R& Y* \! e+ I% M
return shoe
6 U9 e2 A1 `" |5 w$ U- e. M
2 X$ M9 P0 V0 h7 ^# 发一手
' C0 t& \; V' l+ `+ Bdef deal_hand(shoe):
6 A5 B3 X% ]$ l if len(shoe) < 6:
* J9 s) t- ~/ N5 q, M' W+ r* l shoe[:] = init_shoe()% k2 w8 v) q+ s, ]
return shoe.pop()
6 V' {8 M4 _- g+ `% ^5 m. X4 T6 P, v2 i
# 模拟下注法 A# w' ?- m- T8 j) V1 T5 V$ t; z* O" R Y
def simulate_strategy_A(num_shoes=1000, commission_on=True):$ {7 R; T) |! s: l* N
profit = 0( Q6 m7 ~8 ?/ n! e2 |
commission_paid = 00 W. Y/ r, f" z
shoe = init_shoe()
1 K. T& q, k# Z
& O) p& J+ {7 m: }, | # 策略参数
, {3 V0 G5 W$ d& J& U7 R sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
- K; N$ X) }$ B U, x stage = 0" h" r, ]6 v+ v( d6 q
target_side = "B" # 起手投注庄
& t5 o2 C% N8 j! e
( f4 c, A+ t5 Q3 r while num_shoes > 0:
0 j4 y* k. G4 D1 ] result = deal_hand(shoe)
2 M: L( Y) } y4 ~; @0 W0 r$ q# } x: _% N7 g* `; {
if result == 'T':
m$ O Q0 H& t: P5 o2 C+ J" \1 D # 遇到和,不输不赢,重投2 U( v. o* p, U8 z) V1 v
continue
$ d. Z' r8 |5 ]6 M2 b8 p" S2 @/ V( Q8 x1 {" d# O( `
bet = sequence[stage]
% C" L3 [ t: Z/ F7 R9 F( P
3 q- W" A7 `5 } if result == target_side: l* }" d% r4 J/ \/ z& _+ C1 I
# 赢
1 f- f1 @0 j* u* S! ~7 Q7 h6 r! `2 Z win_amount = bet
4 Q/ W( a$ N. c h5 I: r: U* X if target_side == "B" and commission_on:
* n3 u2 a# z4 b5 M win_amount *= 0.95 # 庄赢扣5%抽水
* l8 `) E, H2 ~! s" F4 l commission_paid += bet * 0.05
. i5 D3 _# x* x- m profit += win_amount4 f2 M( y c# `* V/ {* [+ h+ g
stage = 0 # reset
4 n, A8 s+ t6 }; D/ z target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
`! \ G, S- v8 |/ r1 q else:
2 z _( ?4 t! ^& u # 输9 G& }3 N4 E& E" i! ?/ J9 w
profit -= bet1 ]6 [% d0 A* I F4 n
stage += 10 A) i% ]; ~6 k( _4 U8 E# X5 d
if stage >= len(sequence):
- l5 i; J6 q4 z' m& k6 l stage = 0 # 断缆reset* e, D9 W2 v; n; }! t# S
num_shoes -= 12 z6 }; s% E9 v1 b2 Z0 A
E1 [+ e, O. @3 C4 G# p return profit, commission_paid: k6 f9 A4 G; I9 y. f/ [3 g
' [8 K5 [1 ^( T
# 设置命令行解析
' A) f$ S( d% \. @9 ]. edef main():
- m/ B/ q+ K2 h. {" Q" L T+ r$ x; G3 u parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")7 j% \& F, Q' V& D
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")1 E5 h3 |8 m/ |6 o3 S' e1 i; J! f
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")5 Q# G& L/ P" P0 `( b* P
. l9 J# T" q# J2 s) p args = parser.parse_args()2 {6 D1 H7 Z Z* i; B" V2 X& L
7 `4 M* w/ f& |) \ # 抽水开关:开启或关闭
! h" ~. N/ N5 }8 J5 Z* o% h commission_on = args.commission == 'on'
# m7 t- {0 q7 C( j* B$ m: U) q
5 A1 H ]( c' ?. @ result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
7 ^: ?: ~ c6 ]; ~5 z- |, _ print(f"最终盈利: {result:.2f}")
4 W1 t0 q( e4 D9 Q& ~' u print(f"累计抽水: {commission:.2f}")
& b( Q4 t" j/ e9 q q3 o
' i) I+ k5 M7 C: i1 Bif __name__ == "__main__":$ g- @9 P5 p& }- i
main()
- ?4 z- A* X9 a& O% e* L8 ]. `7 q# b; C5 X/ B0 h+ h! Y; v. c9 Z
0 L L+ m! l6 W3 @9 |0 b
步骤 2. 运行/ _) e( V( V- _ ]
& ]- E! K1 q: A3 f( x1 M$ x
在命令行里进入文件所在的文件夹,例如:
$ h& q$ {; x1 \' Y; R/ `cd C:\Users\你的名字\Desktop, H& @; [3 H. D4 t9 ^6 V" x
python baccarat_sim.py h$ a' O+ _0 ?1 Q I$ A g
1 l9 } ]5 ~# I# e9 e输出会显示:' a8 K/ `) i3 Q ^/ V0 u& T3 f
9 s# `0 X( A) g* R8 ~
累计盈亏: xxx7 k) Y! X7 H2 V: ^- t5 u7 O
累计抽水: yyy
4 r$ _% O+ B( q5 p$ ?& i-------------------------------------
/ G) J q0 |* F! ^: ?2 [实例:试跑3次,
9 V/ ]# F; g+ @4 P8 \6 gC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
2 P2 {+ G4 d- b: y% y- V) ^ g最终盈利: -5360.35
5 i! Q' y2 k1 j. Z, f累计抽水: 5176.35 3 z' T- l9 R* r4 o1 e- \) L
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py + {6 Q7 `% Z- V0 ?- w+ u
最终盈利: -5661.65
- _9 A$ J* [3 p! E累计抽水: 5174.65
O Q% l( A, fC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py + q) D; v! [6 q% i
最终盈利: -4244.50
; C5 V( V- t7 M9 h0 c累计抽水: 5176.50
. Y" R5 G; G' {4 ^0 i- {: l* N
; y# T& o* @2 @ Q8 i5 ~# D* _说明你的 Python 已经能正常跑模拟了。结果也很有参考性:3 k8 x3 u3 e; i7 l* W" B+ z
4 A* t9 }/ n$ Y S
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。( ]9 ]5 Q1 {9 h5 W1 v, c2 m; ~; {1 u
9 t& i+ [4 c! W1 M) y# E
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
8 z* T+ J) [8 F, P这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。1 [2 t& S8 Q* @* w2 L* }5 S
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。1 x2 J% _, C: U+ Z5 n& @9 R
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
6 v$ I# u( i+ m! g5 J9 J ?
3 U' L3 N- _1 p& u& j启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|