|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 . r! q, p6 S6 q: I
; U+ A' r8 H- \5 T& ^$ Y2 }/ T M
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。% D% d7 L& T8 N- i
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。# q# \/ N: U# s9 z6 T
/ w+ Z9 y# x7 s在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)9 f! r b) r1 y' O
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
4 M8 |% U! P$ ?! Q3 r6 m先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。8 x/ O' Q" a% ^3 Z
; o& K/ D; n; n步骤 1. 新建一个 Python 文件- D8 a4 q' K2 f' a, _' e& i8 I& D
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)2 S7 q, k0 w4 T9 e5 I# l; n
把下面的代码复制进去。* G+ W! u1 y+ v) E. u; X6 i" \3 S3 m
保存成 baccarat_sim.py (注意后缀是 .py)。
0 k N7 a2 x2 x# f9 B& ?0 U0 V" o
( u& F$ q& Q W% Z2 s0 y/ zimport random
/ w: \! B' q; u8 E; bimport argparse' P7 X7 n9 n% s0 h
% M( ^+ U# o! ?
# 初始化鞋子
9 `- w @7 q+ O3 ^' c: | Z1 ]def init_shoe(decks=8):
$ D) Q+ D1 k0 d1 ^0 E0 v # 每副牌52张,8副共416张3 u7 p) s6 s8 Y) j& N
shoe = []
, [5 [4 g$ \% L' c for _ in range(decks):
r2 M4 E# P$ V, w6 W% P shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4( P# Z0 @0 }/ b6 U" O' A
random.shuffle(shoe)
- Z% A5 t2 _0 s! k, m return shoe
7 [6 `2 F+ [; K5 H/ \; E6 p( t, ^* j$ G
# 发一手
/ e- d- o* Z# n8 rdef deal_hand(shoe):
E% @9 t% Q9 w+ k if len(shoe) < 6:
* c6 K4 H7 e" A9 s: M+ t shoe[:] = init_shoe()/ ]6 V9 t6 `& B) g0 q+ P! K) J1 W
return shoe.pop()
4 w6 a5 `6 z! j
& Y8 L; D& F3 G* k6 J; v2 `1 a# 模拟下注法 A* r5 Z {2 O+ D' j
def simulate_strategy_A(num_shoes=1000, commission_on=True):
' x8 {7 l7 f; _7 o- @6 [% R profit = 0
1 _3 p9 E+ _+ n7 W# W( ^2 x( a commission_paid = 0
/ ?8 v! V' s. C8 ] shoe = init_shoe()$ y: V& F" T# l/ f' I2 l2 l$ p
/ D# R0 I M- L2 i" Z7 V+ W # 策略参数5 `/ x3 f% T, d V" D8 V
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
- `( s$ c9 l5 L& `% m) ]& `: j stage = 0
+ S$ g% h9 V1 ` target_side = "B" # 起手投注庄6 a+ t! f0 v$ E6 C
. D% Y1 U% K) Y; m while num_shoes > 0:5 Q* A' w: I1 h* F
result = deal_hand(shoe)
/ J V, j& X# H( R" J/ h9 u4 @- g7 @: P/ p2 k: j* K
if result == 'T':
) s/ \, W& s& A/ e- z. } # 遇到和,不输不赢,重投* h: C, @# i% }6 E3 P
continue
1 h! l2 e4 l% L7 s% `# i( L9 ~- A2 m/ n! s
bet = sequence[stage]
% V' m/ w# C0 ?4 e; H
0 T6 `/ C# Q3 n: _% d3 Z1 @ if result == target_side:% P5 s0 t. \ t" t5 d8 @ Y
# 赢0 ]$ J2 b, M7 e! h# u" l$ S" \
win_amount = bet( ?! c a' D% z! x. i+ C& M
if target_side == "B" and commission_on:
5 G( z- F5 o: v5 s* J0 p7 { win_amount *= 0.95 # 庄赢扣5%抽水
7 r* H9 N3 [3 C0 m5 q commission_paid += bet * 0.05. T" U7 B8 u, M% q
profit += win_amount: O% H( ]/ [: N- C8 W
stage = 0 # reset
8 C5 b2 x ^% m C( b target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)1 i9 h+ Y9 c( O! J1 s. l
else:9 P% F5 ~' p- y2 p1 L
# 输
7 @1 ]8 j. I, e: A' F' g profit -= bet
3 Y; L* H! p' T/ H2 g stage += 1
# A _* l' z1 U- u1 z if stage >= len(sequence):; l% M& i! _6 J0 B
stage = 0 # 断缆reset
' u/ K" P1 b5 F; \% F( Y num_shoes -= 1
9 n" H# g& G) q; e& c5 x- D, ~/ u$ K/ Z* y" _
return profit, commission_paid1 x; F0 n8 x$ f/ `
' d8 [/ ~9 L4 ]7 E5 Z
# 设置命令行解析
3 Y! @2 ]: L* I$ ?def main():
5 j. N* M3 F! y8 `2 X3 P: K parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
" u7 N6 Z, U- c# u" l4 k: ?9 X$ l/ N parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
( \# ]* T/ S, ^# s* G' E- c parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")) L& @3 m! l4 }, G" q% W4 ~
Z a* H) y; X8 _& g
args = parser.parse_args()
6 c# x3 t* G; i+ H, i. F
6 y0 ] k% R& m$ w4 T& n( a # 抽水开关:开启或关闭! R3 o6 [ }# d x1 X
commission_on = args.commission == 'on'
8 Z- `1 Z2 G" p6 [5 M, _" r
/ H: a' @# @4 X+ M: S+ T result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)5 A P! S/ x8 z0 F% c( {( {/ K
print(f"最终盈利: {result:.2f}")
9 B; B0 n( \. D6 x print(f"累计抽水: {commission:.2f}")
1 r# d% N8 t2 J7 p4 ~# d
- v' K) k7 Y( r/ L9 z# Jif __name__ == "__main__":
" O+ `2 @3 {. \# } main()
6 w' P+ ]5 x/ w2 [) B
* {9 @7 \# w* V7 h, _! v+ F) ?! ~! N& x4 @5 R% ?- N* g
步骤 2. 运行* F2 I2 f; V& P, N6 T1 v3 ]; ]; h
: g2 \4 k1 ~8 |5 m, M) T4 G8 m- J在命令行里进入文件所在的文件夹,例如:
/ h) N* e& u. l; _( ^+ Q% _! Jcd C:\Users\你的名字\Desktop
( o$ s" a* |% D- J$ k H) j6 a% P! Wpython baccarat_sim.py
C; r, T$ ~" m# H6 A2 B
' h! \; j9 S! ~, |输出会显示:7 ?) s4 k. \* r$ L9 y$ |1 w
/ C# m& S* W2 B5 [( V( w累计盈亏: xxx
8 x0 e# R) |) k. q/ a累计抽水: yyy, i d; s: |$ t( S
-------------------------------------
4 \2 ^1 i. P) x2 I实例:试跑3次, 4 W9 o# j+ I, ]: x
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
- ]3 I; K w/ Z/ G; i) P9 I$ Z" X最终盈利: -5360.35
" R2 y! i m8 U# F累计抽水: 5176.35
: F# a$ e" a2 v1 i- u+ D- Z6 DC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py & k2 h- I9 K8 C4 Q/ z5 \2 d
最终盈利: -5661.65 0 k$ ]# I8 R" ]4 c( j
累计抽水: 5174.65 # j. U$ D" _* c" O, H- U' U
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py " j! c. A) c8 k5 J& B# K! |7 b
最终盈利: -4244.50
- c/ M; X, b% a$ \+ o& c9 a" K累计抽水: 5176.50
% p9 D$ r6 E! i& ?
% D" y! Y. Y3 z) @+ B! u s说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
' x( H! P/ S; e7 ]% r0 B: ~: E( Q
8 ]6 ?0 Q4 j3 f# [) R& h: ^ W累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。, Y4 l1 v2 s4 w- |1 K; u- D
9 p' B$ k/ L6 o: z" @
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
: S# V) q1 \0 G# E这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。9 [& y) @! [; [+ G5 X
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。- I4 D0 X. [5 X) Q. z
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。3 Y' x1 A5 Q; v; b) M3 \3 G( S
$ e: A8 F4 g' V启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|