|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 9 T! {# @( X" Q; L
4 z/ I6 L, _$ u" y可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
. H( B! q5 }1 V9 z& fExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。0 c) e) j7 o1 |( h$ [8 T. F$ h
2 l( i$ ^8 H) V; E* p/ a1 a- V1 L- m
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)% Y& ^) ~) t2 {* W' n3 c5 m
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。; z4 Y5 m0 B& O, z+ L
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。8 t* V# l/ o1 O. L0 ]3 Q, g; R& q
4 |/ X" ?& V& q9 {" w$ x! J# A6 y% L
步骤 1. 新建一个 Python 文件
& w& R$ i2 o) i打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
+ a3 w$ p' X$ [$ Y把下面的代码复制进去。
+ F; q) i' Z- B# ]! M5 o保存成 baccarat_sim.py (注意后缀是 .py)。 S, d* I4 q2 x5 q! e, k( T
& C: h% U6 f6 I+ x, |: ?. A: ?
import random& ?! E) P, a$ _$ {2 M0 L9 R% T
import argparse
2 y' f# e4 ]6 E y( q8 Q2 t
! V/ @/ P6 k( u& j# 初始化鞋子
/ u4 m. t6 e2 q4 Odef init_shoe(decks=8):+ P# Q! g! ^5 N/ X$ K) g0 Q
# 每副牌52张,8副共416张
- f8 |! O9 H3 b( w shoe = []) q. n6 n2 w0 l: O2 `) Y* S& D
for _ in range(decks):$ S+ M' D( r! V. K
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4. E& n( O- n/ u) ^. K
random.shuffle(shoe)
# S% g" k ^! {! Q, f2 T return shoe
; q( s' z5 Y! d: v% g6 [
: u; b9 r: C7 J# 发一手
: `, d, d' L" j' f8 Z$ gdef deal_hand(shoe):: D' X* k" T' ^& D- l
if len(shoe) < 6:9 o1 j3 a- L7 ` x7 R3 h. e. P
shoe[:] = init_shoe()
. h. C u# u! l% E return shoe.pop()8 _0 {1 r& W0 y
% P1 C8 J3 C) H' E- O7 I
# 模拟下注法 A
5 {0 L; O" H1 \2 @( N* n8 Ldef simulate_strategy_A(num_shoes=1000, commission_on=True):0 V/ a# u, s. H* n3 h
profit = 0
, k; q; c; ~+ [ commission_paid = 07 ^& T, l8 S- Q" J: ^) p* E3 f
shoe = init_shoe()
9 ]! M! T% @+ ~ c
4 i! r8 }2 U- p8 b2 A2 i5 Y # 策略参数
: o( d' F. b" Y- q2 h" u; T sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
* J2 |/ L. J4 g5 K stage = 0( b+ B5 x/ t3 V% q' I; b9 T( }
target_side = "B" # 起手投注庄
( Z* r E2 j# R4 i' o& r" I% v$ [7 @
2 v: B) t9 _2 J2 A8 I. x/ u# c while num_shoes > 0: |- T. P2 Z$ @. ~( O
result = deal_hand(shoe)
2 J8 Z* ] r: J/ O! y3 i
" v8 F) L* U+ m) N2 ^+ ~' P# l3 l( ? if result == 'T': 2 c; m3 J- y" r, u: |5 F
# 遇到和,不输不赢,重投4 h1 e* j0 X3 n3 m/ `4 D! Z
continue
7 [: j. K* i1 x
: Q( u; b; D/ A3 S9 p) f bet = sequence[stage]* I1 }/ z) ^" {3 W' o1 d
6 a; O" c8 m* X; s1 t! B/ m; j" E# s if result == target_side:
8 W) T2 N! M2 A, K' h # 赢
" M* R/ D0 z7 I5 A& V# w. y. d win_amount = bet
" j4 S7 |7 }) @; D. q if target_side == "B" and commission_on:6 p, W' T$ X* w5 t
win_amount *= 0.95 # 庄赢扣5%抽水
! |& Y" @' H! W+ v1 z8 T0 i commission_paid += bet * 0.05
; c+ s/ h3 a) {5 y" [ profit += win_amount* i' _0 K% m% `; ~* n, e( ^, m: A
stage = 0 # reset
* Q, |; N0 z/ E: b target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)" [" y( b" H0 U0 D) ^
else:
; r7 Z9 G( s+ l # 输* t. Q+ J) Z8 }* V1 B' ]$ B# P: B
profit -= bet
2 Y1 e$ d8 \2 w6 p8 L stage += 1
5 s9 w! j* g0 Q4 n s8 X if stage >= len(sequence):
. k7 d/ y* i7 b: x" S# b1 A: e1 N stage = 0 # 断缆reset7 J4 [2 j0 M/ L0 D% z. u
num_shoes -= 18 ?& m0 T/ v- F
( b5 R5 Z0 t" K. y6 O; v
return profit, commission_paid
* a8 B- L/ [1 F4 |8 G: d2 [0 ~, b7 ~9 X% J( m, }* L
# 设置命令行解析
' `3 c) I/ P/ _' edef main():
/ B# u- o9 C& u1 ~0 O& B parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
7 d& z$ H2 I( j* v# L7 Y m parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
" Y6 C9 z$ M9 g4 l" a parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")+ h+ A2 G" a" Q2 Q5 C5 E
! A( ]$ U: ~8 ]3 y* H args = parser.parse_args()+ ]# {5 P' \( u: Q: z
+ P8 f4 p& c- K* V$ f
# 抽水开关:开启或关闭
5 ~4 g1 m4 z+ t7 `5 {# t0 I commission_on = args.commission == 'on': _; L3 L6 _4 }- ?
3 X" H3 O0 S: \+ W8 g
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)9 D. y: q; x$ v) M; {$ b; T( j$ z
print(f"最终盈利: {result:.2f}")) B+ g! ^- t( z/ E6 o
print(f"累计抽水: {commission:.2f}")
3 a3 B3 ^. Q' o+ {- ^1 y+ ~7 p& s! |. X' G$ E+ I. c% w
if __name__ == "__main__":
0 D$ H2 j" ]2 f7 F main()
, b3 M4 E" N2 L( ^2 f$ J
& j% ]4 V3 k. ?3 y. e6 M8 U( l, B" s! k7 e
步骤 2. 运行9 u8 b! t+ {/ ?" f- Q7 ^1 S7 Y4 H
7 y' K" F: ?$ ~ F( p5 A5 v! N) i在命令行里进入文件所在的文件夹,例如:
, l) J5 U" S t7 a; A: u) bcd C:\Users\你的名字\Desktop
( b' q4 t5 J4 z, H( rpython baccarat_sim.py: b) a6 ?3 w$ l2 F
1 W0 |8 t7 v0 ~, u输出会显示:
# B2 M2 ?" L* a" P) }% l3 W/ y+ R3 y/ |: Z) R0 v c
累计盈亏: xxx2 h \/ Y0 q) d
累计抽水: yyy
% Q, A# N2 k2 [$ I-------------------------------------& c/ | @" c% D$ V
实例:试跑3次, * P; w% ?6 s, k
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py & ? h7 t6 }& C. u
最终盈利: -5360.35 ; ~6 G4 x9 n1 d w$ T7 v# @
累计抽水: 5176.35 , ~/ B. L' E& P o
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py " P5 J( W. l C1 r0 ^
最终盈利: -5661.65 9 h/ a# |/ \# V6 v* Q% \
累计抽水: 5174.65 % g1 p3 H8 r9 o8 A( |' Z
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py / @, b# @8 y8 T* S: z
最终盈利: -4244.50
( t" f G5 h# ^( ?& ]2 x累计抽水: 5176.50
. B w2 `: I$ B9 v: y; W( @2 l+ r8 Z8 U5 q4 h6 |) P; d
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:* Y# q0 ?% P8 J" }
" c) R7 d) o" M; b累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
4 q# |; @7 r# Q0 o" Q, g) i6 g) v z
6 l& I7 E) Z1 U! V# F最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。3 J2 S8 o0 d [
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。0 o. V. x4 W# H( Q; m0 N; E
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
: u' K9 N3 {0 k5 k: R7 r5 {但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。& b9 U$ D8 [) d; _! y5 ~, W
: e- R5 \- c5 w# f' \( L启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|