|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 : y+ h# c$ |* A: o
* `- h: _! x; r1 Y; ?& I6 n
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
5 [1 t# I5 _/ [; nExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。5 h* g* j0 N( d8 n- P0 k1 }; x1 }3 }
# B) m( S) `) G9 K. g# n
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装) V! u2 d- @: z
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。; }8 l# n8 A6 f
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。; {- @% F! ]+ b0 F' X! C8 e3 ]
9 I0 I7 f5 |% j; K
步骤 1. 新建一个 Python 文件3 ?+ ~ y' L% u0 F5 A3 q
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
" i# o. M( K! n# z+ c! S8 U; g1 M把下面的代码复制进去。! t# A' g$ r) [! B0 c. N
保存成 baccarat_sim.py (注意后缀是 .py)。6 X% n$ m& \6 M. `& A- ^: I
! a; h5 k2 B- G. S1 M3 rimport random
/ }( A% Q% @' F- Kimport argparse
9 F. r. [6 i7 D" ~& c! p( R0 t; i. ?) { |; Z! x
# 初始化鞋子( V* ]3 f f( \8 r% @6 n! l
def init_shoe(decks=8):; K# j$ h5 c" K$ T0 ]
# 每副牌52张,8副共416张
( X/ h* o1 n( u0 W; H- ?, X shoe = []
4 u( b$ G0 Q, i2 w7 p for _ in range(decks):
+ ~' ?2 B! g0 O) o shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
- [9 G$ [$ L( s& o/ d/ C$ v random.shuffle(shoe)
0 s$ X; n5 N) M. U9 V% F* M return shoe. x3 ~& C$ X7 S# S
# {8 Z" _( i% j& p5 W- S# G3 Z# s# 发一手0 v! S* w: w/ |* {! l; a) i
def deal_hand(shoe):9 F7 ~8 Z6 R, S( o" f+ ?$ T- F
if len(shoe) < 6:
, ?0 G0 `( n; W E; `( X( k( e shoe[:] = init_shoe()+ [0 ]( J2 n$ c6 }& J* j( Z
return shoe.pop()- b2 @$ [. v3 a9 {
/ s n4 I# s) D1 e' f( e
# 模拟下注法 A
" V+ D6 I* t2 k/ U, l+ ^; ddef simulate_strategy_A(num_shoes=1000, commission_on=True):
4 h% {, y, O5 m6 ?0 k9 N profit = 0
3 g5 K6 c; M" |3 I4 {, P commission_paid = 03 _+ g$ K! [5 g- p
shoe = init_shoe()- J1 T* t' t0 j$ l7 f6 C/ l* w
' b0 ? z' r7 V9 p/ r$ v; Q # 策略参数
8 Y# A! D0 y4 T/ m. E- n sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级+ j# ~2 j! t# [; d
stage = 01 T& @6 y) M7 f: ^8 d2 A# X. {1 }
target_side = "B" # 起手投注庄1 J4 z" z7 K# ^+ d/ Y
; N% F# A* {3 Z3 d while num_shoes > 0:
8 D! T+ E5 M4 i& r9 B- W result = deal_hand(shoe)- N( [, ]8 K2 m/ G& m+ C* |
4 l8 u. a0 V' Q+ }( Q1 C' x if result == 'T':
" b8 D1 b1 M& a4 s # 遇到和,不输不赢,重投
! z% z1 N! X8 s. b3 K, [8 ~/ ]0 y; ^ continue/ B. |7 @. y# n7 e9 E& y
& v V1 W4 \6 |( p4 i# B bet = sequence[stage]
- G* d- D; m/ K/ v# f0 s : r- U+ R* H6 e \5 A. v
if result == target_side:
3 j* D: n X, u. F # 赢# v0 l, X! ^% Y, q0 Y# J4 i
win_amount = bet/ m2 }/ P# p: `3 A, X
if target_side == "B" and commission_on:
+ i" M3 C8 h4 w% j6 Y0 @ win_amount *= 0.95 # 庄赢扣5%抽水1 a9 f1 |' b- B' x/ Z. X) T
commission_paid += bet * 0.05; ?) f" J! B; J0 z
profit += win_amount
/ [6 b& \6 t+ s2 D9 ] stage = 0 # reset& o' { i5 C: M8 Z' L1 T
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)$ A/ k% M4 e. ]6 J% Y; H' p6 d- p
else:
' ?& b( ` x6 t) n # 输
; p8 F6 m8 \/ n5 D6 A F2 ] profit -= bet
. k( K0 l& n4 X stage += 16 T( k; q0 s0 ^7 Q
if stage >= len(sequence):8 K* J2 R- Z9 h- Q$ q/ @% z
stage = 0 # 断缆reset+ i5 C" c# V2 s7 v( F: I
num_shoes -= 1
. ?: C4 I: F6 c' s9 c8 @* u; E% x, |% z+ E$ w) N
return profit, commission_paid0 c9 v+ R+ A# `0 @* K& f5 @9 a0 C
1 b4 {; ]. D) J3 w
# 设置命令行解析0 T+ O/ S3 k; z% O" n
def main():
& c3 N$ p$ r/ _5 x8 o* K parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.") y: s% R- E: R) o# k
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
* T2 M' ]0 Q2 H0 u parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate."); H- T H$ w$ J! @
6 b- O+ P8 t3 ^3 N/ X4 @# H args = parser.parse_args()7 K- \! E4 [5 T' H! I' S
- y0 ?9 U" ^ m- w6 y9 Y/ y: v; k # 抽水开关:开启或关闭
C2 v/ \, Z3 [/ t commission_on = args.commission == 'on'
* y6 m2 ]) z, y* a/ ? f* l
6 Q1 T9 B- i: u% c( a result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
" B0 M" t5 z* Z& I0 _ print(f"最终盈利: {result:.2f}")
1 l( c; Q6 F' u" T print(f"累计抽水: {commission:.2f}")3 g# I- i: X7 E; D/ c! C
/ F$ }' u- w+ k+ [
if __name__ == "__main__":
3 J K4 l3 f* b: C8 R7 j/ o main()
6 p; z/ O" O5 a7 }4 u
( y2 ]0 M: D! t3 C5 L5 q. o* o& z8 D: q8 w; f0 V. R
步骤 2. 运行1 D/ z& i- d# U
8 t/ C* r& Z+ R8 e8 q$ F5 \
在命令行里进入文件所在的文件夹,例如:: m- V0 m9 g" x$ }
cd C:\Users\你的名字\Desktop0 P: x4 x- p; e9 ?5 l, g5 o
python baccarat_sim.py
2 ]- o, s; A4 f) d: ]' I m+ G7 r: e4 Q- U6 H+ O; A1 ^2 G/ t5 p
输出会显示:
: G# [) k+ @, F# m6 N1 H: B2 Y5 }8 Q+ ^$ t9 O6 E$ M3 u- n
累计盈亏: xxx
! R( ]/ N' M" g+ l& r0 H) H6 [累计抽水: yyy! B9 T8 f$ m( r; N4 Y
-------------------------------------1 d' A1 k1 I$ C A
实例:试跑3次,
0 L! f+ ?9 Y D& ` B) gC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py - f& \6 q9 W7 }( `% T9 V' E
最终盈利: -5360.35 $ `# p: M, E- @% m3 _' @# W
累计抽水: 5176.35 3 e2 O& O& q0 m- B8 K4 L6 p' b# Q
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py - J$ i2 ~1 R2 E7 s4 ? U' H
最终盈利: -5661.65
( c5 x# v4 p: |累计抽水: 5174.65 7 J- `- K$ v: T `# f! S
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
4 j' U3 l' r+ m, O$ w最终盈利: -4244.50
, z* u5 H" S* S# C9 [: W$ z1 |9 d累计抽水: 5176.50
3 J L% c6 A0 s
3 ]0 G* t! K P' M: m说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
3 i- w$ p" {( `( p
3 k" h! F$ @7 }7 y6 t累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
6 `, L: x! G- ?: K) \7 S
9 `* a- A8 S) r6 ?! L最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
J% X" f) Y5 j: X: J1 p X这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
( U# b0 V5 i' o* j# W人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。, x* ^1 _7 E- b
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。: }" L& [* x5 o
; W. X; P1 ]5 R( a0 j3 c' ?# F; n/ v启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|