|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 ) s; v, G: w. M! }( D+ W/ n0 V, a
' ]0 r0 e/ J0 J" V可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。5 _( m4 e% S& x
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
- M/ _" ?0 Q6 L, c6 D7 T4 R
% v* z8 _/ q; v$ u在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
) E2 |4 t8 o- f; x9 _. L) h' [* A假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。! k7 E1 f/ t: Z ~% l. O
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。5 j7 o/ X& m: i- D. d% `
: L1 k4 A# O6 C
步骤 1. 新建一个 Python 文件* a1 g% W" {9 F" [+ K
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)# t3 B c$ E# _2 r2 l7 m- ^
把下面的代码复制进去。+ d. V) x- ~6 m! @4 q3 n
保存成 baccarat_sim.py (注意后缀是 .py)。: g2 |3 n6 W! Y5 Q8 t
- m) @* S6 ?! Z" F: n: oimport random
: B8 K7 f) F/ b- t% C' C) rimport argparse
- l: } A, w+ J4 x5 |' g k ^) g* a, Z2 r3 D
# 初始化鞋子
2 a# V3 y0 Z m; T6 `5 jdef init_shoe(decks=8):& D: R. b- J6 u M7 ?
# 每副牌52张,8副共416张
\( B# a/ `# `" \4 M4 v shoe = []
! Y( T# _' Q' U for _ in range(decks):* l" g, B% e" I& P% T# _
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4# k. ?) o3 F5 @0 N" e) f9 Y4 R/ y
random.shuffle(shoe)
' k* v4 a/ ^ C; {7 R& q return shoe
5 `9 v+ p8 m8 A+ o
( E- ^% k( s$ Z) P* {8 `; O( w# 发一手+ ]; l, O- G2 s* L. r
def deal_hand(shoe):
7 p3 C# P: R2 h/ _, p/ R$ X# j if len(shoe) < 6:
# K7 b$ m8 x/ c8 {* X3 h. } shoe[:] = init_shoe()
3 z" u5 S" c7 @/ v! L) R return shoe.pop()
; Z; `0 L0 A1 N* B# d
: j# y8 ^$ c: \+ G7 W" M1 K; S0 q# 模拟下注法 A
! `0 z/ G0 f W& J# Q. kdef simulate_strategy_A(num_shoes=1000, commission_on=True):! K7 ~2 V o6 D. M2 ~
profit = 0; d4 ?2 t& ~: C4 t% f. x: L2 }! n
commission_paid = 0
0 B" Q6 [: z0 P! K+ C& f- `; I3 o$ v shoe = init_shoe()( a6 w6 s8 a& a, Z. ^7 E
0 T! \6 l( P H; M1 q
# 策略参数# L8 }8 P0 V9 Z6 i+ v ?2 M
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
7 T$ c3 A2 r( L3 K9 ~- [7 h stage = 0
& o/ o- F/ y; p$ g+ P$ p$ M target_side = "B" # 起手投注庄% s2 ^/ o ?$ j2 n5 `, I( W& t
0 Y* M1 F* a( J8 Q
while num_shoes > 0:' x$ [" k3 [4 ?# u: l
result = deal_hand(shoe)
3 j0 O2 r/ Q! _8 v g
1 W! D6 ]6 @- `* K" P9 A0 J if result == 'T':
$ V0 u: j/ R. Q5 a8 K' H7 Q9 p7 I # 遇到和,不输不赢,重投
& N; [" c1 T% w: m5 u continue! D: N" D$ k0 g* L( @6 r# h
3 o5 g, p. g& c6 w; Q5 ]. O7 `7 g bet = sequence[stage]5 H9 ?/ N! e. j1 }* b. q* g
8 K6 V- {. W0 o9 N0 V( h
if result == target_side:
# n5 Y$ F. \& v- O8 y3 Z # 赢
/ w1 Q' N5 a( F5 e6 p# N( | win_amount = bet
3 m6 |; \! ~6 e1 F8 w if target_side == "B" and commission_on:8 ~0 n$ I4 X7 h# Y
win_amount *= 0.95 # 庄赢扣5%抽水" I4 p6 k8 o( X1 P- M/ ?6 }1 h
commission_paid += bet * 0.05
- k* C( S7 I1 B$ C4 E: ]4 E profit += win_amount
! O9 q& A+ b0 m" k% v& _3 ^ stage = 0 # reset
; {! ~- M1 P$ H& R- [ |, `9 u target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)5 p* X5 m6 z3 v s& E0 t
else:
9 K; Z( ?( K% ~, a7 J # 输
d. m3 w% [; D( h) r profit -= bet6 d3 c8 x# ~8 R2 r$ P4 z5 w
stage += 1
- W% D' v. U7 J if stage >= len(sequence):* l# u" }2 q9 m& S; k, [
stage = 0 # 断缆reset
8 c8 P) O- @5 `- p R8 x5 l! R num_shoes -= 1# ]8 e; f7 o+ e' s4 g2 q
0 C4 E$ D' P; Y8 K; q! T* M
return profit, commission_paid5 B+ G) D0 F+ h2 v4 `/ s# U
. k" M. e4 r6 s6 ]) k2 }
# 设置命令行解析
' w/ N# o4 y e# Q" Z/ o Fdef main():
9 x: j) X2 E0 `) \8 c/ R parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")7 z' _: ]3 B* h3 O3 m) y0 m
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")6 k0 C6 w1 U5 S" s% C# z
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")) Q @/ Z- w( j q
0 G/ h/ u8 e; L* S% ?6 R" x% ~; @ args = parser.parse_args()
2 A% }( \$ Q) r3 i5 U, K / x0 S6 M1 Q1 _6 [
# 抽水开关:开启或关闭/ C+ T" a; r- j5 h
commission_on = args.commission == 'on': E9 p# f. h* I5 }. ~* S' @+ W& q+ ?
" f4 k3 v! H% B6 o4 V result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
1 k( r2 M" t# z* `0 ~4 L print(f"最终盈利: {result:.2f}")% [( A2 R5 ?) `% i: R M- J+ u/ I* k
print(f"累计抽水: {commission:.2f}")' |& G/ q C) @
! R/ X6 ~3 Y. Q; Y$ oif __name__ == "__main__":) V! j# \" `1 e% x5 X& D; ?1 f
main()
$ e& P2 `& B# n! a5 I
8 i2 _! l7 ~ N9 \( `# N- D, B& A' V9 x$ Z! r& w: b
步骤 2. 运行
3 |. ^ P4 c) r. E+ |. F- \% H; g' q0 Y/ P) G( f/ G- C
在命令行里进入文件所在的文件夹,例如:
2 \. j& K' o% y! u# x0 X0 ^cd C:\Users\你的名字\Desktop
. X* h! o8 S( c* ~! m Epython baccarat_sim.py6 u; d1 ~7 i7 l* _/ D( `6 |0 E
+ D. c/ W9 \' A) O输出会显示:: m' \1 P, v# k1 {3 f$ U# g
& R) m# p z! h3 H% L3 `# c累计盈亏: xxx
6 m: m4 s" v7 u2 \' D' l累计抽水: yyy9 t" l$ y/ K+ K$ ~# M- N6 I4 _; u! X; V
------------------------------------- J5 ]0 Z; c3 B& I$ d
实例:试跑3次,
* C a% d* c! _" QC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
, T: \- W+ n/ D) f6 X* A最终盈利: -5360.35
) E$ T4 |( s' n, G7 @, r累计抽水: 5176.35
2 W9 U; W: Y+ J- i/ N, D8 oC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ( g1 o% k; I3 w6 }
最终盈利: -5661.65
W! }' R) [. a累计抽水: 5174.65
, @( Y( p8 X1 gC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
% X; c; S% D3 h最终盈利: -4244.50
2 s0 S9 H Q1 m& f5 p* i5 b' L累计抽水: 5176.50. f3 t7 L6 H% l* P8 t5 s9 ?
4 M% ~, i( u! d+ @" I" l4 I, N/ ]说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
6 p0 G' z0 v1 L9 C0 L- @- }2 w2 j1 R# O6 [: G& z3 {2 b& ~4 ?" D* ~
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。% |7 f s$ s% z( N! i
( F# K4 Q1 d0 a$ R* K# |
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。9 I. T9 ]6 R5 b# H
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。$ W1 L6 T3 u9 f# y$ x, Z
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
7 v3 m* Z) M5 D ]但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。+ n& h1 L( O3 v2 p* S/ b# G$ H
/ @' F$ @4 ` X; m
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|