|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
1 ^/ A( Q% I: D: h" K9 a" O* `; ^4 w. k3 ]
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
' X, @9 Y7 p2 O+ {% }1 }Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。; X6 \# N, f1 ]1 L0 H d( \ H
* D+ C6 x. W% J& Q! J3 g8 {
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
' K' V% L5 ^$ n- i9 ~0 F: N2 o5 X假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
& }1 @$ ]8 `) B先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
& t. Z/ H7 m! y7 \7 A+ T7 |; O2 Q8 Q; e; O3 [+ W y* Z {
步骤 1. 新建一个 Python 文件+ q$ w! H0 c7 T8 ?; {# g* w
打开记事本(或 VSCode、Notepad++ 都行,我用记事本). O5 i- q6 a Q, r+ v, D
把下面的代码复制进去。
% p& v2 Q& x$ z) |* t保存成 baccarat_sim.py (注意后缀是 .py)。/ F* C1 E1 K' \: I: x5 { g
, n0 {% R% q4 ~! E$ V. nimport random9 D) ?- m6 l: H
import argparse7 \. E D* U7 H: d# ^2 n( Y9 {
; ^0 o$ B1 c3 ?; E
# 初始化鞋子
4 A. m5 h: p* L2 ~def init_shoe(decks=8):
. u" ]( H) x5 U; m, F) s: K # 每副牌52张,8副共416张+ n9 k3 Y6 a+ a6 X& N7 ~3 w# @3 h/ f
shoe = []
& v9 E% E' ]7 w2 x/ m3 B for _ in range(decks):
" p; T8 i8 ?2 s6 D shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
, ~+ I, l: V' P random.shuffle(shoe)9 f! f, E9 T3 J2 I: i' `' {
return shoe
6 Z; |5 B" _( r1 S+ L& S
, @4 o/ X' g; y# 发一手
6 b# E A m4 `def deal_hand(shoe):9 H5 ?) |3 @* K1 o% R g
if len(shoe) < 6:
, a5 g ]' z- f1 N9 I* h shoe[:] = init_shoe()
& ?+ a$ D9 k7 K6 Z/ [ return shoe.pop()
6 Q4 R% |9 y0 ` D1 Y2 k9 D$ X) G8 C/ D; [1 R% l
# 模拟下注法 A! r6 K: I7 _6 J. ?) u
def simulate_strategy_A(num_shoes=1000, commission_on=True):
, m# i- L- G- ]4 ^ profit = 0
& Q) X1 g$ `0 U0 o commission_paid = 0( i8 j( _2 E1 W; C8 D& U+ B- m
shoe = init_shoe()+ I( O N1 O, p- a! O# a
& X5 ^$ g& [: O u" i
# 策略参数. n8 Y, Q2 R. x) {7 C' \
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
, ?1 B7 U# |! l" N stage = 0& l" p! b# }5 v0 J" g: g0 P s
target_side = "B" # 起手投注庄5 z% I5 z- m* v
, d, v4 _# F. w9 \; @
while num_shoes > 0:* R" Z/ @" [% Q- F
result = deal_hand(shoe)+ Q, @# X! L# ^" j
2 Z* a: V- v: u e3 a1 \1 t/ E
if result == 'T':
$ |, u; `, p3 V3 r5 t7 y, v # 遇到和,不输不赢,重投( f, ?! j: X( I' g4 y) R# G
continue
4 ]: b4 E; W) z: |1 X. [# P/ h, d/ ?& g$ Z \
bet = sequence[stage]
& l/ s# ] L! G4 W+ B, M- N. U7 x- i 6 C8 `" ~9 f h/ c
if result == target_side:
' y& c: }) X/ t" T, F # 赢
2 P) Y9 @( y+ b$ ~ V" Q win_amount = bet
* @% Z% W/ N/ V1 B2 V4 w1 k if target_side == "B" and commission_on:
) u' L" h/ z5 q) e9 h/ m win_amount *= 0.95 # 庄赢扣5%抽水
, m$ q: Q) E& P/ m9 l3 T1 i commission_paid += bet * 0.055 v7 |( n: S$ c0 u: d9 S
profit += win_amount
8 ^& t# ^( A0 v, ~, t stage = 0 # reset" ]+ ~) ]+ q5 {
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定); k1 T4 B5 H# n, o* o2 a4 m' m
else:, j# \8 l& \1 t# Z4 K
# 输
& e1 Y# Q5 k* I( O d4 B3 G profit -= bet
- T- f- n. T' t stage += 1
* h" d. }$ o2 a# o if stage >= len(sequence):
0 x; M4 J, U$ U+ { stage = 0 # 断缆reset( w. y R; B4 @: o
num_shoes -= 1
- b/ [+ q E5 F$ E! W* E; p' J3 d5 o( B9 E0 V# j) k5 C$ P+ {
return profit, commission_paid# f4 l$ P2 O6 A/ y: [
9 [# c# b) a7 ]+ ]
# 设置命令行解析
0 U. a3 w6 Z! A/ P; E1 Bdef main():0 ]" v. B. i6 `" n: @5 Z9 P- {
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")# ?7 Z) f0 P# e; Q
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")% ]9 m% @, I) a- s' ^* y P
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")& J( ?. a& B: Q- F7 ?1 f4 v
* @( I! b! ]& E; D+ u args = parser.parse_args()1 k5 n6 \+ P7 ^, m; i
7 f9 t; `8 n7 {4 S # 抽水开关:开启或关闭
! s G& c: H" L& F; s1 u1 s commission_on = args.commission == 'on'
+ Q' I3 D" [) H+ \ + U5 a# ~* W4 T8 d9 T- q& U2 E" R
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)) @7 X3 P# l; l( a
print(f"最终盈利: {result:.2f}")
/ a$ |. j, @4 S print(f"累计抽水: {commission:.2f}")
6 o& }3 H b' ?3 v; v
1 }. j+ R8 k0 ?4 b8 eif __name__ == "__main__":* b, g3 U6 J7 a7 k% M" R
main()
0 ~3 [* s6 C$ G: \
# k" z& o# r5 }. g ^/ Q4 z* \" s7 o/ n2 u/ G! p
步骤 2. 运行
. k! y9 o6 N. j7 }' b5 [7 A0 B5 w3 R2 `) i9 g
在命令行里进入文件所在的文件夹,例如:
( z! e/ j" [/ }" a5 A/ p: c6 k+ ~cd C:\Users\你的名字\Desktop
1 K; m/ U7 a- S' O# W% Dpython baccarat_sim.py8 Z: p6 d6 |( M* S% m% ^/ B1 I$ C
! f3 i6 O6 L7 O; v6 k输出会显示:$ L) }3 v3 B* V `+ r, K5 c5 u6 e
- O/ J4 e8 h- R& r# k
累计盈亏: xxx
' M/ D1 I+ d1 x$ m累计抽水: yyy2 P! ]/ U8 g8 ?& X
-------------------------------------
4 \! H' J* B8 n1 `9 s实例:试跑3次,
( j# [; c; ?4 @$ ]C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
( H1 m& P E1 K" G最终盈利: -5360.35
& v& `3 c* {0 ~4 V) q累计抽水: 5176.35
, [6 ~* q0 N& A$ R: q8 h% D0 ^C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py : ?5 Q8 _& I% p2 o. h
最终盈利: -5661.65 4 U. Y, {& A, K2 _, k# }
累计抽水: 5174.65
: |! C, o# c+ k8 ]3 cC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 6 G3 x+ c! s9 Z0 W, P
最终盈利: -4244.50 8 h! U) C7 c6 p& s
累计抽水: 5176.50
- w4 s* J) S$ N6 Y c% E( B7 Z5 M% }5 V N' _) ~/ Q, H
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
5 @( q8 E$ q( P, c6 s& n. |0 ~% a7 U5 f5 E
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
, X' U. ]! C& T- N) C
' H/ X% q3 |, k( m3 W+ C, @最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。/ d% K# U! V/ f& h8 o! k5 G9 d
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。6 v1 h( x9 y! N$ @8 X' L: n* x$ a1 L
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
- l; ?* ^% f b! T" r1 Z4 c& C, M% N但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。8 x( |8 k" C, X
: P; p3 y. w/ s) A启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|