|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 & x4 D) O( l' N+ k* _! ?* g" `
2 s: g4 o7 m7 T* d6 K3 B
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
+ O7 K5 I [" TExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
* x' p; @5 _5 s- ^! n$ j3 n/ N9 \/ Y1 x. Y
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
; P: Q; n' F2 R7 I4 t假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
# x* b& m" l( f+ N- i* [先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
' \ Q* \1 E7 ~: _8 x& Q+ O( d
+ j% U" D& z5 {5 u" ^' g" ~6 M s: C6 H步骤 1. 新建一个 Python 文件
7 h& \3 P1 s, \7 A% V% v打开记事本(或 VSCode、Notepad++ 都行,我用记事本)3 P! y W$ T' W: M }/ J9 j- H4 Y
把下面的代码复制进去。
6 h6 X6 A* Y. m保存成 baccarat_sim.py (注意后缀是 .py)。) h, ^, m( b8 }' f! r/ h P
! |" T: l' h& o) P
import random
, ~- G# q: ?: ~# O" z. Cimport argparse* B* X7 q; g- D+ k2 t& ]1 Y
! s$ I; U- V0 C. p# 初始化鞋子
! |5 ~# n1 ]9 C; }def init_shoe(decks=8):
- e" K5 Y' r' f; j: Y U6 S r # 每副牌52张,8副共416张, \. E' m4 z, d) m M( d
shoe = []
( ~$ z3 w2 ^8 a# R" }& Z for _ in range(decks):
) G/ Z1 R0 O) [. ?' Z7 R/ O& Q' I/ l shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
: n2 \& }, o: a* k/ L; X4 q1 B2 j random.shuffle(shoe)
2 j8 l, M) V$ K" q return shoe
/ [2 N# {- f+ I6 x
2 C) ^: b' O1 W# 发一手+ _5 `( f8 f, f* J1 n' T7 R
def deal_hand(shoe):
" r- V0 I# [) Q if len(shoe) < 6:3 m, L7 N1 @/ @3 c2 Y0 j, P! Z
shoe[:] = init_shoe()- M) _; T$ d9 K5 O1 l
return shoe.pop()+ u, h: n2 S6 }; D+ _
- a) z5 o& s/ q* w5 _
# 模拟下注法 A
& A) e9 r. c; f, @, {" bdef simulate_strategy_A(num_shoes=1000, commission_on=True):, @0 h; P8 n6 X9 G. O0 g
profit = 0! L8 ?3 N, v j7 v+ y1 y* e* E/ e
commission_paid = 02 X. L, f: I4 ]
shoe = init_shoe()- ^5 N- z. Z1 Y* u( I
' m {2 N9 @# p/ k # 策略参数 ], I- S0 U- q3 j* |. U/ B, F! b
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级( ^# J: z% U8 }& F6 P o* x
stage = 0: m, i, N: W+ k
target_side = "B" # 起手投注庄% C" P6 m8 c C. F" o
) m( e0 f9 }* N while num_shoes > 0:3 l; w" d) p! o! r8 p1 ?" O% Z
result = deal_hand(shoe). y( K ^4 c6 `) ~" ]
+ z6 J+ G5 ?% K# A: Q if result == 'T':
1 M5 F9 M8 N. w: n8 x# Z0 X7 U3 R # 遇到和,不输不赢,重投
6 k# y$ A/ m. R5 ?" P9 R continue5 T( t. v. j; z- W9 T
& e9 F% Z. h: c7 ~ bet = sequence[stage]
, t) n* y+ ^: A$ r M, e + q9 {/ K7 D8 Q5 q0 e
if result == target_side:
, _0 \$ z& E7 w! ]8 L4 y # 赢# a" p" U" b) `8 `6 ]; b7 C
win_amount = bet5 K9 U9 W! @8 v. X
if target_side == "B" and commission_on:
/ B- `% }& S9 H- q, F win_amount *= 0.95 # 庄赢扣5%抽水
9 E2 i+ w# p% G" p8 { U commission_paid += bet * 0.05
& H& B6 x. \2 g9 r. A; K profit += win_amount
% h* K0 G" a) z. S stage = 0 # reset- l+ L5 Y; K9 S! A+ K1 M, d
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
: f* P! q+ T+ a* V3 [ else:
; b; I# ?: q# x+ q [: n) D* o # 输
h. |- k# O+ w0 M% b profit -= bet6 f0 j* C- o/ k. R3 h! i' `, ?
stage += 13 z1 P5 L) v+ ^& i3 h& T
if stage >= len(sequence):
- y& X0 V! @" P+ W stage = 0 # 断缆reset
% N; J, p/ j" _' j+ A% b num_shoes -= 1
" z: _! `2 Y- F9 @$ I9 e4 O
# }8 T& J0 e4 n) E, M return profit, commission_paid
& g/ x; ^+ k: s; J( a7 p, e1 e7 v4 G: l) W. D+ ]2 n( |
# 设置命令行解析, w" A1 F1 [7 g; ^ {: L" t
def main():
4 f N5 F( G6 C parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")3 w. W: V, G! W
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
, e- S: E+ M t5 p: _5 |8 O3 k2 A parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
3 O7 E* e7 w+ ^; e% e+ n
8 N" @# R/ P! L" c. X4 b3 t8 H4 V args = parser.parse_args()
! ~( o2 Z1 h$ W# p
; e9 n8 _, y5 D* o. x; `' M # 抽水开关:开启或关闭
+ |, n/ C) \; D commission_on = args.commission == 'on'; g; d# X/ d, F- A( J
9 @; V/ a3 L0 }- Z
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
( i, V) p: g$ b d; ` print(f"最终盈利: {result:.2f}")& z' I/ T7 U2 @. j$ y
print(f"累计抽水: {commission:.2f}")3 x* S) o& X( Y. Q0 W1 I
( ~9 o! @# k. }. N0 hif __name__ == "__main__":) s, S+ g, e2 a4 a, l) B1 B5 B$ Y
main()
6 S- [- A! }( x# G
A7 ^6 f1 Z. Q {' A) d
* {/ `, L: M, R3 u' _步骤 2. 运行# F1 H0 k- r- l
: v4 c" Y7 o0 ^+ n$ n' A) S
在命令行里进入文件所在的文件夹,例如:8 O$ b$ E/ l2 t
cd C:\Users\你的名字\Desktop
( T: O/ q) ?3 U4 q' y1 V t, gpython baccarat_sim.py1 m9 v( s8 P4 j% B2 t
8 P' {: d4 a9 i8 ]
输出会显示:
3 Z# c0 m% N/ Y/ n. z; ?# q; m% B; O% m4 a4 Z
累计盈亏: xxx
: }1 Y# X5 o7 [& I y! Q累计抽水: yyy
& S4 E9 q3 m* B) j-------------------------------------
+ i% Z# U% @, F' ~. S实例:试跑3次, : g! w/ b: i% Y! t/ V, N
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py . _0 E2 }& n, ]# M
最终盈利: -5360.35 ; J- J* v9 d+ m8 {0 H/ t& A
累计抽水: 5176.35 ' x0 V6 u& d6 k/ A q2 k
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py o: }9 a& q2 c- {' Q6 {
最终盈利: -5661.65 & n0 _+ M/ z1 Y2 p
累计抽水: 5174.65
2 Q/ }7 @* K+ A2 h$ i( LC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
8 {8 y4 |& |: k. N. R最终盈利: -4244.50 " n" d3 @# P% v1 \
累计抽水: 5176.50 A. A: {4 X: m! s3 r5 }- d: y
2 U5 ]0 `7 e; w
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:1 F7 m3 U5 b9 f- B7 o* \
' _# r9 \6 m7 d" k$ E
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
# r0 z o$ q' u0 y. @$ ]/ v4 W; G( Q. q; |5 f
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。7 l1 Q/ `8 ]3 ^! n
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。3 P& m! r* o- I5 B. B5 v- z
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。3 G& i: u" D# M9 Q! z+ L+ \/ {: P
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。/ L# i! ^& h( l# y% v
' R' Z0 I! e+ G5 j' z; j3 V
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|