|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
! T$ W p# s: [$ w" R' ^ s3 U6 Z% m- U4 m, S
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
0 \3 i0 r4 e6 W/ G) oExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。% |5 t2 R' C( `1 k! B, C5 V
3 x- g3 f2 {& V. n. ~- r在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
" w# C1 N* B( [+ R) y8 c# q假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
$ ]4 h( |: Z5 v# x. C先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
7 u7 X# K* r% @: Y) M
/ n) G3 e( h* I7 F' a( C步骤 1. 新建一个 Python 文件; E! t) s! c# C) g8 n
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)" q, @( g! R: ~3 t% _
把下面的代码复制进去。/ u% `: R- e3 X* ~3 y
保存成 baccarat_sim.py (注意后缀是 .py)。
9 M( s4 q1 T4 ~: V: I2 j* s o4 ~
) q# y. I% d# K/ Mimport random
+ e! |& L, c7 x m# Rimport argparse j: X* y- N' S8 e- @" `
) x. }1 B" u3 C- X: W3 \! a# 初始化鞋子( _3 J; x6 J& `) D
def init_shoe(decks=8):; b3 _4 k# N6 e. v' |, B
# 每副牌52张,8副共416张
* ^+ V( x: i* m% y( f shoe = []/ U$ Y3 e) A( `) \6 ~4 J
for _ in range(decks):
; U$ U8 w1 x: I5 |+ b z8 \& q shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和45 |4 E. C. |; i6 N. Z
random.shuffle(shoe)
8 m* G+ M, ]' a8 {. w return shoe" D5 I- f; `' {2 `
- R5 ~" U& \, U: z
# 发一手: @; Z! q) ]/ _. X/ v& n
def deal_hand(shoe):
0 g( D3 \1 U+ u8 S" H if len(shoe) < 6:4 F; C) M: `2 ?( l. _
shoe[:] = init_shoe()
$ R, Q9 j3 I- c1 i! f' R" d return shoe.pop(); o2 G- z( v; C3 D4 V, J- H1 v
' x. V: ~; [0 I1 W+ E7 U! ]# 模拟下注法 A
) U6 l3 ^2 V3 K* z0 d+ Z5 jdef simulate_strategy_A(num_shoes=1000, commission_on=True):
7 Q8 |, k& ?( ~+ @ profit = 0
! J2 |+ S) i2 ^' Y9 G4 k commission_paid = 0& ~9 t% c7 q0 H& e- Y5 _
shoe = init_shoe()
! v* i4 ~( E0 Z, E* a# @5 Z
- I( O- x1 |% c! Z1 a # 策略参数2 y3 A7 X" J: h5 v( B: L
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
8 s" \3 |; J/ j" n stage = 0
9 W- I' N4 `+ M$ y" `6 o4 v5 ^" I- P target_side = "B" # 起手投注庄
$ J7 O% M, j" F7 S6 D) K! F7 h' ?
& s' }* a( W/ {3 O9 |% E" T) [ while num_shoes > 0:
2 p2 q+ Q$ A9 K7 k2 p, @" ~6 o result = deal_hand(shoe)
3 |$ q4 ^) Z# j6 m0 R3 @" M) {: a2 j+ Q4 w8 R; z4 e% }. s
if result == 'T': : Y9 t9 t! b) Y$ c, ~
# 遇到和,不输不赢,重投
4 M3 q6 u$ M! ~3 Y- ? continue; m5 @$ N: N) u; Q5 m
6 `4 M, q9 s8 K& k bet = sequence[stage]
- P Q! _$ X( [' w6 ~# v 9 |; {( v# B/ p& |1 [$ {
if result == target_side:" L3 M+ {7 Q* l( N9 U
# 赢( Z1 l# A: P& x- H
win_amount = bet8 B; X* y2 m! L
if target_side == "B" and commission_on:
5 ~0 P {' `6 l& p win_amount *= 0.95 # 庄赢扣5%抽水6 p T/ `# q# |
commission_paid += bet * 0.05
I e: u- W* m0 e1 J9 M; t profit += win_amount- F8 Y# I6 k A# O v; w3 g+ J" O# |
stage = 0 # reset) j2 r1 g: F& T/ T: F* P" _
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
- \. F# W9 A* r% O% F else:
2 X4 S3 y" M: x ~ # 输
$ O( w, ^+ o, s- t, y! m profit -= bet: n: E$ {( ]/ X% ~, L
stage += 1
) C9 i+ M0 j& U! `: P% w2 g: n if stage >= len(sequence):
# v" T7 \; M, _0 \4 p stage = 0 # 断缆reset
: q" e# x1 `0 e2 I) }- j num_shoes -= 1
% v3 A6 ^ r( v8 q+ z1 w. V0 ~' u5 Q1 J" Z9 J4 y8 h1 F
return profit, commission_paid
/ S) ]2 V4 O+ Y H' f0 f. I5 d7 F! r& E" Q% Z8 g6 i! l4 x
# 设置命令行解析
! Z: O K! D6 O6 Odef main():
/ r8 r W( O: @! e. ?6 G ^: Z parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
; R+ b3 A, x" ]: N# i9 G parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
8 y6 b0 M/ F7 k( K parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
- C/ q& \$ N/ {0 ^3 U. e + J. d7 ]5 k* s7 T
args = parser.parse_args()
8 L* h+ b1 b0 r, q. u. M
) {% Y; n" ^/ ^' J# U: \ # 抽水开关:开启或关闭2 }% p/ s1 i) y/ `; h% B3 F/ @
commission_on = args.commission == 'on'( e: z; o+ ^; `3 G' H% b/ n
# |2 {* ]- ^. J- b7 a8 p! F" w: g result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)! Y Y7 ~/ O7 ]8 F5 _; b
print(f"最终盈利: {result:.2f}")
- t1 U# }, V8 o print(f"累计抽水: {commission:.2f}")
4 m6 J1 D: Z& R4 Y% }2 w$ G" G" F1 ~: u4 q1 N& Y- T9 n
if __name__ == "__main__":. w/ q, G- Z$ a2 d& n/ ?0 ^) L
main()
* o5 b- p5 B* o) J x- }+ ^" e. F. f) c- ^2 \
+ M) E: T4 [, }. ~1 ] I R步骤 2. 运行
/ T( o) O1 A8 n3 d
# t/ ?1 q% }; \* v# T/ Z3 t在命令行里进入文件所在的文件夹,例如:; f, a0 y' R1 `* ?& b/ j( `
cd C:\Users\你的名字\Desktop
, ^. L) U, U( m, R! p: |python baccarat_sim.py7 [6 I2 a1 ]5 W) A( e9 [! w
4 g ?& Y. J/ Z1 d输出会显示:4 U# u& F6 N; r0 X& A" X; O
' W) [8 q R! ]- k$ [
累计盈亏: xxx" _7 }, Z/ O3 N5 S% u& r w% F4 z/ H
累计抽水: yyy
4 ~# y' Z5 g a9 L-------------------------------------
* Y. c: E8 p( b6 [) }; Z4 d! n实例:试跑3次,
/ z0 H! Z3 P. z4 b! w" M* rC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
+ b# K: @! e* j' ?& o7 R2 G- D最终盈利: -5360.35 2 F9 v9 `& X6 H$ G% V( b0 v. h
累计抽水: 5176.35
* T: Z; f7 ?$ \/ Y4 R) }, iC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
& _1 u+ d- x0 w* o0 I# w8 W最终盈利: -5661.65
+ U- _8 @ B% I. _' w累计抽水: 5174.65 4 W/ P+ f% w+ k. p! M+ l
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 4 d; x' G6 x# P8 m7 p g% h" A4 W
最终盈利: -4244.50 $ t5 v& [% ]" {. f' F6 Z8 e) M7 ~
累计抽水: 5176.50
% _9 S9 {/ b' ]: O1 g+ m0 f! |
; E( }, j' v& a( d( }, h9 [ Q说明你的 Python 已经能正常跑模拟了。结果也很有参考性:: Q; \$ x* P* b8 t' l3 H
# J: r( X& ?) Z累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。$ p L( [" S& z V/ }" `
6 r: e, P3 R! @, t1 N2 ^最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
5 g6 v) c* Y7 U; ?3 ^5 i) P这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。! v) H8 N, F: g# R+ K& i
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
# t7 i% v1 {2 G A8 b但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
. W! p* Y- \6 P# _ @+ }& }2 D% U% t+ Y3 N/ N
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|