|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 3 h/ l) R- l. ~# e2 D" b6 l! C1 }
" h( T1 @% Y- Y可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。( N \' l9 S2 z8 Y8 j
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
4 w4 M* l4 L o2 B4 ]8 c, Z6 s/ Q" S( f0 i$ b
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
; G/ c; V) q0 h; W) T- S9 p假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。# Z0 Q0 E: a9 R% g
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
: X K" s# \/ }& I5 I3 B
# o0 d/ M. g) z9 ^- W ?! K7 e6 } \步骤 1. 新建一个 Python 文件
5 i" R7 o' `( O* A8 b打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
* i8 v5 I! P. \把下面的代码复制进去。- O* t, G; ]- g0 z9 ]( u4 n
保存成 baccarat_sim.py (注意后缀是 .py)。
; @ T$ K$ P0 V( ^
( `% l Z& m( x% d4 f$ g1 {1 \4 Cimport random
2 S7 A6 L n1 G7 i7 }1 i" o. Y6 timport argparse; N+ p3 b4 A/ c
" r$ b) J* {8 Z0 ^6 ?: H9 I# 初始化鞋子
1 E. O0 ~" Z! @def init_shoe(decks=8):
$ I4 c4 z( ^# R7 O+ ] # 每副牌52张,8副共416张
7 l3 X. a" c( Y* X; N! E& k shoe = []+ r8 q d# `7 }8 z& {, P
for _ in range(decks):
9 N; s. s- ^8 V shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
% ^2 F% _2 s* ~3 ~ random.shuffle(shoe)4 k) Z4 f! k. i8 w. k6 ?
return shoe
j+ X+ u% W/ c( A9 w1 C+ A! u8 d% F. j! Q# z! N% M
# 发一手7 F2 r% i# V0 u+ [) P6 I* g, S
def deal_hand(shoe):; N' h* b/ v# ^1 s. F8 S# ^
if len(shoe) < 6:
U1 N# f- \8 Q: i2 S; F shoe[:] = init_shoe()9 l) g9 ~: W5 ~1 k! C- @. j* `% o
return shoe.pop()
9 K+ }" Y+ n* z8 Q& m' ?& |3 G$ g p& [: H; q$ y( @
# 模拟下注法 A: }4 G* H4 _+ ?( W1 I
def simulate_strategy_A(num_shoes=1000, commission_on=True):
1 `9 ]2 i8 @- ~ profit = 0
! A" |" ]- l2 C" n; K. F commission_paid = 0
6 O' G2 A a: y shoe = init_shoe()
, T) Q9 E6 m7 B1 }& n q! T. G
' U+ D. k6 |; r. ~1 f; g # 策略参数$ ~8 v+ m2 b- S7 g2 v8 W5 K
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级, j+ b: M5 W. E, x
stage = 02 P; P6 m: J7 s/ B
target_side = "B" # 起手投注庄, e( \! m# N+ W' A. ^5 f
3 u! n* v }# Z1 o( w
while num_shoes > 0:* i7 S2 t: H+ g6 l* ~
result = deal_hand(shoe)* {4 N9 M8 s- S( f% J
% G( j3 H; t t$ D+ Z2 D0 Q7 `
if result == 'T': ) a; I' J' Q, v7 R
# 遇到和,不输不赢,重投
) J0 k6 l* S9 l( C continue
: W4 K# a2 e( |6 K
& \( b' S6 `* _& C bet = sequence[stage]) C4 n: O5 ?1 s" J' I# } l$ r9 A
2 a. b/ ]3 k& x( E; j# v/ i8 O% F8 X
if result == target_side:
4 M- r4 R5 J' G& R% G # 赢
8 {* f, t0 |, D& x win_amount = bet
& |, q" A- p1 g; F if target_side == "B" and commission_on:
* R4 D0 z. u# @/ d; `. a" s6 W5 E win_amount *= 0.95 # 庄赢扣5%抽水
* G$ l. M* m+ e7 s$ Y3 E5 t commission_paid += bet * 0.05
d$ V+ ^ J& S, D- n2 H profit += win_amount6 I: J1 f3 ^: Q8 P. ?
stage = 0 # reset
/ L4 k3 {# |- S& L target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)9 z! _" C" f3 K9 T
else:
, R% X7 X$ m7 T* m7 x A8 ^7 h # 输 v9 ^" d0 B( J) q& {% u
profit -= bet
$ R( x: n! ~2 L$ v$ k4 j stage += 1
: u, \ V( J* D: ~ if stage >= len(sequence):; Q3 y3 N: _' U; M" o5 E
stage = 0 # 断缆reset1 K: W1 F5 C, m* _- [! K0 @0 H
num_shoes -= 1
, d% H5 K {9 u: s! i
2 l% K/ I6 O! j3 H return profit, commission_paid% f" T( J$ u9 b! V! n5 {0 r* d
! O* Q9 }8 C5 u2 o
# 设置命令行解析
: T/ F5 {. Q+ ~" y) {def main():
0 Z% A. k E) U' q, r8 L parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
5 S8 u1 Z' k7 ]9 p parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")0 ?; o; y: l; v9 a/ W
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
1 ]2 Y, t/ L; r
8 W( ^3 X$ w; m args = parser.parse_args()+ J4 A/ b7 \# Q: n* K4 z
; V2 i! k: O; C b) v1 Z0 A5 s, ?
# 抽水开关:开启或关闭
/ z& A! X7 u7 }! ?& \ commission_on = args.commission == 'on'
3 k7 I/ R" m' y
' {, ~, U( b. g+ j result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)" H9 {& a0 T0 y' |
print(f"最终盈利: {result:.2f}"), F& W" z4 _5 J" k8 ]6 X
print(f"累计抽水: {commission:.2f}")
6 }) A; V+ a* D& K, |: K/ T3 H8 D( U/ C2 h5 Y$ D! E a* D) b
if __name__ == "__main__":' b) X" z! w. i* {3 I( { d' @
main()
( ~3 T0 I! d, F9 G: u& a* u% u! E: q1 H. o" x
0 W6 H' \) F( ^0 X2 q
步骤 2. 运行
" B1 a2 g& v7 h9 H- }9 @
4 J. a6 y- O: b5 K7 h; _在命令行里进入文件所在的文件夹,例如:' P L6 j$ j6 |3 l
cd C:\Users\你的名字\Desktop
' M6 i$ Y+ Y3 ^) F @8 c7 xpython baccarat_sim.py
% e5 R8 J4 @% @+ A7 \
+ P1 A9 }0 \/ s输出会显示:
6 c. P1 @9 P. i9 Q* o# d9 Q! H! q+ i1 H2 i# @5 x& g+ m' \
累计盈亏: xxx
# j( Q/ A1 p* s2 x4 H8 y. K* ^累计抽水: yyy3 r" J' o+ M2 e& |/ h% |/ q0 q" S% T/ p
-------------------------------------2 c) t/ D2 f z0 }0 f8 R
实例:试跑3次,
' ^1 ^6 d: p1 V$ d, G* {% p% }1 n, t( dC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
, h$ n* n4 O. m) ^最终盈利: -5360.35 4 d8 o1 ?* L( ?. g
累计抽水: 5176.35 ' b& Y) m/ Y$ t* Z# b) ` h
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py # ?) F3 o2 |1 x B; E
最终盈利: -5661.65 & f5 v6 L4 R' [ ]; G& [5 E
累计抽水: 5174.65 5 r6 M* Z' l5 U8 K w
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
9 Z3 t4 [& C) V7 K9 J1 S最终盈利: -4244.50
5 g. c2 L0 Z" p6 b* ^' n; F累计抽水: 5176.50" a0 q- K4 d6 O% t
. G+ A( J0 y. c8 Y( d Y# v7 f说明你的 Python 已经能正常跑模拟了。结果也很有参考性:! U- G; ^& g+ |+ }$ ^
3 C! A/ U& v. l% _$ W- D3 q2 y累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。 y* \4 X6 @3 I; }' ]
2 J' C" U+ p: q D) @2 R; R' n+ m6 n
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。( A- }+ d/ V- l& t7 K0 a% m2 x
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
! [/ Z$ _% T2 E8 k人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
( Q% P& Y3 a5 v. z- a但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
( H4 o- }8 m, e, N$ N. a6 x- ^
5 v) Q& P* m& z7 U; b* ~启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|