|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
( J' U- n' S; {0 {
& O; f/ W6 K" y, |可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
2 b9 s+ z% e4 rExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
% l4 k9 O4 \ G; P: m+ L! x/ c6 n% |1 o5 l7 G/ Z
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)2 q# q! J6 k8 P t6 |+ @- f
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
4 s7 `: e8 Z0 V3 x; ^) v先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
* Y3 Z# I: l! Q& z9 y+ d7 Q% o. v4 |" r4 Q% i) L2 k' X% |
步骤 1. 新建一个 Python 文件3 t6 k/ h9 Q1 ?; B; j" B3 \
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
& u- h. l4 k. P s6 O把下面的代码复制进去。
- M/ n3 a3 @. e& y' U保存成 baccarat_sim.py (注意后缀是 .py)。( y- a) V9 n( X5 A# U& j2 K
: V% C+ `. ^* X8 O. N1 Ximport random8 ^5 C# U+ |! @ P @3 a$ C
import argparse
3 c8 g2 D, a; E( L
' F: N7 R8 T- ~+ j* z- q# 初始化鞋子
]7 s4 \3 Q: M4 k5 G4 T1 hdef init_shoe(decks=8):
" j% o4 d, R9 |$ l' j # 每副牌52张,8副共416张
+ V& v1 Q$ g( O, {9 b shoe = []7 \4 B) q, A1 \: {- Y7 y! y
for _ in range(decks): O9 m7 l* z6 {7 O
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
& L. m: S5 X5 F3 L2 s8 i random.shuffle(shoe)6 Q& B; b+ M8 f( j, x
return shoe7 F' P$ g# W. A, j
7 `# y! M \1 R( D1 z4 p# 发一手- v6 g( V/ V; e7 N1 S8 ]7 F7 D
def deal_hand(shoe):$ W4 I: |7 e' c. Y. j& T* E8 g/ o
if len(shoe) < 6:, i8 s! u7 t/ u( l, t5 b
shoe[:] = init_shoe()
W5 l9 n6 y' d; A& a4 K. j! F return shoe.pop(); C2 q- ?; M" \# k/ D+ o2 M
7 z* p }4 G5 {' C7 @$ V# 模拟下注法 A
d8 \; R' W" K' g4 U. Mdef simulate_strategy_A(num_shoes=1000, commission_on=True):
) g& }0 Q* P1 _( Y. \. M profit = 0
0 |& |6 X2 f5 \- S commission_paid = 0- l2 p3 ?! J3 v" e( U D( Q& B
shoe = init_shoe()9 F# g1 R& M9 M( a9 X
& E9 F: f! f' A4 k6 ^$ W # 策略参数5 V1 w7 {8 X! X. E" G
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
7 ?1 d2 r( ]) j( Y, U stage = 0
, i. t# R" L6 R3 F3 o target_side = "B" # 起手投注庄, m! w0 f4 D9 i+ r% k8 z6 R: Y
4 N4 S8 \* Y! M+ Z while num_shoes > 0:' _7 w5 z4 N; N1 Z
result = deal_hand(shoe)8 |0 ]! R& E$ c9 N" o+ Q5 S1 E
7 o, y7 c$ g$ J1 _* I3 Y3 \$ w
if result == 'T':
& A$ W6 i2 q( N7 S# A& g # 遇到和,不输不赢,重投/ P- E% D- d" W: z
continue8 j$ y8 {! S O
. K5 Y2 b, _; K
bet = sequence[stage]4 f, G: n# M' a; {3 {) V
4 o+ A; o6 U7 J# j3 T3 v
if result == target_side:
* R/ Z! B5 ?* W5 Q; T+ S4 H # 赢
/ l5 W) I( [& r4 `5 i8 A" | win_amount = bet
J& Z! S! g2 Z9 {* s& J1 n* x if target_side == "B" and commission_on:# k' b% y K# ?; L" @# T0 [! [$ @
win_amount *= 0.95 # 庄赢扣5%抽水! }/ f: d1 a4 X: d
commission_paid += bet * 0.05" Z: T3 W5 O; i" _4 d" j d
profit += win_amount; o3 W. t" t, B7 ^. S* W# u
stage = 0 # reset
& V* } V. u2 O. o/ } target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
8 S. G7 ^ e0 `2 m1 q9 X. O else:6 Y) y+ y8 `5 @6 d6 w
# 输
0 F- ]4 U9 O4 z; i6 {" d profit -= bet$ u( g+ Q0 F0 o4 m( c! m7 v
stage += 1- f- ?/ v9 p0 j% P- t. m7 `* ]' j4 m
if stage >= len(sequence):$ p8 M+ E* `+ r5 s# [
stage = 0 # 断缆reset* c a, k# G J/ l, Z/ w) g- v
num_shoes -= 1" l F! t- z) y5 R
0 S$ ^4 K* L6 j- d
return profit, commission_paid
! A0 k5 x- e6 X9 L4 A8 E! ]
# z4 I2 {+ c4 i, G7 n7 \; `) ^# 设置命令行解析
$ n6 W7 m0 m" M' u1 k6 V; ^def main(): J M; ~! n2 t! i
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")& f" n3 U* H+ S7 {& W q6 {$ @
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
1 F, m; L4 v& \ parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.") j; L5 ~) Z7 K: [- \/ d) R7 M
- ]8 b, b4 V' ?
args = parser.parse_args()9 C- k/ a. X! \/ m7 |! }/ w0 q
# y4 X" W! a* D, }% G, n
# 抽水开关:开启或关闭
& f( D# m7 W! I3 T3 Y1 N: l commission_on = args.commission == 'on'+ k- f4 v: w9 ~1 n8 U
- }8 R6 B" z; R0 A9 N4 l* {
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)4 ?% m4 Q8 e' V( c
print(f"最终盈利: {result:.2f}")
' z8 e6 Y7 O l0 [% h6 F print(f"累计抽水: {commission:.2f}")# y: }6 _- W4 M: _
" M2 e. |4 d j; x4 m, `8 }& ^5 Yif __name__ == "__main__":2 |6 S4 }+ Q3 r& V: O7 x
main()' V; W3 z5 M; Q3 m0 Z
9 ]0 z. t5 Q2 v$ y
5 r, r* ~, j) P7 R步骤 2. 运行 {4 N' ~ [ j
) g' L0 m N# F9 {" T2 d0 y+ m在命令行里进入文件所在的文件夹,例如:6 W! V! m" }( V3 H. g" D" b
cd C:\Users\你的名字\Desktop/ e9 R' g9 s9 c Y6 n& V
python baccarat_sim.py
, w; ]& ]( E: q- k( r- i
2 `$ V& S' R' t# b( M- j$ r a输出会显示:
8 f3 T5 U ~" ]
" i$ p5 O! l5 P) Z7 N& G3 C累计盈亏: xxx8 J7 S! c8 Z4 i! {
累计抽水: yyy
, J/ C% [2 F$ s& |2 l0 k-------------------------------------
0 `* J1 B) ~: @8 G$ L实例:试跑3次, ; |" }) R" u# t* s! l; X4 t8 U
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
" w( E% [2 W3 m( e: Y最终盈利: -5360.35
" v( b) s) _- i累计抽水: 5176.35 % V, ]8 \; ]7 q! e. j% j
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 5 f1 c" f$ P- V
最终盈利: -5661.65 1 o7 w, K. ?* N
累计抽水: 5174.65
/ c6 H+ G$ ~) @% }) k# r$ O; vC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
6 y6 p- H) ], |, \4 l2 g: B最终盈利: -4244.50 8 T0 ?% T( ~( k
累计抽水: 5176.50
( M6 E6 a( w l# x5 ^
. R6 O0 Q# f* X/ Q6 Z# L9 E说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
1 Z! {5 i. E, M$ V2 t+ E
/ v* c: d0 n0 M6 ]4 X累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。+ }- q( r! P; x! l! x( h# j. m
' K3 L, P9 u$ e0 m1 k最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。1 y: U* v0 ? R2 W4 y5 ^, G
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。4 b' b/ V. I0 h( M% ?
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。+ L/ f3 }# k1 w9 m
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
" ?1 p( m6 b6 M/ l: G
- i l$ V* W* ^7 ?3 {启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|