|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 5 U0 I: o b; g$ v0 @) F) |
" t8 i& w m7 c. k8 `9 @9 u5 N
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
[8 h3 P& J1 KExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。/ I% d5 U7 I2 [' e
6 m( Z" o, v0 f2 O$ ?$ h2 m在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装) g: c0 d4 C& A# W! Z" A8 q' I# r
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
^: g) E! J# j& ?* F" K& C先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。9 o7 t) ]1 ]4 S* k4 n+ E
- I$ c8 D0 p3 @, J3 L& s步骤 1. 新建一个 Python 文件
8 T, x8 K0 {2 r打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
4 o9 H x, D9 V# J& o把下面的代码复制进去。
0 v' i, M& ~) H/ x. q5 J- }( K5 K" \保存成 baccarat_sim.py (注意后缀是 .py)。
# ]3 G* G! O$ R/ C* {4 f4 `( @* c9 b* f
import random- I+ I* ]/ B- @% L2 d7 i6 F
import argparse
0 h8 V k6 }$ \* k8 A
. T: n" @+ Y2 H2 T8 t5 K# 初始化鞋子. ]$ D2 P' Q1 Q5 k& _
def init_shoe(decks=8):
# F( R) I# [5 |: A J$ M8 S3 } # 每副牌52张,8副共416张! Q& ?- }8 H% G$ E# h
shoe = []* u" H* I0 C' |3 B& d+ p& H" I4 y
for _ in range(decks):' Z: L# t$ q/ V0 h: d* p
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
" ^6 [* p0 v" d random.shuffle(shoe)2 A1 S* _7 Z# \2 A# c
return shoe
/ d# G8 V5 Z- \4 n- R W6 e' l* X% ?
# 发一手, H3 {5 N/ [4 D- m4 a }
def deal_hand(shoe):
7 {0 @2 k0 p7 c+ ]* N if len(shoe) < 6:
1 d- n) L0 V/ ?5 R6 { shoe[:] = init_shoe()
6 J+ R) Q4 S1 `& h) m; \7 m: h return shoe.pop()
2 q* |4 t9 P Y, m, S' b% h) t2 c( K2 |! b9 Z" _1 w
# 模拟下注法 A7 x6 I1 ?. _) c" w
def simulate_strategy_A(num_shoes=1000, commission_on=True):% {0 k! a5 N C( T
profit = 0
- q8 a* a4 N5 c$ e commission_paid = 0
. N3 `( y0 Y* a+ ?. Y shoe = init_shoe()6 T8 N! I! i) r
) G$ k5 l* @7 _5 U- w # 策略参数
& s; m. ^: v4 z# C: r6 l sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级! |2 j$ C8 D* @! X
stage = 02 g# z8 E+ W5 n: v- S1 ]% [
target_side = "B" # 起手投注庄
( K# d( ?7 v2 J% O$ K# t
9 b/ n) b I) w4 L. m: I* a& X+ h while num_shoes > 0:) S) y) Q& z/ z& G$ z. O$ U
result = deal_hand(shoe)% V* N; k& K3 z
- o1 N7 J9 ]! q9 r& s0 `; o
if result == 'T':
* u. J6 {* V7 M" _$ Y1 ~6 R: g # 遇到和,不输不赢,重投
# x# M0 s$ ^: k7 z- O5 i: P continue K9 T, V. U9 j
/ M( D5 P* `( [- L( z bet = sequence[stage]
. M7 E M2 G$ w7 k* c7 _ $ C: w/ B8 H, p) B
if result == target_side:
& |3 P4 _& C6 e: J% O # 赢; `3 m" k, l7 @0 z
win_amount = bet+ R0 H# X: X4 g/ }
if target_side == "B" and commission_on:# V4 G2 D/ x$ P8 E. A
win_amount *= 0.95 # 庄赢扣5%抽水
, H ]! l" y. ]; K* | commission_paid += bet * 0.05
. R2 S. I% G$ H6 k7 z profit += win_amount
' C v b7 V; [1 m, e stage = 0 # reset
' w7 t$ F+ l3 ~; U5 p' e target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
1 }5 y7 S0 B8 Q: ^! ~# f else:
! {! ^0 K8 }' G" g7 L% E3 {% K& o$ ~ # 输- E6 j& K1 N; J" X; N3 {9 q; g
profit -= bet
S& x' M& Y7 N/ x) _1 F; ^ stage += 1, k) F v. f& s0 j
if stage >= len(sequence):3 z( S4 n' i- F9 d" _- }: v
stage = 0 # 断缆reset
9 o/ i' R2 F0 i- w7 n) d O3 u num_shoes -= 1; C n: L) A. F* S5 P! x. k
+ H/ M! s9 f r+ F, I" U! b8 ~8 }
return profit, commission_paid
) e5 c- O- i3 s- [1 g8 _) H# R. e& a1 n$ ^
# 设置命令行解析& y% {- u& Z# T
def main():
9 H, x( `4 u6 K* \( p2 F6 T, f( E- r parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
& m! X$ G8 p# q7 P parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")) Z% e4 N9 ]. O) w1 A+ q
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
5 N4 F' u3 O# q) N7 R' c
+ G' z( m! n2 m args = parser.parse_args()
6 V8 A% k, \9 }. L' T
5 T; G4 v+ }/ B& x # 抽水开关:开启或关闭
5 C) G# Z9 e, h; c+ r& F commission_on = args.commission == 'on'
; _4 D: H9 c& k7 ^# u. w, Z8 L
% N5 n4 Y/ ]% T& s1 R* [) n result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
- ]& }! X) u$ z+ V0 T print(f"最终盈利: {result:.2f}")
0 \& E% V' [* J; \( y2 M7 V& g6 @ print(f"累计抽水: {commission:.2f}")4 h" v: |4 Z, [% o& e3 n# }( L
4 R. L2 [* E# Z, x, l
if __name__ == "__main__":
6 q% ?% v' R3 \2 E: v7 w( A4 G main()
- ?" Q( @- k8 P( v+ ]7 ~: l U; I z. w2 i3 u" |9 ^2 X( l6 ~4 m
/ P$ y6 t0 E/ H, ^+ k5 C步骤 2. 运行
0 d. I1 _3 h6 ^; V' d2 a/ }+ c. E& m q, ?0 R1 a d) m% a8 g
在命令行里进入文件所在的文件夹,例如:% J, w G" p, _8 G' \
cd C:\Users\你的名字\Desktop
# F4 a; n" v/ l5 x/ U7 A" _python baccarat_sim.py0 _# a+ n- ~" h3 J
1 U( |- |' i7 m# a
输出会显示:: ^5 z4 x9 K. H) H' X
; e& T; e L" \2 e) D6 b& x累计盈亏: xxx
! Q! \9 I M* x! {, j累计抽水: yyy
5 q- P( a2 M: N8 H# [-------------------------------------
* h5 t& ]3 Y; P3 V( k- K实例:试跑3次,
7 ^% |6 e2 Z, e8 B2 ^& J3 nC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py y7 L* B2 V6 _* m" r3 s) b6 g
最终盈利: -5360.35 ' c# R- }* o! N D$ n4 j0 y
累计抽水: 5176.35
* O' p0 O8 F5 jC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
$ }% t) \/ r% ~) ` L& d! O" i最终盈利: -5661.65
# i, K7 D+ P" |* `1 ]; ^累计抽水: 5174.65 j: R1 J7 M0 H
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ( x0 u; z, u$ H! ~; {- p
最终盈利: -4244.50 " w& b/ L9 U, Z* p
累计抽水: 5176.50/ Q4 }' p5 i! V
* X+ X0 {; N$ r2 i8 K
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
. R. \, U, k0 u# t' w
! q% M& C7 r/ x) x累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
8 X0 A5 }+ o0 C3 {2 q J
* Y- W4 B! i# \最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。+ E, `+ e4 p, @4 u8 A' q
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。- ~4 o4 a2 w/ N3 p' h$ H
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
: L2 i3 e! c3 W5 ?2 j但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
^% s6 `2 I) M ? n2 h$ q1 e, _& Q. v* ]2 f* e+ ]; d# X! d7 r
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|