|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
( k1 Y$ O. ~; g$ p. n; E
# S4 C- Q+ m7 F. ^, I可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。' L! Z6 D; N( p* q
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。, }$ }! L5 n1 J/ i7 w$ f
, I. H3 q, y( H在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)! `1 L/ l2 Q5 K( B" _' S
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。+ U# i1 u5 [0 H# r) m. i
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。. y7 H3 X, f3 D, b4 A
' G" n: Y( a$ W" R步骤 1. 新建一个 Python 文件
! M. P' K0 T7 N5 \& ~打开记事本(或 VSCode、Notepad++ 都行,我用记事本)& A& v, W" u! X( ]6 F& K
把下面的代码复制进去。
( O9 a8 p4 ^, H4 S保存成 baccarat_sim.py (注意后缀是 .py)。
9 v+ |3 N3 H& u) p& E
! Y1 l8 L+ {2 I* V) H% aimport random/ h7 n3 S9 F; ]; H7 ?( M( a: \
import argparse
/ _% D6 M; {6 O1 R7 H3 Y6 V9 B, g. { g
# 初始化鞋子2 b( N6 r7 U1 W# J! r- l& C
def init_shoe(decks=8):
~" {5 P7 K) ^$ \; h2 B' J7 G # 每副牌52张,8副共416张
' l% H4 i0 P" [& i- P shoe = []# l6 X! f% y8 F/ T6 k' ~2 e8 O
for _ in range(decks):
# t* q6 J3 h# g shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
% D- P5 m# F! P9 N4 V# z random.shuffle(shoe)
8 F& n; C' N8 D( ?$ P. ]1 i% }4 Z return shoe* F( D& p7 k. {% f* o0 c! l
+ c. G; }9 n( B$ G2 y2 o# 发一手
8 T8 P" {; N& g# u: w3 K; cdef deal_hand(shoe):
# G( `8 ~+ H8 o5 C w4 W if len(shoe) < 6:
5 m o$ c8 O) S shoe[:] = init_shoe() d, Z! U& i' \1 q5 A
return shoe.pop()
: G, c% M5 ~& i9 e# [" X
; C' e! x4 K; n# a: v3 d# 模拟下注法 A: ~2 W0 r' u' a9 w6 n! i) W- L
def simulate_strategy_A(num_shoes=1000, commission_on=True):
2 f1 E: k' f J" t profit = 0$ J. U4 u- b2 ~2 }
commission_paid = 0$ } p1 b, @) l5 h: q
shoe = init_shoe()9 C& `6 U* C: b0 ^% R, _
& D- Z' u& U' z # 策略参数
, ]" h' t; S( ~1 L sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
- J7 L& w' k5 K$ n stage = 07 W' y! f5 I! i6 Q1 t8 s
target_side = "B" # 起手投注庄4 G' H* D; H- K4 c
1 H; h5 t4 g4 X- p# U/ ~/ @: `4 n
while num_shoes > 0:
) K% z+ R; p- j result = deal_hand(shoe)- ]2 W- Y) x6 j0 z: X$ e
& G% V$ l7 T5 n if result == 'T': 7 i/ r1 ?; P' q9 | Z! z: _
# 遇到和,不输不赢,重投' G' W, {% @3 A; P0 T
continue2 N s" `) ?0 c' B" d& O3 P' y$ {9 i: ?
1 s4 \! i2 _$ O! ], s6 {
bet = sequence[stage]
& C/ G$ ]; b+ Y+ P+ I5 Y& i : @* p# w1 _$ c& G
if result == target_side:. Q1 Y* j7 L( G: q E" n# j
# 赢
: k! G) E' L8 R U, k9 e3 s win_amount = bet' k5 \* u; z s2 }( x3 c# d
if target_side == "B" and commission_on:1 z. L' y' l# `) ~& m
win_amount *= 0.95 # 庄赢扣5%抽水; @# z2 K( Z# l/ Q. w/ V
commission_paid += bet * 0.05; t- P# M# s$ H9 r" t q" y
profit += win_amount: x r! ^' J( g# x7 y) o: L
stage = 0 # reset) e% K/ K3 q3 b" E* l; X
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
( R# D3 T$ L* @, ]* W6 n else:& ?8 c& U0 U2 b) }- y
# 输
# M9 A! U/ ?0 a$ T1 O$ N profit -= bet
3 V; n) Z" O- L stage += 15 H) p" Y1 q. t0 y/ D+ f
if stage >= len(sequence): e0 q: q# [% z' T
stage = 0 # 断缆reset8 s- K" D3 P9 F `
num_shoes -= 1
* B: ?( r ]) g9 N4 D( J
6 ?$ ?: V: u, D9 c4 M( H6 i return profit, commission_paid% _- L) u; I& G( @9 q6 l
" p) s; ?: P# W! k# 设置命令行解析
% Y. j7 ?, t) Qdef main():* ?: t) Q5 K' V; |& y
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
+ X/ a/ _3 d0 b- O- ~2 d5 b& p3 D parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
4 ^8 G2 |+ |, I/ `1 U parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
+ Q9 K( x) x+ D5 Y" Q% `7 u" f
: E. M2 {# B* J args = parser.parse_args()
* |. W: U& d3 H: F1 E, E - U: Z6 J! l" o) \' M0 L' F5 `, A
# 抽水开关:开启或关闭
8 H9 h" g$ Q' }9 U: l$ h3 j# \ commission_on = args.commission == 'on'3 J! x# h5 ]. t! s
$ ]- Z" y& e% W! u) X1 W8 ]) e' u result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
7 X3 Q4 P& g8 r# @4 R print(f"最终盈利: {result:.2f}")
Z& |2 ~/ A1 `; d% e; L; L print(f"累计抽水: {commission:.2f}")
8 n9 @! l6 N: r) [! D: J) |& j7 o8 N' `$ F4 i
if __name__ == "__main__":9 ?6 ^% K' \5 y! y9 G
main()2 K8 W9 w; I- E0 C
$ q/ c$ _, w* h1 M8 e( E# ~3 L J3 G
步骤 2. 运行9 t' L& f/ {# X k, C' ~& u" P1 h
7 a& `6 K) V6 |6 y6 Z7 D- J
在命令行里进入文件所在的文件夹,例如:
: V3 S* r [2 u) B$ ?% r# Z/ Ccd C:\Users\你的名字\Desktop+ c" ?' P. F: _2 k p; U; ^
python baccarat_sim.py
+ W! ^1 R1 b* s& S/ d9 l$ P: }8 H( b9 {# z s/ Y0 S4 A; o
输出会显示:0 m! U' y* ]& U6 _( ~" Z$ M
5 C0 d7 @# h9 C- _9 m累计盈亏: xxx
9 a- L0 @5 j4 ?2 W- s# T* K累计抽水: yyy
- ~3 O6 L! E, E-------------------------------------- C8 ]7 D6 _' e* F
实例:试跑3次, ) B5 u' E$ @- `+ q5 d6 Y
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
: Q$ j2 p7 \, s9 P2 ?7 k" C最终盈利: -5360.35 % A2 a$ d& R% X+ Q( i( a4 @
累计抽水: 5176.35 # L' T6 S" x: T* A4 m- K# ^7 M
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
, T# }/ s; D( i& J3 d, e8 F最终盈利: -5661.65
8 q) M% z8 F* ?0 `2 z6 Q" q累计抽水: 5174.65
& u) |* @: M+ x6 g- x. }7 BC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
3 c* w$ u; |% h3 U8 M% E最终盈利: -4244.50 + L' K, e$ Q1 U) `* r: _6 {' B
累计抽水: 5176.50: ~1 a y9 Q2 p4 a: K$ k, O6 F& I# @
! m5 l& j! }8 v8 r Q9 @
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:- R& O: F9 [5 W4 y: N& s4 j
2 R7 n; D- I9 z0 |9 a' L
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。, q! N9 ^( j j @
) z; G$ w0 g1 f4 U" N7 N/ D W
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
( k* O" s! a5 D- C' p这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
' F7 u/ g' X7 y4 n! X1 _; r人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。7 ?# X( S- A4 U+ b' }
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
! Q8 e# F5 F/ S: P P/ J
3 q$ r j' y# H$ b( t3 q启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|