|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
1 S1 l6 ?0 O. `- ~% J: L+ \+ X+ |8 A- N$ D& s
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
! b& | E9 u) F: E. p% ? bExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
# t, {* |* c5 J" m( Y& J! a" l# u4 G9 R1 o+ T5 c8 n% Z
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)+ Y4 ]4 |; i% \. W7 T
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
& L0 `& n3 |; _; v5 g* i先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
7 W8 l6 @. J/ R% `' Z; }4 ]" |+ u/ D+ q( y
步骤 1. 新建一个 Python 文件: @/ c6 u* [+ E( ^1 b( _
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
. h' g0 \( Y+ e把下面的代码复制进去。/ w, [" s5 m. R, {% ~( }
保存成 baccarat_sim.py (注意后缀是 .py)。
# }( y6 d# w* k( N4 [. F
" U/ V& x d' \) W4 Mimport random
6 c1 G$ C* I. n' g, H1 h+ _$ E+ Pimport argparse
. N! }1 w7 x" v" [+ H& e
( @! Q8 x- h* E7 m0 K8 x- J# 初始化鞋子
" U) \$ B# h ~5 Gdef init_shoe(decks=8):' o* j; j" }9 I% n6 i
# 每副牌52张,8副共416张2 e# `, o( u) p5 J9 ?
shoe = []
) y, k* f# p- ]* _ for _ in range(decks):5 Q+ P. t% X( |* \9 B! B
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4$ Z+ z% A3 p6 ^9 ^* ]3 e
random.shuffle(shoe)
* z! b! z y5 J return shoe. b+ s! K6 | N; D. B, P% a
& D; I* V) c" v4 ^7 }# 发一手- v1 F! }) @+ H* M8 V% S: p8 h- P
def deal_hand(shoe):
2 A: _2 G- l. r! | if len(shoe) < 6:
1 W" b+ k* @" R6 B& m6 A; c9 E shoe[:] = init_shoe()
& J4 k8 r: `% p9 P return shoe.pop()
6 W! e6 W6 ~1 |
! {( l m/ t4 a6 e# 模拟下注法 A
' ~8 _% o, c* ]6 e6 q4 ]def simulate_strategy_A(num_shoes=1000, commission_on=True):
; ^' C3 Z, ]( j' I8 k3 c$ L$ R profit = 0
. n4 W8 m7 V' t$ b commission_paid = 0 `# }3 {% d3 I8 G8 W. G* Z
shoe = init_shoe()
0 [4 q1 A4 ]9 @0 N% D H$ U
! h. Z, E& g& h1 v4 l # 策略参数
( K1 _! H* [. H5 P6 S! w# r* R sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
5 Q% \. M- g2 c" z stage = 0% C+ o# n0 h* T. e) d
target_side = "B" # 起手投注庄
* p# |$ O0 [4 t: n0 H1 z: l+ z
; c# B5 j; f. c3 J7 z6 F1 N while num_shoes > 0:8 K5 o: o% {6 x. r# j) }
result = deal_hand(shoe)* W- t" m' p0 `( V9 o+ D
& x. p3 V8 L8 s& D5 z# D" v
if result == 'T':
& R" M1 ?+ |* W/ N: k' R& v # 遇到和,不输不赢,重投
5 R- h% c* c: k6 ] continue) |9 C x9 L. L8 C
' v. x' E+ b0 W' S
bet = sequence[stage]
5 E+ S. ?' B' v2 E# {
" _, Y; I3 U" i# R' D if result == target_side:' h" K4 A, y/ M! X
# 赢
; y& } ^- g6 v win_amount = bet
0 |* b% F* u0 z6 {7 V+ o if target_side == "B" and commission_on:1 l- H7 D. T0 ^( u5 w
win_amount *= 0.95 # 庄赢扣5%抽水& \5 E0 E3 B2 g
commission_paid += bet * 0.05
" [* ]( }+ D& ]* ^3 b profit += win_amount, I. e$ Y8 o0 ?. e& M1 m+ ^
stage = 0 # reset
7 B; `! p8 }3 Q6 H# J( z target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
% r' j6 T6 ]4 E" d! w- O else:
* ~ Q8 R# M. L # 输
8 C" E. d6 P- r; T p profit -= bet g# `. W- Y8 Q5 ~
stage += 1+ R" B' @( ]7 s/ H( T) N
if stage >= len(sequence):
& _0 l# n/ M+ a; O2 m. P stage = 0 # 断缆reset. `# S' [7 S7 m4 K6 d2 T: C
num_shoes -= 1% e6 x" C7 B O' g* z& t
0 M; Z- l1 Y+ M- t
return profit, commission_paid
9 _9 x% h7 r7 {/ ~ u5 s
; x3 m/ k" h/ g( |4 C7 }2 N# 设置命令行解析 Y, c& e: x1 N) T; c
def main():
; B4 K$ ]4 T/ J parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
9 T; X$ O ?2 S parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")0 K# H5 z+ l: d
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
/ ~/ ~$ F; u v. R9 o1 P( m& y 5 m$ I+ S7 M& V) L) m" o. G9 s4 _
args = parser.parse_args()/ @, k0 @8 V1 Q Q
0 a0 |. c+ h6 H! r
# 抽水开关:开启或关闭
% P8 w1 Q/ L$ n* e% P- q; w1 A( P$ } commission_on = args.commission == 'on'
9 q) m$ Y9 J1 [; t * P0 T2 ?1 A- C. e- f, U
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
; U' ^. A7 }4 B8 c/ n; | print(f"最终盈利: {result:.2f}")
! c; L1 |; Z& h! ] print(f"累计抽水: {commission:.2f}")
9 i2 O$ z) x& n5 ~ D* V8 M
- v; j y5 q" j+ {; H% o0 I" Vif __name__ == "__main__":
/ K6 v; D+ @, c8 A main()
* Z1 B5 M G$ U. x: G C! V# G/ R5 L& R# B) P. c U4 V
; ?2 f* K+ B8 Q& l' S步骤 2. 运行
$ X; I$ ^* v" ^3 y" W3 u+ u* F1 j: B, }! i) D" \4 C
在命令行里进入文件所在的文件夹,例如:
- Q$ F" j& C9 D7 |2 acd C:\Users\你的名字\Desktop
7 {9 q8 v, q/ r1 {/ r' [python baccarat_sim.py
% y, r; K3 H5 z& H7 e5 Y* @" f6 u3 ~# A* N: D$ [
输出会显示:& I, R" f4 y0 K; Z
; U& `" z5 a" R# k' o' V1 P
累计盈亏: xxx4 {! c, N" r G' ^) x/ K
累计抽水: yyy5 c6 W3 e# \4 s5 x, a) }2 ]) D
-------------------------------------
3 C8 W' j: b- k+ P! n! q: o实例:试跑3次, " B% w: h5 f x. l" s$ V
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
8 Y& ?# m+ `$ u0 F( ^2 Z, A最终盈利: -5360.35
0 M1 ~+ e" H7 Z( `( G0 O累计抽水: 5176.35
4 H( f7 j& m. m3 ]# |0 {C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 2 x: q% Z7 v1 a
最终盈利: -5661.65 : C v) P8 H( F1 |
累计抽水: 5174.65
9 ~: y( O" W$ h- h7 qC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
7 w* l9 i& r2 L9 j( s/ L y* C最终盈利: -4244.50 - t$ g4 C/ @9 y
累计抽水: 5176.50+ J) E# a; B$ e- M
/ D! F: m. P, t/ m8 Z6 `
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
; q1 T" c2 G; E1 y U q
: v' j4 R& M; w9 b* n3 ^; y! ]1 a累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。& P: b% X8 B; E/ p7 X6 E. {0 B
+ q6 _. ?: r7 D: j最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。& s Y& c p1 S+ S. H5 u
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。, a5 n% M" i; m6 e
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
. }' h$ C' i" ^: l" m3 I( ^& [但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。0 u4 l$ Q2 S$ b2 [$ t
9 }& G$ I' y4 ^! K! |9 `8 X
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|