|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 1 X! o# o! u$ o- X
) Q. _! ?8 r0 S' D& t可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
/ j& B4 a0 ]1 ~Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
. x7 E2 w! R" [+ t5 B
+ ?2 c" e+ @. V' u7 n# S在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
+ v+ n" k# y7 ~1 v6 ^7 j1 i2 o7 u假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
4 N: a/ D- u, R4 f$ g3 @' f先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。; l- i! h3 N* c& {
# j* K% J0 s/ M/ U4 Q- B步骤 1. 新建一个 Python 文件
+ X1 ~. A/ v9 K0 b. _" u, Z* S打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
% w6 o5 D( e; B7 N把下面的代码复制进去。
" t( w, S4 Y, P4 @' Z5 z保存成 baccarat_sim.py (注意后缀是 .py)。
% p _( m. \, f6 @1 g6 n. O
& l$ V/ G* N% C/ ]4 n: Himport random
0 B1 S7 u0 A3 |, ^# _+ E( {import argparse6 @: @3 e: E- k2 a, L/ r
: _# B H+ E# x8 C" B3 @9 t$ D2 b# 初始化鞋子% B; c6 S& D, I/ n" a4 I; [$ r5 v
def init_shoe(decks=8):
& p+ b& z3 o& `4 A # 每副牌52张,8副共416张: p& C3 y( |: G1 t3 e2 k, @
shoe = []
$ P5 c% }1 [' u4 \" t6 k- \ for _ in range(decks): T: ~( A% p8 _$ h K
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
p5 o; W! I6 M* r, ~& @8 H random.shuffle(shoe)8 A& t6 H* `# `' x3 |" H( ?
return shoe) @- j1 A. n, z1 U
: _+ O, P2 B. @ z7 E8 q3 L
# 发一手8 B) I0 J4 Y8 ?+ \7 {* Q" e
def deal_hand(shoe):) \8 ]$ q m' @% u+ @
if len(shoe) < 6:$ Q+ f4 g; x5 X1 u
shoe[:] = init_shoe()
- k. L$ A& F/ Q' u. k3 k return shoe.pop()
v \/ I3 y2 d2 U# x* ^- \! F# K% Q9 C4 e
# 模拟下注法 A
9 P4 B/ J. Z1 j8 h- N# E% c* \. ndef simulate_strategy_A(num_shoes=1000, commission_on=True):
- V+ j$ G; _/ l: z8 ^8 z+ F/ T profit = 0
% X& U; p5 |; {/ a+ _& J8 } commission_paid = 0, b: @4 ]+ F3 E) W
shoe = init_shoe()
. k, N* c3 Q0 G / ?5 W! N7 [8 M+ a
# 策略参数' x) v+ C$ I) ]9 ?, I
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
/ w2 @' c5 y( Q3 j! R; ^& R stage = 0
- i) e3 c1 C+ a4 E target_side = "B" # 起手投注庄
1 {+ \9 q3 K% ^- t% h& g) }
: m( a* }; I5 X* y: D. l while num_shoes > 0:
% Y2 G/ ?9 V# C/ `6 t, e result = deal_hand(shoe)
7 p1 r9 M" @9 N5 p5 u8 D
9 L9 j9 v7 ?! |9 z: L! Y2 ^2 R if result == 'T': " t. g. R, r* B
# 遇到和,不输不赢,重投
9 z6 j- ?' p) ^ M' J continue
; q2 f/ ?0 _, b k! m8 U; D5 l( `) x9 Y$ y
bet = sequence[stage]. S3 @1 G: O& p* e
' O+ h% ?' C4 h& L& W
if result == target_side:
& M G M8 S" B3 }* Y$ w- _ # 赢9 G$ w4 Z& U P7 Z2 w/ H
win_amount = bet
( o) F. ?6 E" N; t" c! R" V7 ^ if target_side == "B" and commission_on:
! c1 `+ q- [8 A) T; t win_amount *= 0.95 # 庄赢扣5%抽水
+ F$ }3 }& Q& Q, \# `4 T9 ? commission_paid += bet * 0.05
( y! C( K# {" @9 } o& K profit += win_amount
# J' K# H8 [" l: U$ \ stage = 0 # reset$ w8 m* E/ f' i' r/ H+ q
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)$ Y2 q, Z \& R" A" i7 y8 B
else:& n, o. K- S) Z0 Q J
# 输
4 j* C# ~2 x5 h profit -= bet
, b+ W) t2 \3 w8 w; i9 I9 `' G4 t stage += 1
! k- d3 I, _$ ^* t0 Z4 d if stage >= len(sequence):0 x( ~+ A' m+ E. e9 _4 t
stage = 0 # 断缆reset
" n" N e5 W1 ~: K8 g! |6 t2 c num_shoes -= 1# K$ G+ n! X" g6 n! D
7 Q% _% ~4 X$ t; h- p- X
return profit, commission_paid7 S+ M/ K7 O) U4 @+ O# {9 Q, [2 m
% Q/ ]' G6 k; u: ~" a( L. o# H! J
# 设置命令行解析
- a, Z7 T8 A8 d( \; V6 V$ |def main():2 Y: X8 z q/ u5 Y( d" C% j
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")8 r/ j* z! G8 A, `" X
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins."): g4 u) v# X1 u. L
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")* K( a8 p! y$ t- f* R9 E% I9 u: Q$ j
* ?- d: H/ W( N$ f! ?( N0 O6 R
args = parser.parse_args()6 F+ B- k$ g4 Q+ U6 d0 V
5 C$ t' W- ?! k( ], Q7 V
# 抽水开关:开启或关闭* A- \3 x) L/ d5 @% A3 x6 {
commission_on = args.commission == 'on'- F1 e8 X k; t5 X. {
9 [& k% f$ R5 q$ a( k result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
6 ]! B, p' n/ u4 j" B" c print(f"最终盈利: {result:.2f}")) ^# O& j1 ~0 r- N- P3 Q' O) ?* [
print(f"累计抽水: {commission:.2f}")
6 N. l7 s5 B# H; [) E& x+ H; D$ I G E' i% s* n3 y$ J9 y m
if __name__ == "__main__":
7 A0 w& M) @! y$ E: w main()
0 O: c. X, W/ z' {0 I% o) }
4 ?% v# J: z5 [) P4 A5 J- g* ~0 S7 F
步骤 2. 运行; i7 ~' d7 f& |: i- C! @
! ~- A8 q$ C+ ]: K9 ^在命令行里进入文件所在的文件夹,例如: q; N3 j& B9 Z3 _9 P+ {+ g
cd C:\Users\你的名字\Desktop
+ z% |4 n0 |, a$ `python baccarat_sim.py2 ~5 b8 e5 S( C
& I# g V9 L$ \0 p" n; ~
输出会显示:" E$ q/ k, \' }) s }7 h
& a1 D) B3 M* m. u& T( v累计盈亏: xxx: r7 }1 V/ f, ]; ]) ]
累计抽水: yyy" o0 s1 Z2 Z3 y! [$ }- z
-------------------------------------
7 I6 T p! p; \) J3 E. m M实例:试跑3次,
2 _1 s3 Y/ N% yC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 6 y% y q* {5 {* p7 m
最终盈利: -5360.35 " D% z1 D4 S, C( g3 |" p1 F
累计抽水: 5176.35 9 D1 F1 @# P5 A0 i4 C$ V; T
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
+ e6 ?8 G" P4 y' q6 y最终盈利: -5661.65
& X3 r) H, J! C& P* H; K8 _累计抽水: 5174.65 / {1 }+ x3 V; P9 \8 R
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
2 O: N5 ~1 e. w0 v6 s' N( Z最终盈利: -4244.50
! K! _' D: t+ |, }% j累计抽水: 5176.506 o8 y! ]; e4 l; }( Y& h
0 ~7 E' X* G6 u7 \1 o
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:: l% [) ?6 V3 f& N: M5 L1 E# D7 s
4 l" w) C9 o2 Y+ X& S
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
; [6 ^3 P- q& c! U! f/ d! [/ C- W/ H) m, K3 H
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
" r H+ I, ~0 w/ V这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
* _. R# V; A# F人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。) z) a T. S R* x# t/ R
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。3 W$ e) y4 ~. q) w" D! F# [0 l4 Q
+ X8 H/ `6 Z0 O$ e6 o7 R: G启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|