|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
( k( D; X% K5 A! h% S
! j7 T" v) C& a: U' x% V4 ~4 n可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
& c8 m& w \- ?Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
. _ G B( z0 u# S; d# o
4 F1 o. J1 n. Q在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)0 q$ }7 ?& m+ r& {" D- Y: ~4 X
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。2 Y4 l5 V+ @6 b/ [! k& N6 ?7 v- V: P. P
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
% \% Q [5 C8 v8 h, c {/ k) T3 V# c& ^* a6 L
步骤 1. 新建一个 Python 文件
) v6 `5 j' b/ o2 c5 T打开记事本(或 VSCode、Notepad++ 都行,我用记事本)+ |3 R" w. V" S
把下面的代码复制进去。$ f0 O" }- i5 O% x4 T# Q+ D2 x5 a3 n
保存成 baccarat_sim.py (注意后缀是 .py)。* I! k, q" @6 E) U8 q8 h: n% H
0 C' u8 n6 w" K
import random
: `) i2 z! g+ M% S0 s% Pimport argparse
/ C5 A9 ?/ f/ u; Y% I6 }8 Y& h/ P* h4 ?, y: j' Z
# 初始化鞋子
& W3 J) G! c O, y; X8 w2 D9 U1 ldef init_shoe(decks=8):* T# Q& g5 |/ c5 j$ n% e& s0 I
# 每副牌52张,8副共416张* r5 t3 V+ ?1 P; P( F/ _
shoe = []
- }) _) Q3 F6 W7 V* R& D for _ in range(decks):* Y X; I( ~" v( l+ d# R
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
# i$ G+ W0 |; v- I random.shuffle(shoe)
8 a3 [- r* L0 Z/ k6 C return shoe
+ n; O, U/ ~, e, \8 J8 v% n% I9 i8 R) k6 l. t4 y
# 发一手0 x% z# T; S; O0 U" [
def deal_hand(shoe):
* k6 |8 a+ f+ p8 E6 U+ b* z1 E8 H8 i if len(shoe) < 6:; B; ]! |: L. z
shoe[:] = init_shoe()5 v% s5 s; \+ |9 K- z
return shoe.pop()1 F+ [2 {6 \/ X. G0 }" O
8 i7 _2 i& ^ r1 q/ E# 模拟下注法 A
0 n- i5 i, L) Y5 sdef simulate_strategy_A(num_shoes=1000, commission_on=True):
# }7 o0 O/ P* N; Y+ } profit = 0
6 P9 b9 x5 K$ u& h( e commission_paid = 0
% j) O( m" P1 L* {3 A shoe = init_shoe()' J9 O6 V/ f1 U" Y% z! U
0 S ^/ v2 H& _ # 策略参数1 G+ i& n' q* x8 B6 R) G- ~
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
7 |$ i/ l' ~6 i# F% Y( u, X8 b- M$ ~ stage = 06 _# l7 M) M2 f" [, E2 l# a
target_side = "B" # 起手投注庄
6 U6 h1 z" d: T/ B; e5 A3 q; ]/ I6 w) J8 J, x6 p
while num_shoes > 0:
& P* ~9 ~8 n) \. E* S0 R2 ]! i9 b result = deal_hand(shoe)9 I7 i: K7 {% S; |
3 d& n6 n. l( U: y; @0 S8 _3 O6 V if result == 'T': + @0 K u' F* f) G# h
# 遇到和,不输不赢,重投/ ?: {: K7 y0 r. J
continue% O: O( S4 m% t/ S M6 T! \% \
* T8 B* m! s9 Y3 | bet = sequence[stage]
1 x% C9 |- R6 @- Q- ~ " _5 g$ A4 p0 `
if result == target_side:: G4 I$ p: c: `6 ~1 P
# 赢
' T T/ |" H( U8 H& z win_amount = bet! M* U% C" z; u% p; V! `
if target_side == "B" and commission_on:
7 x2 G5 C: g, W; V9 ~ win_amount *= 0.95 # 庄赢扣5%抽水
V" `# v# ~! t# L2 Y/ { commission_paid += bet * 0.05
7 K! M6 Z4 S7 T( m8 ]' k2 z0 P) ~& S profit += win_amount2 o/ Y3 P1 s3 p6 j
stage = 0 # reset
# z/ X) q. C7 E, m$ |( H target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定); s! w5 P8 q5 i7 ~
else:, B- h' C4 d; `1 h0 \0 u2 m
# 输! J ?, l. R, ^) o
profit -= bet
, L4 [5 u& O# Y0 Q) J stage += 1
6 I; d% M8 o# n+ p) v if stage >= len(sequence):
* @1 @% x: ]: w6 L( C stage = 0 # 断缆reset: e; b! l" U" M. J; X
num_shoes -= 15 W: x& k, F( {
5 l; ^) h' R3 ~6 ]4 l$ P return profit, commission_paid2 ~ P; Y5 u$ O8 W9 ~) n6 {: X
\( q! d% j% u: g9 Z, p n# 设置命令行解析, h! q+ J& I3 b" }! }; T
def main():
8 e& ]& X. a/ }. M2 x, L parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
/ g! q1 S6 x0 s$ g, v$ p0 ?1 B parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins."). K! T& u+ @8 L' |9 j& G; L
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")- i; M: _; L- v) P7 F) z
2 s' }6 ?/ g8 C0 i2 `7 {4 s6 ^ args = parser.parse_args()8 c6 _/ |# B3 d8 q' N- Z1 F
0 e! c4 S: o1 D: @6 y0 ^5 d8 j # 抽水开关:开启或关闭1 ~1 q& j+ V" S Z( ~: i x
commission_on = args.commission == 'on'
2 O% a4 g$ W3 V% f; J0 Z* x( C 5 M% N; Z# W0 H: o
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)$ Z8 C! V: I3 F8 N
print(f"最终盈利: {result:.2f}")
& _* G$ K/ d9 \8 i print(f"累计抽水: {commission:.2f}")4 `2 a( V5 L2 J2 X# \- P5 L' w
& H6 [" ^+ q4 B1 ~
if __name__ == "__main__":
! P% K E* J5 X$ |2 C2 O& R3 Y4 | main()
. Z1 k6 X: ]1 }- @$ L* o
) Q& t6 f( M4 S
( q0 f; M1 P& }! d( V# O( V% z步骤 2. 运行# C2 p m+ `0 ?/ [, Y
0 r, z8 u8 ~5 v7 ~$ Z9 _* N
在命令行里进入文件所在的文件夹,例如: A7 Z z( A; A+ R
cd C:\Users\你的名字\Desktop
2 K7 Z6 M6 z2 h* N6 a% E* a/ s# |, Upython baccarat_sim.py5 w7 ?0 {, M! U: S, Y% O3 B7 W
/ ` \# ~* ?& L% ^ V+ N
输出会显示:
! S( Q) ]% S+ h8 I; T. s
]' S' w' B6 z! H7 N3 }# k累计盈亏: xxx( X& N/ u, b! f0 \0 |
累计抽水: yyy
+ d( k7 I) \( c" G-------------------------------------0 f. r: T* {) { l; C& T1 @
实例:试跑3次, H3 t |' `8 A; p
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
+ B8 {' `; \# w4 ~: m) ]7 t2 d! E最终盈利: -5360.35 4 n6 q8 T5 _0 U
累计抽水: 5176.35 0 Z4 W1 [9 ?2 ~
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
" b& u. `2 y: z Z5 [( G最终盈利: -5661.65
* T. q! W$ \) W累计抽水: 5174.65 - l; P1 j1 {7 J# T+ p# a2 T" c
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 U* m: @* `/ T4 R6 V5 j, d; @最终盈利: -4244.50 4 e2 O# i4 r. K3 N" z& ]
累计抽水: 5176.503 |' p/ C7 m; u1 R* F F% V6 g [1 |1 D: E
! L* }; Y6 M* y% Z" g说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
9 W8 N" g) ]0 I, w7 A* s) K0 F2 M7 F" j. Z2 V$ u& o
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。4 i N, o# c3 P& n7 J; E3 A
0 u+ }; n! t" o/ {) v最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。- \' D+ b1 K0 W/ ?7 N$ K; c8 T- a! @
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。7 ]9 ?4 L' e. h+ O9 g
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。/ ]5 X& P% O) x% j2 \% G
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
' d$ [: ~+ K( z; v
2 I" u; d) x/ ]. L% Z+ {/ h启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|