|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 " o. h1 G. x( J: u) l
3 B9 q' H5 [9 h- C; |
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
z3 y, x/ C1 W; ?) } IExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。/ |% [4 d* i* X' r+ c5 L$ t& g
7 a# ^5 o* t4 C$ B: ]在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)' i. J: D7 @7 h- a' M5 u
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
1 L$ h- e: i) }4 r" ?4 l; K先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
" W2 u* H) o2 g* b e7 g
: m& V& j; T6 A: W步骤 1. 新建一个 Python 文件
+ X9 L( S# b7 t8 x! ~/ f打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
) z7 x; g5 k$ b+ e4 @把下面的代码复制进去。
+ Q* O7 b5 V" v保存成 baccarat_sim.py (注意后缀是 .py)。
; S- _$ A& g C5 `4 M- M; L) T; x6 Z$ C0 {9 X2 E% q3 q2 [% q
import random8 p/ z, D# w6 K; d6 y$ a
import argparse
% w* r5 {" e/ ]1 u9 R! ?/ ]; Y$ N9 C" X0 }# |9 V1 y
# 初始化鞋子
: ?! @4 d! T5 R& V" K0 D$ Mdef init_shoe(decks=8):; ?5 E- E+ h" |- I( m
# 每副牌52张,8副共416张
- M7 A$ z/ N3 l$ p4 \3 O, C3 d shoe = [], e! [+ l- d1 m; Q
for _ in range(decks):5 v- B: L$ f7 ~; h, E# w3 A
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4! J! i* W: \; T% Q# @& f
random.shuffle(shoe)1 J3 q. Z$ o* u1 Z# b; R
return shoe
2 e0 F4 a0 c" x4 o6 z; Z0 ~, w; z% w' P/ ]5 n. h
# 发一手
0 c7 \; J1 o" V, jdef deal_hand(shoe):
) u! s) h3 s: g8 F if len(shoe) < 6:1 I6 D( Q; }, J4 v* n
shoe[:] = init_shoe()# ^, X9 i* M+ `- R- r; ]2 |; ]
return shoe.pop()8 Y" R+ A" L( q: P. L" V
9 R9 `+ |9 D, _2 n# 模拟下注法 A
e2 T1 M1 }; n" h6 ?* mdef simulate_strategy_A(num_shoes=1000, commission_on=True):
& j6 U9 S1 ?, ~1 t profit = 0- E1 L1 R$ i/ I5 `! N, b
commission_paid = 0
+ P, a% E+ B: C, X( `# w5 h shoe = init_shoe()
7 x0 `2 [9 s* |- C% q4 Z
& F! y9 Y8 d9 Q! u& P5 j # 策略参数
- k9 {( ~/ J: E% ]/ R9 S sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
- W- [5 N& X; k stage = 0
2 {( o2 u; T+ G& c7 Z% Q8 n target_side = "B" # 起手投注庄
- f! o% `5 n5 |- x( p
& b# c! q* s. W while num_shoes > 0:
; F$ G3 d/ \* s+ `! {1 d7 j" _ result = deal_hand(shoe)6 h" }0 s; I( {% D* d8 F" p! ?- L
! L1 l, s+ K0 _6 y
if result == 'T':
6 n2 |. [5 Z; @) g1 Y # 遇到和,不输不赢,重投0 Y* @) h+ |4 g, ?9 C+ p3 n
continue: o2 f9 z' N4 D3 k" w; h$ G
" q1 D4 m' N8 R7 f4 G bet = sequence[stage]- j3 R7 L! I4 a' K3 |
3 y! j) x5 R! ?- E' L/ w9 W) t, c0 m if result == target_side:
, v3 d, R6 v' t! x. b0 A # 赢
! i$ e8 }/ C% k: l win_amount = bet
. g$ j; p+ w, Y* \7 W$ j0 n if target_side == "B" and commission_on:
# g# f" l) y7 @4 Q' H1 R" o g# _ win_amount *= 0.95 # 庄赢扣5%抽水
; t1 w0 ^8 s/ H+ I7 m; w( y& c; x commission_paid += bet * 0.05
) p( @( W* ?2 _' ^7 e' ^! v0 n profit += win_amount
( ?4 d& C G7 L7 b$ F& @ stage = 0 # reset. Z# C& ]+ g1 Z8 o& X0 q. B6 ?
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)6 i8 H$ ?2 C9 H: `
else:
A. r& M4 k) y$ \3 w9 n, r # 输
7 F$ w. P2 \' Z1 E2 A4 W profit -= bet4 P% T1 _7 |( E& ~3 H
stage += 1& t$ L+ ?1 E" m! y m) `% N
if stage >= len(sequence):
2 }5 p+ ~# @# l0 y stage = 0 # 断缆reset
! M2 w) u) @& G& w& B num_shoes -= 1$ V. L" T4 D; Z* u) Z
/ q6 x% p o m: Z2 K1 U return profit, commission_paid
0 M$ E2 t& p3 \ [0 x, B4 N/ M( ?5 I2 N4 ?3 g
# 设置命令行解析6 c* y- N& ?" [
def main():
7 K1 ]1 C1 O: g3 L5 Z% C parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")' k) \1 W+ D0 K3 T, t: h0 `
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")0 e6 P: i5 M; k+ L7 U
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")' D$ [1 [ ?. y" t: ^: r
' { x0 O- p1 X
args = parser.parse_args()
9 i) U7 o% e, ^3 R& W
# h4 M |; T8 }- C8 {6 O9 ~ # 抽水开关:开启或关闭
1 x8 C3 m) d9 |4 F, X! l, X& ?, y. c6 }0 I commission_on = args.commission == 'on'5 f8 E! [! f; }( E7 W! E
' A x# e/ T, M, \) b% N3 u8 T
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)4 I8 m1 a) K0 @4 a0 B
print(f"最终盈利: {result:.2f}")5 `- o4 S& C0 N5 E' Q' f
print(f"累计抽水: {commission:.2f}")0 k( _9 i3 ^0 A" n* _& `- y( `9 y
8 h, ?" |7 G& b7 h1 X! d% D' o
if __name__ == "__main__":4 a% i% Y# W: D6 i' d0 A, P
main()
% |' G: |! E% Y0 T: W! ~9 S/ m# G7 ?* M3 ]4 }% U( e% {
0 `, a6 _' P1 [3 I' V步骤 2. 运行
" ]. j0 z" K9 Z
4 \- \% @4 k' }: o; e# g# z在命令行里进入文件所在的文件夹,例如:+ q8 R/ w2 b0 K
cd C:\Users\你的名字\Desktop. v7 g+ P3 O5 Y+ B7 x
python baccarat_sim.py
+ G& r5 {/ s) i7 x+ b
* Y+ p7 I6 Q4 {# J8 g输出会显示:! o& w( K6 H. l& G; v: h) S
8 [3 }1 J3 a# `1 ?" J8 y) h" W" j: U
累计盈亏: xxx. S3 m& h: ~! k$ {$ Y
累计抽水: yyy& ~3 y4 f, K# C% S/ u* m
-------------------------------------6 ?, x: B. E" I4 e
实例:试跑3次,
( P& `# M9 u% O8 {; U' ~. kC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ( G7 q: ]6 T5 G$ ?/ O' w7 H" Y
最终盈利: -5360.35
2 v g8 \; O4 |: m& V0 f+ v% r4 w累计抽水: 5176.35
2 |# `; z7 }# `* W4 R/ a/ R- aC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
9 I9 _, `7 {! ~" ~6 N最终盈利: -5661.65
7 F/ i, p: ] K8 u累计抽水: 5174.65 / ^8 h! h6 {, A j, P
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
6 o. X# \2 k \9 ~' n, K, I; t' h最终盈利: -4244.50
9 E, D" ?+ R: g累计抽水: 5176.50' t1 O# f- I1 v% P# h& \2 M
. v+ d" t2 x# f& w8 ?说明你的 Python 已经能正常跑模拟了。结果也很有参考性:1 I6 B3 z; Y0 n% N9 T" {" j5 P/ o
; Z7 l/ x% v8 s, s0 i! C: D5 [
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。$ z7 O1 A; N2 S9 h p+ J
8 ]" [5 w$ k7 U, d最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。$ Z; q8 R- X; a: y
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
* C# w: M8 v) _人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
: `* C) P( w8 ]# Q) o9 s但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
0 e& S6 Y( p4 G- g' v; Y
; L1 T* k( ?* T/ E8 Y# Q# c启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|