|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
7 S& Y7 }3 L0 W: B1 v; D( `1 Q4 T5 |8 }* {& d
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。. B0 Z+ A; b% |% f b" S0 h2 U
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。2 F/ [" q' s1 k1 o- b8 b
& C$ Y* p) F8 v- q/ `1 W
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
4 q9 d# r. r i6 G6 a假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。: k p7 J9 @# o/ W7 @1 R/ F
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。3 ]9 ^1 w P8 j: L" U7 U
2 S. x& a& \8 p" E% |' A8 l# \步骤 1. 新建一个 Python 文件
6 z- |; c L# T' `- C% x打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
9 i9 Q5 G" ?0 L& Z! v8 l把下面的代码复制进去。/ a9 J9 B c, a; r" Y! ?
保存成 baccarat_sim.py (注意后缀是 .py)。
. u7 f G* J0 ~) A* t' {" }+ {8 w% W; {/ T- h1 ~! z$ ~: w
import random8 h# ~# a2 |3 J2 x6 ^4 f
import argparse
$ K% w) J+ Y/ [- s2 L6 i6 A8 X# F( L# Q7 e% y5 u7 o# C
# 初始化鞋子' o3 u1 ^0 `; H6 o. @/ [9 K5 M
def init_shoe(decks=8):0 b. A$ o u+ ~
# 每副牌52张,8副共416张
@" k! x) U- e0 e: z7 J& Z shoe = []
1 b. s8 M; ^ l, A/ r4 i. L. T, R5 ? for _ in range(decks):
+ N& o8 w: Q- }: v W4 V shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4 y8 b( S5 L% s( I
random.shuffle(shoe)6 [/ D, g+ @2 l9 i S
return shoe( c; D+ C9 w6 Z' ?
/ u ^3 \5 |: Q8 y5 j; N$ u) R7 ?# 发一手
) r. c# z" n1 g, A5 v0 S- [def deal_hand(shoe):/ [- G' ]- x, _
if len(shoe) < 6:
( l) h! P& R3 U& U8 o1 D shoe[:] = init_shoe()
4 n6 T) @3 W: X: w, [5 T- J return shoe.pop()
. c$ }1 P9 ^) D' e
* ~2 Q# j/ ?3 H# 模拟下注法 A+ _) W8 B1 g: K7 Q% T: |+ r9 r
def simulate_strategy_A(num_shoes=1000, commission_on=True):
7 ^- a5 b9 ?9 y' j/ e profit = 0
* n) k6 x3 v5 r. P) p2 t: N1 b commission_paid = 0: S' w4 _. w: L* W$ r8 G
shoe = init_shoe()0 H# H% X, z a* U
7 A; q0 ?1 o, b0 f* r* q # 策略参数7 u6 Z5 N; P! b1 z2 Y
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级4 a5 v) k h$ L# M' a$ l, T
stage = 0" H, R$ t( k6 C1 Y& E- Z6 v8 z
target_side = "B" # 起手投注庄
+ v4 L S) h$ t" ^0 m3 t5 E% n" \) \5 U! v
while num_shoes > 0:
# D. u5 m8 Q3 a! a) `8 j0 O result = deal_hand(shoe)
8 B1 q. f0 k: a+ w! ?( G# V
7 V+ V& ]$ d6 |* l% j- [) J; L if result == 'T': 9 m# [6 I9 q* s3 _+ r: ~
# 遇到和,不输不赢,重投
9 c/ x/ i b5 a1 b' J6 G1 z9 j continue
. i; p$ o4 R$ s" E9 ]# E9 S0 v( b8 N2 m, l1 e
bet = sequence[stage]9 c* Z- y3 ^- s
2 h4 G, T* T3 N( z! R
if result == target_side:/ _' g! G# c: i& e% {" v
# 赢& [5 i1 y8 ?. }! C: M4 T2 D. m* z
win_amount = bet- l; `( E+ U# |: U$ z
if target_side == "B" and commission_on:3 p7 p0 A. S2 ?3 X4 Q# S% R
win_amount *= 0.95 # 庄赢扣5%抽水6 D0 q3 ]# v# l5 f$ V* T
commission_paid += bet * 0.059 ]% g/ S& N5 `( t' I1 r: u, y
profit += win_amount
' R( L( g. o+ H8 }) W stage = 0 # reset
# Z2 C& I( Z* Y target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)! t7 n9 t+ H8 @( J& z& J
else:
0 ^: H# P/ n- E7 ~, w7 }2 J # 输: _6 v" s" O6 E
profit -= bet
W4 C' p1 [% K& E2 d+ R' q- a stage += 1) L$ j" S" `% D* W1 [: W/ M! @' b
if stage >= len(sequence):
- C# a L' u5 T& E8 V2 n/ [+ L stage = 0 # 断缆reset' E% ~% l1 j) b0 ~: O
num_shoes -= 1( y4 @9 T ?8 j$ `9 A' c
[6 Z! k( P9 R. j) G; t8 X
return profit, commission_paid
! {. ~4 q+ D- D6 ?' Y+ V7 \; r3 t& } F
# 设置命令行解析
/ b" m ?2 x9 G5 w0 l8 ddef main():; t% I$ ?9 d/ o4 A# _% G8 N
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
# q' O$ U3 K; U( S* f8 l parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
: F. @# E9 r9 G( P! a parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
- b5 q c9 w! E$ S5 u( S# v * N$ W& D+ x# D
args = parser.parse_args()
9 ^: C0 J) Z5 e* C6 ?& L7 ]
' H/ O3 m* S M: [ # 抽水开关:开启或关闭
* S; k& O; Z' G4 n N: X' v commission_on = args.commission == 'on'/ ?* j7 l' Q, e% J
Q0 v- K- [3 S% L) P1 a7 f2 u# X result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)2 \6 \8 G9 [- G7 ]8 Y& Q
print(f"最终盈利: {result:.2f}")( i. [2 n, e1 x; j6 F3 G
print(f"累计抽水: {commission:.2f}")
9 S1 E/ z2 F& X+ P# o1 ~5 ?. |0 }3 ~8 S5 Q) l+ |- c6 k
if __name__ == "__main__":
# `6 q# N# Y4 d: S4 M) f main()
6 }2 T, S2 O, {- K1 Z, l1 ?% F3 r8 o, S2 h
& {4 \5 `& ^1 ~6 i* X步骤 2. 运行
# x$ U$ r) x! a( |- G! b9 x1 W% e6 N* z: u
在命令行里进入文件所在的文件夹,例如:: @. j: m" A1 f0 }$ O+ l- X" w
cd C:\Users\你的名字\Desktop
# v9 l' S2 D2 w( v9 Xpython baccarat_sim.py) N$ O! [: @* J q9 c4 T
& M% s% ]9 Z, K& @% q" K' \% A1 i输出会显示:% r. \4 j# I! R3 ?* f
7 L1 @ r2 C" @ Z累计盈亏: xxx
1 k9 _! a7 X' M. T, a3 u( ~) X- _% b( }累计抽水: yyy! F0 D4 a) W& h; D: a! e
-------------------------------------
! f7 h1 f( H" }实例:试跑3次,
* z& b6 b0 E3 u1 j( _% lC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py : Y5 N" z; n7 P! k' ?. I) s a
最终盈利: -5360.35
/ b, G2 ?' w! _, L: l累计抽水: 5176.35
9 p1 @9 h/ Q1 Y; MC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
' u, s+ Q/ A; j0 W, s. @: v" T最终盈利: -5661.65
" C" j+ a* @' _9 T6 F/ J# L) K% i; ?累计抽水: 5174.65
3 ~; s# V, Q1 r% w: Y& _C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
$ r( t; B6 d/ Z* X% x- H最终盈利: -4244.50
" B3 F! _1 ?' ?6 @累计抽水: 5176.50% t1 ~% v: I$ ^
6 J- a7 L6 q; L4 D6 t5 A说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
& H5 [5 s; |7 t/ | m
1 S& M/ ]6 F i; [9 `累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。% _6 H6 u- c7 p
' v7 z+ h% q* i1 b) k6 s. E G最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
- r' D+ U! J7 P/ Y8 ~8 J这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。$ c1 m3 W& W- U' a; H
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。 ?( g) c4 i1 i" ^6 d" c
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
+ y' ]% r( F& f, {9 f" }' i, v* i' U2 }& B5 [3 x( ?" x
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|