|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 4 C7 ?2 X* f- o" [3 r/ Q2 w
5 X; k, p* u/ F7 k) R+ j9 z5 \可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
2 _ J8 f+ W Y' _/ z! Q1 EExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。% F! r W( k7 X5 E# }
8 }) z7 T+ E, s( v; ?, D: B- G在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装), X0 F8 w* N3 z, l
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
3 I" ^3 u+ I8 Z+ S5 @先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
' y5 D" \$ ?; _8 D
1 @, H" X' `2 H" @: Z2 _步骤 1. 新建一个 Python 文件
. G* l+ r; w7 f& J打开记事本(或 VSCode、Notepad++ 都行,我用记事本)0 U6 c; h' m* h L: @
把下面的代码复制进去。- D2 c; r0 ?; B0 F+ Q, x6 W. e
保存成 baccarat_sim.py (注意后缀是 .py)。
/ t4 s* {+ _2 S2 v3 x: L4 K8 x0 p5 R4 R# W
import random
" D/ x/ n& h6 [import argparse
+ O$ K ~: V$ }
3 `* Y3 @( V. R' M# 初始化鞋子6 p- o! T7 N1 q* A! E4 v
def init_shoe(decks=8):
# O7 L6 {8 @+ \: t # 每副牌52张,8副共416张
m+ ~1 r' P4 Q& Q b. Y k shoe = []
) w# K& U) Z) V7 p7 a; ~- E) t for _ in range(decks):% b* ]( X6 d( D4 Z) |
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和49 R+ ^! o: F% a' |
random.shuffle(shoe)
1 }8 s. g% N( \0 M. z2 h% m return shoe
9 y# L2 P8 [( W) K' ]3 v8 o, z4 d3 h, T; u0 X( J1 t' C: H" ]
# 发一手" k: m8 M/ m) q" n c; r; l
def deal_hand(shoe):
4 C G/ {" k# y% a if len(shoe) < 6:
% m# T& T+ y6 |( f. w shoe[:] = init_shoe(), L0 Z8 {3 E5 a( y9 q! Z( ~
return shoe.pop()
% R i, V1 N! O; q! K: I4 J1 S6 f2 l6 U% ^- H
# 模拟下注法 A
5 I. Q3 _- F. ]0 g6 edef simulate_strategy_A(num_shoes=1000, commission_on=True):7 l5 `1 f6 Y' l/ p) l
profit = 0/ K+ N+ P# `( C. g) y4 }8 x
commission_paid = 00 ^3 E O* O' r
shoe = init_shoe(): K9 T0 h" @; O1 R. G$ z! X
' r- j" ^( q2 y5 Q( S* _
# 策略参数' o* W& b+ Y% n/ P& c
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
! m% p' X3 b) N' p8 k6 y stage = 0
8 X) u! K+ f( L0 W9 w target_side = "B" # 起手投注庄
}6 }/ k( `3 q. K z- i/ E
- `, s( a8 \' J6 N4 C while num_shoes > 0:
+ m6 e$ h& F7 h3 J. f# X) Y result = deal_hand(shoe)) T. ]9 ^( }1 g4 N" P, A% H9 C
" T: Y. W. x6 F o6 r1 A. h6 e
if result == 'T':
, G5 w; X: h5 X8 ^: E # 遇到和,不输不赢,重投2 p! g% r- a K* I: M4 l
continue
4 Y/ A, f) ]# F
! ?8 j* {% L. }: r3 I. C& V+ N+ E. D bet = sequence[stage]4 D* j, x2 A" b6 v$ A/ U* W
3 K" e9 b7 E: C" k; x4 O if result == target_side:4 Z, X; x' c; W3 i6 x$ y, m& g6 ~
# 赢* E8 E# t$ k6 p# e+ V5 y
win_amount = bet1 e- ^$ C% E8 [ X6 V; V
if target_side == "B" and commission_on:9 q9 F5 |; J/ H4 M2 {+ D
win_amount *= 0.95 # 庄赢扣5%抽水: ^; [% s, D$ u& j& B; a
commission_paid += bet * 0.05" b2 b) I& w, \0 W! q/ |
profit += win_amount
3 E% U, _3 y- |- k stage = 0 # reset" F: e) m& K$ p# F8 l2 K, F, S! h
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
* [ Z* }. @ u! v( E5 k" g( t else:6 d1 f7 C6 b% t- q2 ?
# 输- F) j% p3 \2 G% U# [* F. |$ A+ q
profit -= bet/ P1 p6 G/ z% X$ e, T" F
stage += 1
) o; V( }' `* ^$ J) p if stage >= len(sequence):
4 Z+ r L& R' O; r# y6 Q stage = 0 # 断缆reset
3 j4 W- ]2 A, n2 [! U1 [1 V& w num_shoes -= 1
; h+ G8 Q0 j1 X
# h# G1 _$ ~4 y: G return profit, commission_paid
. J+ M" L) D x/ P* B, j5 T) J6 z- H- U: T; ]
# 设置命令行解析 y8 I+ |" N9 t3 }
def main():- @: t: | d% T! _; [" j9 k- J
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")/ e# n9 M/ J' P q- W2 Z
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")6 k$ |8 G& l6 T0 c
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
. m8 I3 R. l& B3 N, _ ' T) Q$ [ F: |: g
args = parser.parse_args()- h- y* \3 E0 v U( g' ^) e
, I5 k5 @; @0 W1 U: a. B/ N4 h
# 抽水开关:开启或关闭
! o( k ~1 S" [9 e* t* C( A! L6 Y commission_on = args.commission == 'on'
( |3 o' p5 k, A# y9 t, s
- u6 Q' T* p$ ~: C' X4 U- T; ] c/ t result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)8 A; q/ b5 t2 Y2 Q" c$ f) r
print(f"最终盈利: {result:.2f}")5 V2 J8 @% h7 s6 ]* ^& j" W
print(f"累计抽水: {commission:.2f}")
4 s5 a6 d) ?" }7 J* y7 Z" O
, P0 P+ a2 e4 |& _4 F# Yif __name__ == "__main__":
' u" l3 u! E2 x6 n main()$ A8 E5 f% v: {
9 b7 f5 I0 |9 z3 c, W
5 T: u, a/ U+ W- h+ m! V: c$ }: E步骤 2. 运行 \5 T! n+ w% P3 I
) G/ z q6 ?, W" j9 y `3 k
在命令行里进入文件所在的文件夹,例如:
+ q7 \9 [9 }4 e7 scd C:\Users\你的名字\Desktop
' S Q; d* J# ?0 v* e$ ~% g$ dpython baccarat_sim.py
8 l. C- K. j6 O* Y0 ~" X& |0 i7 [" o$ f+ c$ i6 d* T
输出会显示:
8 R+ q3 R0 D& {2 h6 g1 j* z1 H% |
累计盈亏: xxx
+ K7 k/ A; R8 Y# m. f累计抽水: yyy# b/ @/ r6 {& x8 V
-------------------------------------
7 N) V. b) l+ Y) n2 d实例:试跑3次,
4 A, x& I) Y! T* |C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
; x- C& Q0 m4 M6 o! m4 q2 z最终盈利: -5360.35 ' X: A( ?( E) _& b! J$ ?- x- R
累计抽水: 5176.35
( _$ i) y" C- q+ k& h) XC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
( _$ c( V% E5 o6 {, Z8 ~' }5 g最终盈利: -5661.65
! G' T/ L; ~' n4 ?! A# N6 r4 P2 m累计抽水: 5174.65
' \4 ^+ q( Y/ H F1 z, fC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 K! d5 V5 `; o0 C0 J最终盈利: -4244.50
& I7 ]1 h- |' X! L累计抽水: 5176.505 i! C: C+ U6 t
. Y7 i, W f: a: {$ m# C8 M
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
4 ~8 {5 H' r: k6 u/ Q# ]" ?4 X/ O1 Y; A# Z7 t* h
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
4 Y t2 r7 l/ X! m9 {: I9 u4 y4 Y: x3 `' Y. j1 j3 K
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
' P: J* @7 W) q6 u0 `1 [) @这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。; M& N- R) v. w- f- z8 U
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。6 l) k8 X* D1 d+ N7 W; V
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
1 q6 Q4 G% J$ N2 O- {) H4 N
' ]) i. X7 ]- Z5 q+ y2 n启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|