|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 9 P4 c7 Q8 S& j& s# Y4 x$ s
& E& j/ k$ j9 Q, a' l
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
. n5 R% X Z5 y2 r% ^( d8 rExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
7 [# r. u/ c, j( i/ q$ E. S+ A- S) Q$ T4 E) }" a! q
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
& C0 o; g/ j" e% r5 c& e假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。: N2 s0 }4 d- _
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
`# o/ P; @ W* L4 v
1 Z6 M" @6 I6 P步骤 1. 新建一个 Python 文件
; j6 Q. P3 G E9 \% P/ p) |打开记事本(或 VSCode、Notepad++ 都行,我用记事本)& B$ [" k2 M) S
把下面的代码复制进去。
: ^9 V: \" o( Z保存成 baccarat_sim.py (注意后缀是 .py)。9 \" s$ A, a1 Q- a5 j
/ S$ d/ ~6 n, |1 F: I' A0 J
import random1 ]6 S( E9 w l! E! W1 c" ~
import argparse
; t( W A6 i0 t" l) ~: g3 ] e" b; l9 i/ N# \+ A
# 初始化鞋子7 B' i$ K. I7 e& ~- v
def init_shoe(decks=8):
3 Z) r! m5 X1 ?. o # 每副牌52张,8副共416张
: h# A5 G5 c: I8 F$ f shoe = []: G5 n, {% j" c( |! }2 V! l
for _ in range(decks):' e2 A5 c$ x* o* T( `" K9 s
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和47 d+ P3 N z; D
random.shuffle(shoe)
; J( q6 x$ K! n) S: E. T$ A7 K return shoe3 F a# t. v' _
8 Y+ V) ~4 p- \; _" D# 发一手5 `/ @6 \7 F0 U6 _
def deal_hand(shoe):8 N+ [% H0 g" C# n0 k' ?
if len(shoe) < 6:& `3 ^$ [) l3 Q0 Y7 s
shoe[:] = init_shoe()
5 Z. M5 V5 g/ \& C return shoe.pop()
. ]7 B+ Q# G' Q8 _2 Q
1 y. f" b# I: E9 b# 模拟下注法 A
/ L f: r: ~ \8 Wdef simulate_strategy_A(num_shoes=1000, commission_on=True):& i U2 b( |, Y* }
profit = 0% q2 d; v6 i% e8 |. p$ A
commission_paid = 0
* P7 V- b8 S% O7 p, c/ X shoe = init_shoe()
9 s2 n, \) y- T6 C, y7 _/ w
! M. y" s) a0 I0 @6 T # 策略参数0 L& [ k# J! `, N" r4 g) A. C& C
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级; w5 `% U8 M$ k( K0 h; W% K7 A
stage = 0
1 t! y9 {' Z& h, p+ w3 z. g) f target_side = "B" # 起手投注庄
/ c4 k0 d# p: Y+ D
" H1 Q) P# A4 m- g$ q! L while num_shoes > 0:) H! q" Q# i- @% f
result = deal_hand(shoe)* j: d* ]9 ?% c; w4 ~" w( ?" M
. w, u, J- p7 {
if result == 'T': 6 c7 P7 V, W- C' t* U# T( x" J
# 遇到和,不输不赢,重投
$ E: O5 _6 x) `& }' d8 J$ W/ } continue
2 C) k& G$ J" a! S
8 F; K* J/ f A- S, Y& P9 L9 @ bet = sequence[stage]
( h! N* O" I' Z" c6 ^; ~ ! B/ I+ G* g3 z- U$ f! |
if result == target_side:
, Y3 n. P ?/ M; o! A$ [$ p # 赢
2 V! p# A9 i+ b! n3 m. H win_amount = bet. z' k% d! X& @8 V1 c' v' o
if target_side == "B" and commission_on:
7 T' h) b7 q( G4 w" z% M9 { win_amount *= 0.95 # 庄赢扣5%抽水1 B8 t6 R+ n4 V
commission_paid += bet * 0.05
8 E4 S) F7 U7 j profit += win_amount) L' ]3 b. L5 `: b/ W
stage = 0 # reset& v( O5 L. p% Y0 S- \2 ~( v: x
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)7 N, ?# p+ R: d l( X
else:
) i6 _* Z3 P+ H6 Y5 Z& Z # 输
+ I2 b5 T( I5 j" @$ f profit -= bet% Y% F x- a* q/ i
stage += 1
* P0 b, e4 ^6 s2 t$ k- x if stage >= len(sequence):
8 N$ O% p. G* {3 x# ` stage = 0 # 断缆reset- O' U3 h! `* z1 S) I
num_shoes -= 1
/ i/ r2 k _1 U1 m0 H7 K; L! `7 m% ]- w( s" [6 K9 h" O/ M
return profit, commission_paid: m6 ]+ V# m) |) e) L3 H' |
$ l0 p- ~0 q4 o; E/ U# 设置命令行解析
: v; h X% ?3 f+ [* Fdef main():
# o) q, ~9 e6 @9 @! z! t0 V parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off."), ?. ]% V2 X% f! K
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")) s2 n s# \" I x. I( i& T
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")0 O( X; E3 h9 n1 C% J
) Q/ A. i1 `0 x8 q
args = parser.parse_args()
( x: _* r8 A- v1 @* i9 ^ ) ~ T2 \. m$ ~: i' w
# 抽水开关:开启或关闭+ X/ u2 K0 z" o( G: S
commission_on = args.commission == 'on'5 U4 y: h0 i$ a* \* B
! ~$ ^! [$ G/ I4 L O9 [
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
. H) b8 b: {- L7 v6 [ print(f"最终盈利: {result:.2f}")0 F2 \; G3 L8 M/ a, m% A& t
print(f"累计抽水: {commission:.2f}")! e/ ?7 P( Z e2 s! C/ x& t
6 w# K# l- n% l* |if __name__ == "__main__":
1 H% `! L+ Z6 _ main()
5 W: `& k7 ]4 g
# u5 A* R2 L( }# \+ _- `; _/ r0 v; s2 h7 u. A' r7 W; j
步骤 2. 运行
5 _$ x! L9 K; E6 }* n3 j- h: `- ^5 {% `. z
在命令行里进入文件所在的文件夹,例如: Y8 e+ a- L- @6 C* d
cd C:\Users\你的名字\Desktop: G7 p" ]7 [( n- l" Z4 R
python baccarat_sim.py
9 G; g2 n7 p) L5 e0 l5 M8 x/ r( s" `$ W" d" r( X3 X8 P3 r }6 ^* B
输出会显示:
6 R/ a: X% y: K# a( {" m: x
0 B" v% f b- j! a o0 I; V; \累计盈亏: xxx! d2 B/ m z% \- Z8 g
累计抽水: yyy! z: ]/ B0 o& u1 r4 ?3 T7 q
-------------------------------------; Y+ V" w# [) ?% b
实例:试跑3次,
, A) W, X& L/ n6 N. OC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
: }+ m; l3 C& D最终盈利: -5360.35 % |2 c2 [7 y+ `& V9 J& ?+ v7 x% F
累计抽水: 5176.35
5 v# @5 t$ }, |C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
7 n- H+ T" q$ ~' r! X) |7 R2 h5 G$ n最终盈利: -5661.65
. Z, e5 [9 ?5 _% i0 E) r- I累计抽水: 5174.65
" M q2 z. Y0 z$ `1 {( K7 VC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
o1 r9 B0 b2 d1 W) D+ Q: x4 C& ?最终盈利: -4244.50 ' S9 F" W4 Q5 J& G" A
累计抽水: 5176.50
, R# }4 z* s, G v' |% ]! Q8 D3 R* `3 f7 h- w- q
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:% m: o) j: p! |
# c5 _" c) B$ Q$ M$ m- M
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。# Q4 h7 _5 }, a# Y, G2 Q8 v$ H
( h1 Q* m+ C [6 a4 q e- p9 B$ ^
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。1 E3 I; z! O1 Z
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。0 R0 @/ p9 O; }/ }0 k) d
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
" g' G a! Y7 h/ B9 Y9 K但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。" v5 V; `" S# y$ M! w
& J, |! {1 i$ p- K1 p# `启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|