|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
2 F0 k, B" p R+ K1 \
4 m2 [* H" l: y) Q v; c可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
- N2 `& T2 C7 R$ p3 a* }+ x/ uExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
, R! M/ L6 i2 {, m, M) P; R. m) [' B
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
: f* ?$ \) R) r! [2 [5 h假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
2 e* w0 _) f4 J, P4 E" R$ W! l先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
$ e; }: [$ F0 ~) e! B& s
; j0 T2 g' f' S8 Z3 s/ e步骤 1. 新建一个 Python 文件+ [9 E$ i9 T. q9 Z7 |) } d( _. w
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
% m7 E) v8 [1 U* m. \+ M把下面的代码复制进去。
+ p6 Q# s. M* v- z1 {- v2 K保存成 baccarat_sim.py (注意后缀是 .py)。, }8 T( ^; y$ b9 x5 m
- L! }3 ^) L. u/ @# F* A5 ?import random
5 L u/ N) }1 ~# [; vimport argparse! P. R* x1 M4 ^: @ j7 O
& E8 c2 y( i' A0 Q# 初始化鞋子
& f+ T% L/ @6 c$ Odef init_shoe(decks=8):, W/ I' ?* X% y! X$ k/ }
# 每副牌52张,8副共416张" ^" A% t4 L1 g) O
shoe = []
5 n, y5 P& \) O: e; p" g2 U for _ in range(decks):
# r. }2 e- u4 `3 @0 K: W7 x7 D shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
. v6 c0 {1 w( j# g random.shuffle(shoe)
! y9 I3 g; [3 I+ s2 |: X+ t4 y2 ~8 S return shoe$ R# F# y3 N7 z* E+ J. p1 ]
/ q( L* [3 e$ `4 R) D& I
# 发一手1 A( B6 d6 `- x0 ?
def deal_hand(shoe): W% c9 Y! o a' ~" b7 `3 s1 v7 h
if len(shoe) < 6:
- S q5 }1 O$ \ N7 p9 n7 G shoe[:] = init_shoe()! l% M# t3 \2 @4 T8 u0 G6 p
return shoe.pop()
2 @: M S. n' |3 ]$ s5 f2 A4 L( S/ e( P6 E" P9 n) M" Q
# 模拟下注法 A3 s9 ^/ K: X+ }: m; D+ s9 c
def simulate_strategy_A(num_shoes=1000, commission_on=True):
- j1 l k' J! D5 z& h1 ` profit = 0) R# z6 W; t' J) E8 d% a! x
commission_paid = 0/ L+ Z }4 T v
shoe = init_shoe()& a1 M$ m5 F$ F. N: o
0 d. k% T/ R' d7 T6 I # 策略参数5 r+ p: v5 w3 v
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
" B* r; f- W& _5 W% m5 l$ S& G% g stage = 0
& t% k( g& E. ]- u. A5 n target_side = "B" # 起手投注庄
0 q; `5 ]$ y% G T4 z% _* h7 Z' e* D) b1 u2 N% }1 m! I
while num_shoes > 0:
0 D& X/ e$ V$ ?+ N6 Z& [8 X5 x7 x result = deal_hand(shoe)( Y2 f }7 k2 {, w$ g6 k
* {8 e3 j5 a- s Q# H0 i) b
if result == 'T':
, d% L6 Q7 p2 R \5 v- H, `2 y # 遇到和,不输不赢,重投9 |5 F& @- E4 l H$ W4 m* \
continue7 e7 B" ?& ]+ X
% }) y+ W. O; T7 J* a4 L# z bet = sequence[stage]
, M3 u/ L5 K) v0 x8 [$ B- d
3 I! p9 c8 E! @" V+ z if result == target_side:6 a4 ?3 ~! s% a) k, p* m' J
# 赢
7 m; _; r7 b8 F5 ]$ E win_amount = bet
- T: ?4 c: b* k3 T7 F! R- j3 I% B+ J if target_side == "B" and commission_on:
# ]& u" S( [" k) a+ S, ? win_amount *= 0.95 # 庄赢扣5%抽水
' S# `' c9 p; ^* c! y N4 e commission_paid += bet * 0.05" M c+ R' f6 x- |
profit += win_amount
% z, z/ W4 R" f2 {" V7 [3 @ stage = 0 # reset5 j) T/ C: n% u! x
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)( y* A0 ]/ ]5 ?! ^* J- {
else:
* u q8 y; U/ v" U( Q # 输
, v# d, N& R, L; S5 q profit -= bet
/ Q) o9 B2 P, f, O/ `; R stage += 1
9 d, i* W7 J( X# i; o) L if stage >= len(sequence):
3 Z. v6 c. U7 E" O2 p stage = 0 # 断缆reset1 { ~6 P( q7 H) S) _6 n
num_shoes -= 1
/ h! ?5 A; G) V3 N8 l6 P
1 b1 k2 c2 K- O& ?: S% @4 y; Z, W return profit, commission_paid
) Y% _- ~9 n6 a& F) v4 B: {: T0 m' i5 J/ O* B' o4 }
# 设置命令行解析: h6 Z0 I4 w4 c+ H9 {! F
def main():
! a3 X, D8 @. {' v parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off."), y! U# [; b, p3 H: D
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
6 ^' f4 |5 V& g0 t$ e parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate."), D& E' r# T0 J$ _' {7 T" C* k
( V+ @9 W( R4 Y: o' ~+ j
args = parser.parse_args()4 S' y# T' e8 {2 V
& R# B! T+ @, _9 q- f* k
# 抽水开关:开启或关闭7 D2 ?3 G. {. _2 Z' E4 y
commission_on = args.commission == 'on'! L% h3 X r S
2 y. }" {0 E, e3 p result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)/ E8 H5 t8 {! r8 H8 y* j
print(f"最终盈利: {result:.2f}")4 b" z! Q2 i6 h# n. O
print(f"累计抽水: {commission:.2f}")
, k7 h* e# z! p. c; ]+ x n" b, ^; x
if __name__ == "__main__":
: `+ R; u" y3 `* F: |' _* c* t main()8 l; U8 `/ d8 E
( \, D* z4 Y. E& p/ k
o7 ^' S- Y# I% c4 e* u% x- E6 B
步骤 2. 运行' ~1 c3 Z! \% h+ t
, c0 |' o3 a" ^( F, t0 L
在命令行里进入文件所在的文件夹,例如:2 w9 m+ ^" J( \" L0 h4 X% p6 |4 i
cd C:\Users\你的名字\Desktop4 b3 j0 }% H$ q# k. K. C
python baccarat_sim.py; z4 P% L+ I' O7 G
- D9 f9 t4 S! o7 `% |* S# h
输出会显示:
8 T$ O: {* N! L+ t5 |8 }7 s3 }$ u {/ v2 P! y, [4 N( M
累计盈亏: xxx
# G7 ?' @& q; m# Y$ }2 M2 ^$ X( H累计抽水: yyy/ s2 d; E: J. B0 S; p& l
-------------------------------------
" ?. s$ E, J* Z( @, d# O/ {实例:试跑3次,
% z- y6 A0 D5 z# D5 eC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
! s2 ~! f# {8 S) J& |- K# [最终盈利: -5360.35
2 {2 p: d+ o4 n+ @. u1 _累计抽水: 5176.35
! l1 o- {- f5 G+ [, wC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
$ e; ?6 q: o5 [' u: L/ y最终盈利: -5661.65
1 ^% O) `; d- j* R7 k7 B. G+ I+ P9 ?累计抽水: 5174.65 5 H2 b3 q) i5 C6 ]- p
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py , P; F3 ^8 J7 O, k" p4 I- L+ x
最终盈利: -4244.50 $ @3 @" ~) j. Z% c. U
累计抽水: 5176.50' a% f- H* i% P0 F( U9 ]3 T3 `
: [3 [' b8 Z% O o& E
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:% b% q _( n& j6 y$ w5 e3 J( ^ Y
' e1 Z9 m2 p% R9 o8 T4 ^
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。: ], ]' Q9 u d9 n
% c6 q" t5 V( S, o' Z
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。9 c8 T) x4 P5 j/ ~/ x9 h
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
- W: m2 @+ \% H4 A9 }人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。3 Q* H/ z8 u A$ M) Q5 b* _. t' h
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
* {, }" S. Y3 C0 G( M/ }, W& y0 ?, y% L7 q) z7 S
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|