|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 8 {& ^- { {# Q% u
$ s T, n6 j/ {9 T7 ?
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
* T' _& G! O: ?Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
: U) I/ y- e& z* f- d3 {# z) z
: V& n2 D3 k3 w! r. c在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
1 [* d" W# X. L, g, b* H5 y# C假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。5 H1 Q& v$ S/ j9 ]; F" U8 I9 z% R
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
6 f- d. B3 N f: R4 {1 T
. ?8 p4 O! F5 E2 |/ f) m步骤 1. 新建一个 Python 文件) |( k& T6 K n# F
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
( Y3 @' `2 i2 L& h把下面的代码复制进去。' l8 e: _+ ^, M( J
保存成 baccarat_sim.py (注意后缀是 .py)。# a4 h, @: a8 A8 P
9 H9 s- i9 @9 u: V Dimport random) Z* S% E6 M) C. n5 E/ J A
import argparse9 R5 l# O- T6 s2 Z8 ^( Z
& D$ ?/ u7 d" v8 C, }; O& V! l
# 初始化鞋子
0 a( R+ c( B7 v, s8 n! ldef init_shoe(decks=8):
. z9 y3 G$ E5 M/ a6 H # 每副牌52张,8副共416张% m' U8 K2 A6 I
shoe = []
, @3 }# G& x$ B4 b1 u for _ in range(decks):6 ~4 ^. _) X& W2 t( m
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和47 ^) v8 D2 U1 `' A
random.shuffle(shoe): e* N/ E0 w3 v* h" ~* o3 y- j
return shoe7 U2 z+ }1 f: x
/ g( h3 X' z( H0 z7 L0 w( i
# 发一手
$ M8 R" m( z; k e9 @def deal_hand(shoe):
" J* k( x; \1 I3 K if len(shoe) < 6:
! v" S3 ]# h; d y/ O6 u shoe[:] = init_shoe() i; o; m# |( R
return shoe.pop()
7 |# H) h9 F+ D1 |+ J5 r* t7 ?6 \ m( X0 B; S
# 模拟下注法 A
) _* \" u! R! E. Mdef simulate_strategy_A(num_shoes=1000, commission_on=True):2 z" ~/ ?+ }- }+ C8 \
profit = 0
- x3 V( I) ?! l8 Y+ K! | commission_paid = 0
' g( ^2 l4 j; X$ Q' n6 u- e8 r# Z shoe = init_shoe()
5 j3 t: Q) T1 t ; K7 i- m5 e$ F) s2 O( p4 L
# 策略参数- h1 f$ Y& F" N ]# v# G
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
2 I: F/ ?7 R; j/ e0 \/ U+ b4 V* v stage = 0$ p6 y* D& s: v+ _; Q
target_side = "B" # 起手投注庄
3 |" B) S1 C+ `7 l$ Y1 e- z: G8 {$ x; M
while num_shoes > 0:. W6 P6 q0 T, y2 b* L5 X" d! z
result = deal_hand(shoe)
, v( W) a! S" Y* @% k8 n) S: K3 @6 X
if result == 'T':
, W8 Y+ U# b% u& w # 遇到和,不输不赢,重投
6 R* c/ h ]- m( i+ f B/ S% d9 l continue, b8 `! E2 |) k3 D8 P8 B
( N4 f1 c6 I8 P7 b- P9 O6 s( ? bet = sequence[stage]( B& ^, p* |6 l: Z
/ U2 ]7 G; v0 W, P/ V6 r
if result == target_side:% u! U0 w5 p2 x7 b
# 赢 z6 c5 S; L8 ?' _% z7 M
win_amount = bet
& m, z% v+ e/ @- |9 X7 h5 E if target_side == "B" and commission_on:
) [; D- v9 O6 h& ~$ } win_amount *= 0.95 # 庄赢扣5%抽水) J; q) e! `# ]* F4 h$ ?' k5 S
commission_paid += bet * 0.05! B) ]6 ]3 |6 m! z6 x4 n& P
profit += win_amount
2 D% V/ Q% a5 X, b stage = 0 # reset+ ?% t1 g2 E/ L1 ~# C( f" ]
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
" P" x8 k2 f( H% V O* _ else:- a6 ]. t' V# w8 J! Y
# 输" l% c% _; ~* c; N4 G: n, ^5 ]* f
profit -= bet# q7 G3 @; G! ]
stage += 1
# u8 h( K ]8 v z# V9 [0 U if stage >= len(sequence):4 |( s- C% F: K
stage = 0 # 断缆reset/ s6 [5 Z& q7 ?5 z$ s
num_shoes -= 1
! ~7 U- m! i- z8 y/ D
! y/ V* x9 }- A& Z0 ]% V% O# s$ j return profit, commission_paid- _5 D+ X1 e- A6 g* w
- d0 b' E2 q% n! Z
# 设置命令行解析, _) c5 ~- R$ a& x
def main():. c" Z: j B2 H% u8 B
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
: d3 o' [) i. A' ~/ \) F, M% S% ]7 C parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
2 r3 W- V2 J0 J1 L) ?3 G( r parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
+ Q( k3 `$ R- Z3 a% R # I2 m+ V! a; N* F. B: b4 @# @
args = parser.parse_args()# t$ D6 M4 C0 G8 b" k
4 O* R& h2 X: l2 x. R # 抽水开关:开启或关闭
% E3 g- x# c% C ^ commission_on = args.commission == 'on'
( Z/ I: ~! T6 P8 \* A
. q, z' L5 O8 F" r8 o) Q result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
P7 B- ?5 q, ~% t+ F8 r7 I! o print(f"最终盈利: {result:.2f}")! B4 b6 K0 F( [) E+ P) K4 p3 j
print(f"累计抽水: {commission:.2f}")
8 N% V3 E% X9 o4 {2 W/ k2 O
: g1 {1 o% @% l9 Bif __name__ == "__main__":
7 o" F8 V% g2 L main(); j' c5 k6 F" e+ ?
& y; C! K% W! ]: D5 F* y r" j0 E* u1 B) C, h9 d
步骤 2. 运行+ {" W4 E4 f0 M2 }
+ q$ m( G' A; _/ @0 Y X$ T8 n \
在命令行里进入文件所在的文件夹,例如:% O1 B [( \7 g# K% Y: s. j2 w
cd C:\Users\你的名字\Desktop
# c4 n5 k% @- _# k9 Z: ~python baccarat_sim.py' D7 n# ?/ ]. Z- m/ p& Q9 m; v# h; v
$ {1 l( P+ Z) h* E6 l1 O' x输出会显示:
& t0 B1 s- O, [) K6 U; |; ~' ~/ m
: O# }! h2 U2 V! p. R( X8 x( ^2 u% R累计盈亏: xxx
0 _8 c8 I* }5 L; r, ?0 x: c累计抽水: yyy& t: K6 B# T: U& r( I% Q- z1 l+ j
-------------------------------------
4 q2 ~% l4 C1 n实例:试跑3次, / L, j. K& Y% a$ \+ @- e. R- o
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
- r1 _- I0 A1 s! C T; c- |最终盈利: -5360.35 ! _; Z( t- @6 v6 `
累计抽水: 5176.35 1 m; R. r: o: H+ `- M, R
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
]; _& N$ h- R4 x最终盈利: -5661.65
7 R# C: `1 X# F3 Y" o3 v累计抽水: 5174.65
* n+ D2 `4 j ]. AC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 6 {" r' Y' m3 c6 {# z+ c0 E
最终盈利: -4244.50 4 X+ M2 s# ^6 j2 [# Q
累计抽水: 5176.50
' z' t! G- A7 m# z/ Z. }3 ~0 f1 I! G3 S: i3 D5 T7 K5 A
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
: A* d$ A. a- m6 P6 u: U1 Y" c# y7 E4 m3 ?6 L) m) \+ M
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。1 x+ j% q1 i5 r' J+ ~
: e5 E" n) a1 S- Q6 X5 Z
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。2 |" a' d; e3 s7 W; Q$ ?: A
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
: p, x, M* S+ L0 b' d5 n8 M/ {人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
8 g7 \* B- l- I( F1 u' T但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。 `( O; A/ b6 l
: i( p" X: Q' W: \% X7 c启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|