|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 ) f6 n. p. o# A) e) \. j J9 h( ?
$ J( U8 ` C& s5 O; B, ~
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。! T) f2 t! U/ E8 M0 x' f
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。7 [3 ]- A# K* ?/ ~* s& z, q" H
9 G- W4 x) ~5 \& Z1 T/ \( C( \4 ^, S( z在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)) Q1 W* T+ }4 J2 T, o9 ]0 X( z: m$ q* }
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。/ R' m) ^7 e0 a3 q* l E6 a# u) S
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
4 w; ]8 r1 O9 R7 S; g. s; N
5 m) J1 v5 u) C/ I% n步骤 1. 新建一个 Python 文件/ w! n! {0 t0 [2 n, S4 T
打开记事本(或 VSCode、Notepad++ 都行,我用记事本): y4 f4 c0 o7 X1 n: Y# Q
把下面的代码复制进去。6 R, O% F" t7 g' d
保存成 baccarat_sim.py (注意后缀是 .py)。& X+ |8 k; e/ R3 E: Y
$ V* e) Q* V+ r2 o9 X1 d4 l
import random
- a9 Q+ V$ _$ q; b: ximport argparse: i, g8 p7 a$ z( A$ W# w, s) r
# C' F. R1 k6 _2 p% h0 V# 初始化鞋子
% c. r! O7 b! y: ?def init_shoe(decks=8):
6 K/ O' m0 n5 n' | # 每副牌52张,8副共416张" t8 w5 Q5 k% ?9 l+ y
shoe = []
: |; w: c" |- ` v for _ in range(decks):
' H0 s- a# g4 |" l" x. y1 P4 ~ shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4' B% y5 N: l2 U" _+ x$ j4 t6 d
random.shuffle(shoe)
) i& G* B2 C, V9 i2 M return shoe8 s |: i* T I6 _3 c
; I/ Y( g0 n: l3 l# b) b
# 发一手
& J V/ j: D3 }* O, T* k- mdef deal_hand(shoe):
1 i, m! d& B5 {5 h A if len(shoe) < 6:; k9 T) G8 ~( V# ^. T
shoe[:] = init_shoe()" l% o/ f# ]) B" s) [. v
return shoe.pop()
3 N6 \5 T4 n# M2 A' I
: ^& s& d+ G) a6 `, ^5 w# 模拟下注法 A m6 ]6 z Z0 O9 ~* q" [ Q! b) A
def simulate_strategy_A(num_shoes=1000, commission_on=True):$ g. t" Z8 R" o9 U2 r% d
profit = 0
" F( I6 U, V+ a4 B3 W, v5 w- D commission_paid = 0
! ]" ]- w7 u1 g9 V2 }( Z shoe = init_shoe()' \( E( F) z% f$ }. |! z4 ^
5 E7 K9 V# \3 i4 G, _! J
# 策略参数
8 h3 h T2 V; z& g N sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级. g ~& y1 j3 Y4 \6 X* ^/ P
stage = 0
2 w- f J3 ]& e9 d, a3 | target_side = "B" # 起手投注庄% ?! i; @# H/ S* _, U R
; p8 _4 j) ^% K$ y4 L* G& Y while num_shoes > 0:
; Q) y7 Q* E) t7 r5 f$ _ result = deal_hand(shoe); r8 ~1 t( ~$ u9 I6 _9 G
4 z% x' `) a; A
if result == 'T':
0 D( A/ F9 J. h1 M( g2 g # 遇到和,不输不赢,重投
$ }* ^# [8 ]. N; u% E, d continue5 n5 \/ ]* a& E' h- ^0 u; ~- v
. P" z$ H% B9 E8 |
bet = sequence[stage]* T! T6 d0 H: E5 H Q8 W+ ]
2 ~* {/ ~9 R: E0 H# x
if result == target_side:6 `0 B* L I6 X6 m/ P& s
# 赢6 v. N: c! O% J6 W
win_amount = bet
1 D g! ^4 w. Z0 p& v" Q5 i. i. x if target_side == "B" and commission_on:
6 H; E% Y. K" q5 w5 g win_amount *= 0.95 # 庄赢扣5%抽水
5 v9 c" ^+ v" J: K6 } commission_paid += bet * 0.05
/ o: s+ Q' |$ E: c) p+ x profit += win_amount
# d/ f9 n {: } stage = 0 # reset
) j& `6 e, Z, ^8 [4 i3 s/ R% V0 v+ b8 E target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)" w6 T; f" n# x
else:6 a) E G' c' T" v
# 输
- r% h% H8 P9 ~ profit -= bet
) F5 Z* m4 ?- ^2 s o stage += 1
+ y. U; I4 F' L/ X9 i, m% k if stage >= len(sequence):: d2 |4 y( j/ M5 v+ s" c, T, d8 B9 \% U
stage = 0 # 断缆reset
, D4 `, C3 s3 e* Y* B9 ^3 W, z4 \ num_shoes -= 1
& j; j* A- l% X' ]% p+ K5 l
- m4 O0 N3 Y+ T# w/ n; @ return profit, commission_paid8 H4 I- @/ `0 f, `$ P! L
1 e2 g. r( _( o+ d# 设置命令行解析
0 X$ v+ T, `. bdef main():( v: ~' Z5 ?2 I& w6 `$ s/ Q
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off."): m7 b" l V) n6 N
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
" B9 u; O6 v# b4 B4 [* d0 O) M; | parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate."): `6 [( ^9 L% \% F: F, b6 h( W
, F) W. U+ _2 v: x% e; O args = parser.parse_args()
1 M, w; B" h3 [9 v9 z! n J
! }' n* |' p p4 t: H) ^4 x" b # 抽水开关:开启或关闭
$ U" h. b- N" q8 W2 I0 d commission_on = args.commission == 'on'
# P+ ^! v1 l+ q) q+ B$ @
" I0 u* ~% _1 @6 \, i) Z3 m, l result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)( K8 O( U. x' L2 a1 F8 ]! c
print(f"最终盈利: {result:.2f}")1 X% p' e3 x9 B" x$ y
print(f"累计抽水: {commission:.2f}")
- s- \3 T' X' t1 R6 f
! m. B& f) T* c3 L$ kif __name__ == "__main__":
+ B* k; f' v1 E, I main()
) I, w# w; n# i5 N a! u) G. q" g% h( q/ w. p: w* R" D
/ h, s( x# h! K
步骤 2. 运行( n( q( r+ l; @$ o3 _: M4 ^+ d
2 z% Y2 O( V% W, Y; z/ ?0 z在命令行里进入文件所在的文件夹,例如:
- R9 l# m- Z) ]cd C:\Users\你的名字\Desktop
; a) A9 M# F1 b/ w6 @; C+ u3 U9 apython baccarat_sim.py: ^' v' j, o$ {- [
) D' X% N3 Y7 ]3 R. q9 ]4 q输出会显示:
3 h2 t3 E& U' C) d9 R, e6 {
2 D9 o* d) O5 D) n3 {累计盈亏: xxx
: X- f% N9 U- n( [6 }累计抽水: yyy8 f& O$ U2 E9 r, |4 E& e
-------------------------------------
0 B$ V( m& b( e3 A/ o S D. I# M; H$ \实例:试跑3次,
7 S- |* u( d1 ]+ TC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py . c' f( S. _, P3 e8 X
最终盈利: -5360.35 8 L% I2 x7 A1 _7 F- U+ u
累计抽水: 5176.35 " i: D2 y8 K( i1 s1 E
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
7 t. H' c+ V& R) Q最终盈利: -5661.65 8 T: b! Z- q5 Q8 V! G4 W9 j
累计抽水: 5174.65 $ S& f# f1 d4 r( b+ a
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
' t" w X& ]7 k# ~; I最终盈利: -4244.50
' T; F( a. F' a+ C累计抽水: 5176.50
( G' f9 @! z* N( y# r1 A5 s
; A" Z8 }1 [- w说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
2 R, }" z, a+ J
# h. E3 }, m) g( x7 [, S累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
/ ^7 }. g% s, m. l9 y. D, A& ^$ Z5 ?( P5 e3 J8 T$ k
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。7 [' _0 o* n* |9 X% V. v/ w A- t( o' R
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
' o& @* W5 X# V" _0 f9 H人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。0 T! M+ {4 F; S" y
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。5 y" t6 O3 ^( a, A1 ?) C% S
" v% r0 l+ F% c7 R
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|