|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 & F$ |% F+ E8 B# n8 \1 |3 W
+ R- I% t( F. u2 _3 ~8 a# r; f# n可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。 ~- d/ Y" n5 y9 ]
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
- s4 Y- |5 U% U0 p: l. U) m1 k' g4 q% f1 m
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
$ i3 [2 r6 K9 ^/ m! |3 F. Z5 F" r假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。! K6 m3 I; Y$ R/ q4 `
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
* k' l) g o8 y% T# g$ _9 M t
7 n0 u' y" M) ?+ o( ?6 V; B步骤 1. 新建一个 Python 文件
. u1 z0 u# T1 M6 e7 q7 C! p5 Z% B# I' t打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
% B) z& A' W3 `, z; }把下面的代码复制进去。
9 d- g2 w0 _2 J: k5 e保存成 baccarat_sim.py (注意后缀是 .py)。4 y1 o: U0 _7 o! s6 l# T) l
' b! l( M7 j: g" g. f
import random, |7 k }* q- J" Y
import argparse
% _. g$ j( M* r7 E% m
1 ^7 B ^$ d3 R* c# 初始化鞋子
3 H- L/ z' h" m) H& \& y. S* bdef init_shoe(decks=8):
( E7 Q) A# W7 t # 每副牌52张,8副共416张% W( y- y0 Q% ~
shoe = []: ]+ i( T- G5 ~$ R8 H
for _ in range(decks):' ^6 ^5 W2 [; B4 D; H
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
& X$ h0 }3 D4 z1 S: L4 b/ S8 w random.shuffle(shoe)
, ~: d" l/ @; F/ i' g6 m9 S0 V6 K return shoe* Y# z9 j7 x/ }" S4 P8 V
- a. U( Y4 V a0 }! p$ j5 X v, r# 发一手
/ A; f& x# W1 o N( Vdef deal_hand(shoe):
% T8 H0 w4 E8 [2 L4 j8 ~: |! m" b if len(shoe) < 6:
$ O4 O9 D/ Q% Q shoe[:] = init_shoe()
) q; d3 Z/ g. G( N$ F6 ] return shoe.pop()! q Y5 X3 l _, w+ C1 I
( E; Y* Z5 t, S! \* F" k
# 模拟下注法 A
. @1 S' O* R0 O. z" g( \6 Tdef simulate_strategy_A(num_shoes=1000, commission_on=True):
& w) q9 e9 u; K9 E- r# l profit = 0+ U; J% x% K" K8 L/ @
commission_paid = 06 Z$ S% O5 V% S: @
shoe = init_shoe()
$ D$ v0 m3 y: e7 k( T0 g 5 j- l2 ^. F9 L. [" `* _* Z) C
# 策略参数
+ _6 D* h; i% w6 R sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
! L1 J/ S4 n2 h8 B3 k stage = 0
) k0 K6 Q6 J- j1 z: i target_side = "B" # 起手投注庄; \* y e2 t8 b% z/ f
, _" s4 Z8 h' Q* ]
while num_shoes > 0:
. X" _1 T+ G( o, [, A {6 | result = deal_hand(shoe)- e4 J' B: D, O7 p* B
$ {9 R* c/ N* |7 S- V
if result == 'T': 0 V. L, }* M1 ]$ H( m; F
# 遇到和,不输不赢,重投# Y0 P( ?9 M9 T; j2 ?
continue
+ ` ^# `3 u/ r2 a! X
2 Y( D2 f% Y/ Y; N bet = sequence[stage]
1 b" A3 p& y" s G, r7 U I
4 A4 M( p0 O* g2 l" l% Z3 s if result == target_side:
4 ^7 w( _* T" e/ M% f1 }4 s1 z" K # 赢
4 w/ Q3 @3 J* a. a" ~3 g, J win_amount = bet
) P" z. i! t. j if target_side == "B" and commission_on:
- ^2 l* J6 [! U# H" r4 E5 F* w win_amount *= 0.95 # 庄赢扣5%抽水
+ e" N* l; P6 [# x commission_paid += bet * 0.054 t1 m% P9 y0 {5 y
profit += win_amount
( W. K) V t- J, B1 d7 ~! X; E0 c stage = 0 # reset
/ L' C- P# b: m/ @) e+ U' N) I* @: y target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
" r2 O: t$ t4 v- S1 d else:- o5 F) G- m3 g X$ z
# 输4 h+ f( g! w+ M4 J8 {2 U
profit -= bet
. e' c" s/ T2 \. x! T% u stage += 1
) X( O+ x: [- t( K if stage >= len(sequence):
- B/ L9 s2 W- q. L stage = 0 # 断缆reset% A, R9 C% T- ?( f) G
num_shoes -= 1
H4 R0 K; u. u: v6 A8 @6 I3 m* G& z& e2 b7 M
return profit, commission_paid1 i N; Z$ [8 r8 t. ~$ |) R' ]
) W0 o- y3 A9 _) c# 设置命令行解析+ p/ z! l H7 x. d. ~
def main():: K l( r+ b# l& ~
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
3 V3 b/ ^" y: c+ Z7 v: _ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
( x2 {# F0 j& x. H' r( B parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
, y0 P# E% i7 {' J
# {- ^& c: z7 K) T; ?# U: h args = parser.parse_args()
) Y! f4 m5 F2 }: \1 } . ^1 z# w% U1 l0 m
# 抽水开关:开启或关闭
5 W2 U8 O( ?" J3 G commission_on = args.commission == 'on'4 Z9 s0 P* d" v8 o1 s+ @- M
5 a. R. G8 G; f
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
1 L( ?" B/ L# o& d( d7 p7 o9 q2 O t$ u print(f"最终盈利: {result:.2f}")
7 A/ [" f" U$ i3 O0 B- b print(f"累计抽水: {commission:.2f}")
, L/ M' t" p8 D, R
# T! V u: D6 E( h! kif __name__ == "__main__":3 h" d+ o" f0 G8 o0 t" _; h$ U
main()
/ h5 N1 _, U" u* [0 B: C9 {) h6 n; A! k6 u! R1 b( o0 W
v* C5 q7 {4 {7 `% P
步骤 2. 运行: f( M4 @0 [) V( M+ X) d: f
" l2 ]* g3 n( }
在命令行里进入文件所在的文件夹,例如:7 ?+ M0 p' y0 d6 N( `
cd C:\Users\你的名字\Desktop1 g& k1 {" E* [4 h
python baccarat_sim.py
7 X4 H4 v- }& Z* `8 ~# }1 ^# e9 y2 c# O, H
输出会显示:
$ @ z6 s0 r( U7 f$ m; z6 p
( L& P. W- r: S! p1 f累计盈亏: xxx
% J j5 N; C* O3 e7 y$ [$ Z/ a, U累计抽水: yyy! e5 G% b" L; |& N
------------------------------------- P; E5 P v6 c$ q% c2 d' j6 f
实例:试跑3次, ' C" X& ?+ H" A; ~8 U6 S
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
8 \, m' p1 C" m- D) j6 b2 X6 y$ {6 W最终盈利: -5360.35 9 ]& m L$ @& {9 g/ j
累计抽水: 5176.35 * P2 }* _* q2 s- b
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py + ^. n0 z9 J+ j
最终盈利: -5661.65
h5 f( v- L$ I; u6 E4 N+ Q' z累计抽水: 5174.65
0 L2 R; ?5 j- H9 }C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py - k4 i Y5 d( j3 N
最终盈利: -4244.50
' l, k) J( U5 } d ]累计抽水: 5176.50! h2 X- t# j% T! o- I
4 L3 l" i1 o# r8 s" Q
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
. n6 [/ `( o7 X5 V2 k3 K' \7 q: o% L' z( K! n" z5 N
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
, {4 X" X3 V# K; e. m7 f; u8 d% E3 t( v
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
! b9 b3 Y; B5 p) P$ }- L: @1 r这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。 w% Z5 g2 [' O v) h
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
1 v9 G2 {8 V+ n j1 @& |但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。2 P4 R: Z9 p4 R" H1 S% ^- c6 J
. A4 |2 v% E& I% `! w9 ^5 R( M' \启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|