|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
! C( P" o/ L0 S$ Z9 t8 A6 M& e8 a
! I6 N9 h { \! s可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
! u' [! X7 [# p& f: Q0 `6 h5 TExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。* n1 P' ^0 U% A z* K# y
# f8 R/ z& Z" [9 @
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
6 Q! K. o* B; ?" |6 E. C: s, h假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。) s3 F, ^- i, R# O- |" j% A& S3 f
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。% M7 m' X- h( y
% v- m2 a! Y* k% |! O+ w步骤 1. 新建一个 Python 文件
$ e P# @' g! K打开记事本(或 VSCode、Notepad++ 都行,我用记事本)) F8 t4 @. S: W6 ?9 j
把下面的代码复制进去。
9 z0 K5 K: }. [+ d8 W保存成 baccarat_sim.py (注意后缀是 .py)。# R1 n ~0 x0 g n
/ v: [% n& H4 Q% Eimport random
) F5 X/ m8 g+ Q: g9 i9 {import argparse2 S! |* g; h" B. E. G
' y2 O# [3 |9 n' _1 W. u) b' Z4 ~ ^
# 初始化鞋子! N. s) h! n* f
def init_shoe(decks=8):
- ?8 B6 C7 b/ A: N" P4 C/ p/ k # 每副牌52张,8副共416张
4 }, G: J- p- z* b# s @ shoe = []; t3 y$ r; { Y" x# J5 j9 ?
for _ in range(decks):
0 j* F" |" S* h1 F v V: l1 T shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和43 U) ?! Z" ^: P2 Z$ X; U
random.shuffle(shoe)7 R) ^6 @6 Q z0 a& v5 m6 w
return shoe$ W" I0 }& Z# x
p6 x2 ]) k5 }4 u/ e
# 发一手
) d7 B' G6 i1 ?% \+ V/ y. j9 D8 Rdef deal_hand(shoe):
/ E$ _$ x7 R0 g0 Y z% f if len(shoe) < 6:
: M0 b& i# d: L9 d shoe[:] = init_shoe()/ e) a) J/ m" |4 V" p
return shoe.pop()
5 C# E; p/ \& q8 j2 {/ `2 p: o+ }9 a% V# ?# @
# 模拟下注法 A
/ f4 |+ `& H5 Q Z. Pdef simulate_strategy_A(num_shoes=1000, commission_on=True):
4 q, ~ F" r$ O8 t# i profit = 0
& W; _# p/ k/ h" W1 r q commission_paid = 0& n! s5 \# p& U! s s J% j4 n
shoe = init_shoe()# n& V; N8 T( T, a F) l6 M
1 N0 j& U+ H7 a% _- R' P4 ?
# 策略参数
" R' [/ @7 t( q" f% r/ t% S sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级4 o1 A7 \4 }+ {( }4 c$ G
stage = 0
9 ]- o8 }6 ^3 B; u' ]% T$ @! w. ? target_side = "B" # 起手投注庄
$ m- M+ G% {1 g, T
8 }1 y) Q. v6 K8 I; o3 h while num_shoes > 0:6 B3 b" L8 f+ V7 f
result = deal_hand(shoe)* S. z" P$ E9 c6 u8 K
6 O/ b( ^3 r6 {3 v- c
if result == 'T':
; ?. A5 M7 s* v # 遇到和,不输不赢,重投1 k- |! Z F! f9 n: n: J2 P& A
continue. i: j5 J) N! o$ i8 R
# n }! k$ e H/ Q
bet = sequence[stage]
; G% P- F- W5 ]! {7 `4 S$ H
1 a! B8 _: N$ d! z+ k9 ~8 b if result == target_side:* ?6 I& w2 n8 H8 d4 L- N# d4 Y$ _. R
# 赢
" O; n8 e& x) H7 R" H win_amount = bet& w0 l# z I5 b" Q4 Q9 f
if target_side == "B" and commission_on:0 e U- [5 X5 _( i3 k
win_amount *= 0.95 # 庄赢扣5%抽水+ Q3 g" M3 _8 w9 V' f/ ?/ I5 |& o
commission_paid += bet * 0.056 [ I" r; n' ?2 D, j, @4 U
profit += win_amount
7 B( A0 M. [; ^: v4 I6 ~ stage = 0 # reset
9 D- V+ ^4 k$ | f* R, X target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
/ B. b3 F2 o ^) L3 b" q else:
) R8 A/ c/ T$ K# k5 n # 输
! U7 T, m6 u6 O- O( _# C profit -= bet
1 | U V$ w6 _# L, Y) ~ stage += 1
3 L! e& K( B$ s3 p) d if stage >= len(sequence):2 z4 Q+ i4 c0 U/ D1 y
stage = 0 # 断缆reset
r: @4 B5 k* c# L' H, \7 z/ n1 z6 l num_shoes -= 1
4 \/ }) ]! m; y5 f. i3 v4 H5 {/ U$ V! L5 B n8 S6 _0 @* r
return profit, commission_paid" x/ m/ b- ~* O! a4 d/ |+ w4 H- N6 G
; Z( _2 ^. b( g- Q; H# 设置命令行解析
2 E& j1 P0 x b# t' v" Z. V7 Jdef main():+ m9 ]3 [; {+ u; U
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
1 R, x# D' ?: O1 w) \ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")& B3 {$ L0 X) }( L! p# v
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate."); g7 r# `+ F ]" i! S2 H
! g* m* D% x+ m. @+ m( z args = parser.parse_args()
7 d% U7 L _ H: }( p % J6 q$ {/ c2 L0 o: j
# 抽水开关:开启或关闭
+ P5 d6 p1 r; s# G) r1 y commission_on = args.commission == 'on'# Q5 s5 F! h% `4 U: A, E% h- ^
/ V/ R/ J, d' V- a result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)2 ^7 _2 ^& |+ E
print(f"最终盈利: {result:.2f}")" `6 X+ T/ W1 _ Z
print(f"累计抽水: {commission:.2f}")$ _4 H% N9 u- ^, O! g
& ]2 e+ H8 k$ b2 N' ]: G9 zif __name__ == "__main__":
# A0 E& x& `% z0 d main()
; m" A' a" x8 M7 v
' y. i" `9 Y" j5 W
+ }7 }8 K% ^/ u- ^3 m步骤 2. 运行" [1 l! a& j( C) u' _ M
! }3 t0 N9 r0 B( R
在命令行里进入文件所在的文件夹,例如:7 q9 l7 }: |1 }0 `1 t x' S
cd C:\Users\你的名字\Desktop, a( l5 S6 Q: y! w! A% s
python baccarat_sim.py
/ C2 ?! d e; u7 H. O
* b$ E; O. i3 i输出会显示:; c( N; K9 o4 f7 f
8 i Y$ P$ c* Y累计盈亏: xxx
( |9 C- l" }- f" K2 ]. p累计抽水: yyy
0 S9 |4 S$ y9 G, B7 K& K-------------------------------------, M' A4 x0 ?: e7 r4 {
实例:试跑3次,
: f9 l4 H8 K. |8 W1 lC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py & Q" S: ?0 ~7 Y# C, f5 T8 \& f
最终盈利: -5360.35 3 `% ?0 n& I Z' W) ~4 J8 ?
累计抽水: 5176.35 9 C. ~) D+ S8 N" B6 m g9 q
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
' s; {5 H7 n t5 p* p最终盈利: -5661.65
- {8 g. I# N( z5 e7 ]2 E累计抽水: 5174.65 0 }( ?. x3 t. c `3 F; i
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ' F3 T8 b: _% L* u# L
最终盈利: -4244.50
0 e2 M! B' {( t# X" V2 \. ^5 h累计抽水: 5176.50
* o; G2 j X4 B9 y/ V, @. A1 M) z& Z, P ?# [
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
. N) I* z0 ?) h: |( a5 C! C
& j: K+ F- X4 Y H$ Z b累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
- h) w& i0 g/ K* U
6 l+ ?1 ~7 Y6 u; U t# x最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。2 R/ B! b* F+ z. c0 W
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
; d2 K; @; h5 F- D9 _+ g6 L& x人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。# W; }) q) M# m! v0 _& H
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。% W7 n* A& [. N+ Z+ }7 N' R2 l
, \+ ?0 F: d ^) [+ C/ Q
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|