|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
, i& a" B z. \! X1 S$ b1 n* b8 V+ h7 y. q: ~# w, v
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
! p* B W$ S8 f Y3 \Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
0 b K1 a8 W' ~7 S- X' m5 p: t4 f0 J, g0 A/ J6 Y3 M' A5 s
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
; ~& `; `* U7 j- D9 t假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。6 o0 g& l7 L" A% j3 u1 h
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。7 T2 I' M4 t7 F
- J0 h0 e! y* L- {2 ]; o$ b! R
步骤 1. 新建一个 Python 文件
3 P; ^. `1 j6 ~9 v; D* T- I1 e打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
: | A. h j8 j% T- N8 {把下面的代码复制进去。
8 ~) m: r1 N, t保存成 baccarat_sim.py (注意后缀是 .py)。
+ q' H; A. l. L! i+ Z# X' u2 A, p# `. m5 G G
import random
6 `$ u1 d( D# V% K) q/ qimport argparse
5 @# |& Q% W5 m" x% P$ C1 r% l& C5 ~) G+ \: F+ b
# 初始化鞋子. R/ g) V) R; J3 o' L+ S
def init_shoe(decks=8):
[6 x& W- e6 G7 D; M d # 每副牌52张,8副共416张$ C# k0 P- |$ D+ ^* M$ r, z% Z
shoe = []
4 Y- n; K% M& E/ Y5 h- O: R for _ in range(decks):
" u- K, x* i2 U7 r7 N8 {, | shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4* E8 h( C2 W4 T: {2 M
random.shuffle(shoe)
/ r0 R: U) O4 t0 U0 v8 k3 I return shoe
$ X# O+ h n* W, V, _
" b- t/ R, F( E* P) B# 发一手
0 I/ a# ]0 F2 Z3 Rdef deal_hand(shoe):8 n7 {, V8 Y% s/ t
if len(shoe) < 6:
+ Y/ X2 x6 y( U shoe[:] = init_shoe()& n, [" X9 V5 A* {2 s; u- ?2 t3 J
return shoe.pop()6 V! \3 [+ V/ A6 |
/ `; @" J) p8 A7 o3 N# 模拟下注法 A% l9 k; i1 m8 [7 f( L6 }2 z
def simulate_strategy_A(num_shoes=1000, commission_on=True):
) [3 D2 @# l7 f0 G2 I/ M profit = 0
+ h) X" v& W3 Y1 f commission_paid = 0
p5 I6 N# n8 |( i# { shoe = init_shoe()1 r/ f4 b+ ^5 Y) J
' {& z/ J+ h7 B( V+ p: \
# 策略参数) i+ ^9 R- r" x4 ^# h3 P
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
( d" U9 v3 K: | stage = 0# f) _; g8 M% K# L; s
target_side = "B" # 起手投注庄
5 d1 O+ S7 A% A" n6 K3 j7 P7 n3 Q5 H" X! _5 p( L7 ~- @
while num_shoes > 0:
6 R9 B0 J6 C( l' o' a1 A- s8 o result = deal_hand(shoe)
l) x/ U& s; `4 s9 K: d5 I2 h
( E5 x8 j m ~6 X if result == 'T': : |1 H( t$ O2 x# e2 k) L; R
# 遇到和,不输不赢,重投
9 O: D( L6 X9 j# b continue, w2 U( `; D* k
) e0 r+ ?# Z1 F% {; c bet = sequence[stage]; f" P) g! m1 {4 J9 n
' h& T$ p- \5 U! `: I
if result == target_side:& z; q* v0 A/ G1 D$ I% K
# 赢
! _ S! A" e: J5 A' | u! W win_amount = bet2 V6 j7 J+ G; `/ n# H2 W% _
if target_side == "B" and commission_on:
o, Y! C' T9 S9 A win_amount *= 0.95 # 庄赢扣5%抽水
( }$ I2 g5 C# q commission_paid += bet * 0.056 h9 g h0 F5 D- U7 y3 c" S
profit += win_amount8 Z3 M$ S0 x! P' H) ^: S$ R
stage = 0 # reset
6 y$ I6 z. E( v6 w' E3 h target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)6 I. T2 ]+ ~9 u/ x# s
else:+ m) R/ o( m0 K8 G B
# 输* S) T( a" _ N* L1 Q9 L
profit -= bet
: a4 u9 C3 v( w! K! {! e/ G stage += 1
0 T3 V+ Q% q. Z& e; C if stage >= len(sequence): `* ]. {8 y3 S, r0 Q* @; _2 m
stage = 0 # 断缆reset* v5 ]. x I( D$ ^7 a2 B
num_shoes -= 1
7 A: M) }( i5 ^+ F
% z' e7 |3 G/ V. X2 J( l0 q' J4 @ return profit, commission_paid
, v! U" M6 n- I. K' g# E" u! [1 t, J1 V. \+ n
# 设置命令行解析, \! t0 h4 [9 g
def main():
% R& m! y2 @$ Y& ]' S8 k& j parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
+ q. w: v1 d1 h! ?0 V4 f' W4 ~ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
$ \2 n3 H; B$ B0 \3 f parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.") f# A: \9 b/ l8 @: R0 x; H
5 |" i: d: v7 m! ^* q1 ^: V0 B
args = parser.parse_args()
! `+ `. j6 @/ u. L, ? * v& i5 r4 D$ {
# 抽水开关:开启或关闭; r8 ?$ T- X3 g* ^5 S
commission_on = args.commission == 'on'6 D5 a6 F% J& V/ ?* e% g
1 J$ b; y$ ?- u* [ result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
, }# Q$ L/ \) a# T- A- T" z print(f"最终盈利: {result:.2f}")
+ k0 Z2 ?7 X6 B) W0 {' h2 m print(f"累计抽水: {commission:.2f}")
: H5 e7 m& p/ r, q6 g7 x. t& S I& Z: w' B
if __name__ == "__main__":7 ?: x. V/ E) {4 D
main()7 T& j# z$ D7 {/ _( K0 ^: w* d
' q# k$ G- \3 ]/ l! S; l
' }+ l+ Q- t! P$ Y, O& {0 l' s步骤 2. 运行
1 }1 _: f1 t" {: G3 }, N5 n5 a+ m
/ J+ X! n8 ~: l* F在命令行里进入文件所在的文件夹,例如:' T; p8 I4 P: s+ Q7 ]
cd C:\Users\你的名字\Desktop
4 O2 Q# l: k, Cpython baccarat_sim.py% o$ P9 D+ V2 `7 Q4 m$ U9 @
% g( V" ? |: g输出会显示:6 J( c0 `8 y' b+ G( w0 \
+ Y. O/ F: t: Z
累计盈亏: xxx
/ }6 f. P- `, a* a a累计抽水: yyy' f& d/ r5 W* N3 d' L
-------------------------------------4 m8 m* o# E) B: ]: e i6 t
实例:试跑3次,
: [0 q( s6 H. j' |' J; hC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
! r; K* |5 g5 F& U7 k# [6 k# c" u最终盈利: -5360.35 5 x# y& K' O$ {& Q& x" ~
累计抽水: 5176.35 * z v9 g. Y/ s, W+ l: o
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
9 e- ^+ y& _, j7 L5 D1 Z) m( V7 o最终盈利: -5661.65 5 u, w. n- B. t) m$ z: Q
累计抽水: 5174.65
. M$ {# B y/ e) T' ~0 d4 UC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ( J+ w5 z. ]: U6 H7 }
最终盈利: -4244.50 + p0 h/ M/ g7 Y& K5 ^* q+ v
累计抽水: 5176.50
G- }) m( F8 \( e% N
+ A0 A4 J* s. Z, r0 E说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
* U' L* w* z) F2 U$ p6 ]
8 a9 h' w+ g+ k1 R6 i) _ P) @累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
( F8 V9 ]; ]# ?, c: w# M( W- d E
% z$ G+ ?' X) \2 }. X; z# s最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。0 [8 o$ W( t( _" M$ O
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
1 j$ c, h* y6 j' u* g- _人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
$ s2 n9 j- e+ T但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。. D1 ^, g& B8 O8 E
! o% l# U, t R8 k! v
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|