|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 4 x& u) {- x% x* K7 p
9 \5 z. j6 A0 N* o6 B1 m
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
) V5 v+ a! Y! u) A1 b+ o' GExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
% B* b0 E5 \! o8 @4 J/ {- f1 j2 ?
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)) A' d% r5 t6 m2 r* T, `
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
& S" z5 c# s8 G先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。( Q# H3 r! K2 D1 ?" F, _. M: ?
( H) c) z0 o) T2 B' E" t) ^8 i* D/ B
步骤 1. 新建一个 Python 文件
% [2 q1 r- G' j' a打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
3 B1 s% `& y# Q& {: E把下面的代码复制进去。) ?; S2 `& h* d
保存成 baccarat_sim.py (注意后缀是 .py)。
H6 G5 S5 d' t- ~" n/ Y
8 ^, ^% s5 ]: Iimport random
* e* w' \& W/ ]. b Gimport argparse
, ~8 ]6 G7 _# {# F1 i# d+ k2 R% {% t. t
# 初始化鞋子
& J; |% R7 ^& ^+ ?* {' m% Sdef init_shoe(decks=8):
, P- o; F5 L) x# g% m # 每副牌52张,8副共416张* [) d; `! T5 i" w
shoe = []
- P4 W6 F, W' G' U3 E& \( F for _ in range(decks):
j, E7 ^: N7 k8 | shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和45 ? w# X4 H, I2 J" @ O
random.shuffle(shoe)3 I9 ?! B1 [ X5 O6 f' B
return shoe
+ H d3 r& F) G0 K: X9 z) U, |/ H, K3 G- f! W
# 发一手6 Z- o; c3 i+ r1 O+ I5 X
def deal_hand(shoe):0 z2 Y' h4 @! w3 X j3 H# H0 u4 ?
if len(shoe) < 6:$ t/ k h7 A9 C+ v! K! H% T$ H
shoe[:] = init_shoe()" u+ ^: H3 z3 a; }8 G) z
return shoe.pop()- D7 q) E9 r7 Y% ~1 ~5 m6 m
1 K1 x9 |; J0 C. L. }) Y
# 模拟下注法 A$ t4 u% q5 b4 u! |- A
def simulate_strategy_A(num_shoes=1000, commission_on=True):
! k( _0 ?; @& B/ ~1 H9 H8 c profit = 07 s% b5 r! n q$ X4 n t- I3 r6 v
commission_paid = 0- N$ ~7 S5 \; M+ X" r: x
shoe = init_shoe()- K/ I7 Y0 A% _$ T3 U9 X
, V3 L( l) V# j( c! e; Q' O+ t$ a; n # 策略参数% d9 W; K: l8 ]1 |9 O
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级3 U6 m% L& j6 z! L
stage = 0
3 O( h N4 h' I. |0 }5 {$ O target_side = "B" # 起手投注庄0 E7 }: s* F- R4 t* T1 ^
0 V: |: D* E- K& z, u% n" E5 x
while num_shoes > 0:
, d7 I, F1 T L* V result = deal_hand(shoe)
: `; ^& |* q8 w; _, `
; o5 Q8 d. p( \ z$ _ if result == 'T': * I2 S( {1 _& Q' T
# 遇到和,不输不赢,重投
6 Z" Z; m: ~& h5 l8 B) y continue; T$ z7 E4 c8 e- z0 U, E
- E3 r9 ~. s/ R& S2 D, @) p8 e5 v. A4 Z& W' v bet = sequence[stage]
- u# \( Z) \7 T! y9 w& w
' Q3 e# ?' s9 M6 r% o if result == target_side:6 b1 G4 O' ?' Z* p; X
# 赢# j1 d. Q/ J; T5 X: V- @' n4 p/ c
win_amount = bet
. q7 z: [* }9 Z4 X( \ R$ J- I if target_side == "B" and commission_on:
; A( K ]9 D1 i3 r% ] win_amount *= 0.95 # 庄赢扣5%抽水
. {6 g% F9 i" m+ N) ]% D commission_paid += bet * 0.05+ h; x! l: T. }8 R
profit += win_amount- b+ [# M/ _; C+ W7 ~
stage = 0 # reset! F- ]% E. [( x! n! ]+ t( c
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)$ Q$ I! V' {7 s2 S$ A8 r# i) ^
else:
8 P$ C2 ?7 w! D; V. E5 |' L- z # 输
, O0 \$ a* P6 |$ _% f) p5 h profit -= bet `4 n8 Y; ~# X3 u7 Q+ @ J$ @0 N
stage += 1 z& F$ M( U7 v1 C1 B! d3 Z# a
if stage >= len(sequence):' j/ \; ~6 S/ h4 u+ u
stage = 0 # 断缆reset
Z+ `5 h) u& y7 K2 h9 ^ num_shoes -= 1
' |/ u7 u l0 `
, i( o- ]. |7 Z, B return profit, commission_paid
1 H {9 h: j `, Y, X2 @ C2 L, H+ s! X
# 设置命令行解析
2 T$ ~( ~4 T$ Q. j8 M( @def main():
% \+ K# c8 J* U parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
( D) m) T& D& i2 y7 q2 [4 P parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins."), B- }# e: `, F7 ?2 I7 c
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
1 w' y+ U0 w. {, z3 T, r1 ^ " H/ x& y% |/ ^: T7 L+ f
args = parser.parse_args()% v* ~5 P! ^* _7 @6 k
; w+ u3 d8 d/ I( C% D4 E& p
# 抽水开关:开启或关闭
@, L* {( ?- Y. @' J) [ commission_on = args.commission == 'on'
0 t2 }; {$ N) f' [ : Y! a2 B9 Y3 h* l7 U# g3 l
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)* Y+ o% ]6 p" A `8 t
print(f"最终盈利: {result:.2f}")0 f/ u, N0 {; n# N, |& e j. F
print(f"累计抽水: {commission:.2f}")
- z/ r; D, f3 X7 _
* h. l7 o( ?" z4 J$ pif __name__ == "__main__":
& m: h1 e5 L: y4 Z9 y5 i3 `' T main()
4 x7 ^# f1 u8 P# c. A( c1 o, {6 n1 P+ A$ U2 Q5 g; P5 \* b f
2 C( v7 ?. X2 o9 P3 K0 j# p
步骤 2. 运行
' ^9 v3 ^' A- v+ \9 J5 t# p* {( A% B5 X$ K& a9 X+ ^' A; p
在命令行里进入文件所在的文件夹,例如:
O* V3 h( f( {% ?6 @- P3 n |cd C:\Users\你的名字\Desktop! P8 c- d8 @/ Q
python baccarat_sim.py. R0 f7 {/ s+ ^0 h
* q6 I8 w0 e: S5 Y- X4 n
输出会显示:) O4 C5 E1 F' T! p1 ?7 C
. H8 Q; W9 |/ v5 B) D7 W
累计盈亏: xxx
. @# O' f# R- a" q; |0 M累计抽水: yyy
2 E" R& n9 c( q" w-------------------------------------
/ b5 X# l: H7 q3 Y6 X b实例:试跑3次,
8 K) C: }2 {! L- j& m6 q/ L1 j# eC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
) q6 X& R) d3 c: \5 m2 n+ w) c: f最终盈利: -5360.35 ) u2 v2 n4 @( W2 s5 d" S
累计抽水: 5176.35 & q( Z( ]2 Y7 r
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py f9 _& l- Z x k- G
最终盈利: -5661.65
& Z$ u- c3 U! I; m6 s' w0 A累计抽水: 5174.65 4 D% l+ w. W% ?5 S# T
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py " V9 @! I; p8 N5 d+ U/ L: ? \6 Z$ Q
最终盈利: -4244.50 ' i7 Y, v. O6 b% _& `0 b6 S! v
累计抽水: 5176.50; c _$ u* ?6 p! U& H" ^9 L
* J2 M( I! e4 _* _说明你的 Python 已经能正常跑模拟了。结果也很有参考性:* |) j E( Z8 Q. d2 G2 }9 e& ?
( r8 O& B2 N8 N
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。3 c+ G- P# U" t2 ~5 `
) L/ Z! q2 Z( b5 h. p/ B
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。 a n ]+ @2 n4 _+ I' @
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
( ^: W/ S( `! ?, U+ J5 V- A# S: P人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
- H1 N1 F# ?" z% K) I2 Q但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。7 v1 I5 o% h/ I
# A& H4 g8 T! D- o5 C6 l6 ]启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|