|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 ) o; m9 z1 Z R& w! c. e* x6 X' G5 U6 |
* d3 J: p2 t. e8 E/ X
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
$ b- @5 ^3 }1 y- T6 ^& h$ u; Z' p+ nExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
1 o Z8 N' ?$ L5 Z8 [
* {- b5 o B- l& s3 e在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
- T, x0 c8 K* X1 H2 G0 Q$ m- p# v O6 q) i假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
6 x2 v! t( [* B- n' _先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。' G7 Q- u+ v# S% K8 D
+ Q: f! |0 z" x% A/ U/ L步骤 1. 新建一个 Python 文件
6 U- m% \$ N* ?/ b7 B打开记事本(或 VSCode、Notepad++ 都行,我用记事本)" F! ~( C3 Q; U
把下面的代码复制进去。# i/ d8 W5 g' ~
保存成 baccarat_sim.py (注意后缀是 .py)。
; s. M5 a& O) _% M; V. j# @5 L. T/ t% X w, M' f0 b
import random2 }) @2 \8 I) }* i
import argparse% e7 V% \, D" r- C8 O
$ x( {3 I1 y9 m) R% J$ y2 b- x# 初始化鞋子6 G8 w5 ]% M6 G; Z0 X2 M2 Z1 _
def init_shoe(decks=8):% @( q2 E! ~; P, }, ?
# 每副牌52张,8副共416张( X; y6 L R( N* o. [/ l
shoe = []# a/ s/ a) k; y* ]; E% P
for _ in range(decks):
% L6 \! L. \$ T1 ~( k) D; i shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
, [# d' v: W# n. \' `# ~ random.shuffle(shoe)
+ n3 Z9 H$ u; P' \- H return shoe
/ V v$ p; n' T% C+ {! Y
# ~; s5 a' h( @6 l/ o4 t1 r# 发一手
. {5 C) j, u0 x) i/ u6 Bdef deal_hand(shoe):
0 d( |. E9 \' n# ~( r if len(shoe) < 6:
, N+ s# K8 ~$ z- ? B1 J; p' P Q shoe[:] = init_shoe(), n- A6 i0 [# y( J# V1 P
return shoe.pop()
( d# k. Z& g- E- n+ T; K7 q8 V9 N; @
# 模拟下注法 A4 k# ?9 f# L+ O \& _
def simulate_strategy_A(num_shoes=1000, commission_on=True):
8 ^3 b$ `1 E% ~, S6 [& _ profit = 0) t( e; ]/ i0 Z6 Y" c7 r9 X0 v+ v
commission_paid = 0
& M$ u3 D B# N/ B1 p+ ] shoe = init_shoe()
; J+ X, a8 A* T8 [4 a* v
( [$ |: e# H! C6 l0 ?1 q # 策略参数, D! P, e% p, _
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级8 }+ E! G3 _+ }% W6 O1 a7 ?9 }1 m* A
stage = 0
1 d% t) N% G! E: S! ]0 @% w% G target_side = "B" # 起手投注庄! R' O2 z5 ^' b; g- }, k) w4 H
, g' r4 R4 i* e* g
while num_shoes > 0:
% k% x1 k$ _/ t7 d result = deal_hand(shoe)
- ]! [) _2 Q6 D) x& `$ E5 k
5 Y0 A" f, O. C if result == 'T': 0 _: k+ ^; t) N2 G' Q# w+ L7 o
# 遇到和,不输不赢,重投
8 F; v6 j: m8 ~; D5 w( M1 i continue4 |! y: [; f1 L5 }& m9 c6 ^$ P
) t% {( I. x. G' b! m
bet = sequence[stage]7 L. i1 \1 h$ ?& n& I, d
, y" F- c+ x8 z! p
if result == target_side:, I$ B* o* Z: A9 w ~5 l' T" Y
# 赢
3 v# J+ `3 n- k4 S. I win_amount = bet
1 z) J; U2 Y- [1 n& l$ Y if target_side == "B" and commission_on:
6 V$ S$ H% R) H5 Z$ |; F1 c1 B win_amount *= 0.95 # 庄赢扣5%抽水3 j8 p/ z" J+ E8 p9 v
commission_paid += bet * 0.05. g, Q9 h% n3 I7 R" v( U
profit += win_amount
& Q6 `. p6 i4 Z$ ^" p4 Q+ V stage = 0 # reset' P) ]! q& j' c# B1 f
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)' s; w: A( J p, s; Y$ U
else:
& }1 L% E4 D7 S) | # 输
$ i1 {- s1 w: I- i5 m% u" o7 U2 I profit -= bet
+ T7 W! p9 E# @+ I9 w stage += 1
8 D! w. u/ w0 s2 ` if stage >= len(sequence):
2 b. v, O1 b' {/ Q9 t stage = 0 # 断缆reset, Q! h; B/ n9 W
num_shoes -= 1
, y% C5 K, `1 M+ v; o4 f* ?( i; I' a- w& ?
return profit, commission_paid
) ?' p# w6 ^( A# W% D% f
* v5 |# O+ t! q& r/ q- z7 Y# 设置命令行解析( e$ o4 \/ Y, {9 |" k3 B8 j
def main():
, X, H( {; _6 z: V. [ parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off."), ~8 ~7 ]/ A3 o# T
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
% U1 X2 W6 i% [ X parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")+ q4 |1 Q# F, i- ~) l* q
! i6 q a# f' J- ^, p3 T) ~ args = parser.parse_args(); l) t( M' b7 Z$ s7 @6 a/ z
3 t! `/ P4 @: w: k0 k$ q" u% c # 抽水开关:开启或关闭
' G3 L$ U' c8 q! Q commission_on = args.commission == 'on', k1 A$ v K( ]3 P! p/ _ R
6 A, \( n( n/ v
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)1 v2 G- }' v2 [( V% S* s
print(f"最终盈利: {result:.2f}")
1 j2 K0 u, d% V& f; p$ _) N r print(f"累计抽水: {commission:.2f}")
% }$ O. G. w$ k2 D1 `( m, b
; s9 w- F, U& h! C- r$ d/ kif __name__ == "__main__":
0 T" Z: T& y: D/ i( y" {! h4 a& q main()
{ D' V' L5 B+ M5 {: j! Z
; U8 j$ L7 x) e. c9 \1 z) X
( C! l& d) a9 H步骤 2. 运行/ ?( [7 @1 A9 [; d& _* {
Q% \% Y1 M% L在命令行里进入文件所在的文件夹,例如:+ K1 W+ |0 ~. Z' `. [
cd C:\Users\你的名字\Desktop, q2 c7 h; x( k% N8 z6 L
python baccarat_sim.py
- I- q) P ]" L. G7 I4 I9 d; Y% e9 I" ^
输出会显示:; _, u; z& J0 q$ p/ B4 o
) C$ ~, I X- l* Z! D* Y
累计盈亏: xxx5 h" c+ |7 |; h7 J6 H; M- |( p8 \9 R
累计抽水: yyy- [, k2 }+ z7 W
-------------------------------------
* P# S! }8 J8 n7 W7 L6 }! d实例:试跑3次,
+ S I3 `8 N2 y: `% E! c& TC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py : o/ T( S! v3 o" C4 x0 Q! D @
最终盈利: -5360.35 2 R. X' c: r& s5 J
累计抽水: 5176.35
Y9 ~+ ~5 t, c# e7 t9 xC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
* h- z1 @, |- D* l8 e, }3 [: H5 l最终盈利: -5661.65
# G; W# {+ s5 K$ N累计抽水: 5174.65 0 y( z; t" y4 K/ X* v9 ~9 [9 P
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ' b d# H9 B# D& ]9 d; {1 q; x4 @0 y
最终盈利: -4244.50 " s8 H- y& k9 V5 e7 E+ Y
累计抽水: 5176.50
3 R& m6 o9 u2 }2 a
/ v) [! r0 I$ @, P. X, C3 k! z说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
5 D0 l6 Y- w+ h7 k3 f
" w- @$ i- ?( _累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
9 _" c! m6 ^0 r7 {3 s
1 B6 a* S, t) k/ X7 v最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
# l0 d/ y* {) z这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
e7 t- s" M- {* C/ q& a6 L人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
* T$ J# M: {5 y9 N8 B- k+ I4 ^但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
$ q$ q* }, ]5 H2 R2 i% O3 ~1 T7 l3 ?/ \, J% i: M
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|