|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 8 O$ l/ e) A% A
1 _- a' w8 F* {" O+ c
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。- p$ h8 l; G$ E; o9 _- ?! b
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
1 R6 U- q/ l$ C5 r5 }/ V
7 Q! B" |0 I; |: Z: w4 ~在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装); Y4 I5 J! \! F% W
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
8 @' ?' Q9 ^" \! @8 ~8 u) b! B先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
5 K0 C. T: K- g( G3 s
/ s8 d6 q# q$ F$ l; F+ [步骤 1. 新建一个 Python 文件" g# M/ {' J5 s4 j: ^& |* F
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
- j4 I) t6 {& p6 g! ?$ u% B) v把下面的代码复制进去。' i6 ~$ _7 a' Q
保存成 baccarat_sim.py (注意后缀是 .py)。2 I' |7 Z7 U" U6 G0 L
H. A' B7 {1 Cimport random
8 Z) p3 F8 ? G& Wimport argparse% ]* L/ N- H# Z9 s; i
% [, D3 ?- o0 x/ N+ C; ?# 初始化鞋子" K" L. K0 I" E
def init_shoe(decks=8):! U" x; G X) ]( u
# 每副牌52张,8副共416张' U! L( s7 V3 C
shoe = []5 i! V+ ?- I. p. D% Z
for _ in range(decks):
/ u% a; W/ U+ ?2 `% R4 i5 b g shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
' z! g: P' A! `% j% ~6 L; m$ ^2 ~ random.shuffle(shoe)
/ z* x; a( E3 N2 K0 {( D return shoe
/ |% W2 q* K& E/ A3 n2 w/ }
' S, K$ P& o+ t# 发一手
, a1 h6 @% I! F" d) I U! kdef deal_hand(shoe):
% \( W2 T7 z2 }7 s! b if len(shoe) < 6:' ^% i) n. {8 S% Y5 Y, K/ R
shoe[:] = init_shoe()4 I0 `( `5 G7 T( K2 y: {# S2 y% u2 d
return shoe.pop()/ N& ~: @8 o3 _5 J
, P! _. i/ P7 ]0 n# 模拟下注法 A' A4 D; j( y7 t* W- c& v
def simulate_strategy_A(num_shoes=1000, commission_on=True):
$ d- s1 L/ ]: v4 g profit = 09 @" l2 W) O& ^; r, s2 E+ Y) j: A
commission_paid = 0' S" X: ^! p5 a$ u/ g$ S
shoe = init_shoe()* u( y V' G8 f
0 N, v! ~" V; O1 l% r2 C$ T3 q # 策略参数
, l, u* _7 p" \, |* a. q sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级& T- c/ B; p1 u/ c d" T& j$ Q" K
stage = 0
: c$ k/ P2 ?" ^ target_side = "B" # 起手投注庄3 h- O; Y- o4 y' q$ {
8 R* _- w% v2 m7 W8 @ while num_shoes > 0:& y% X( a! y* I& @5 U# T- Q/ g: D
result = deal_hand(shoe)
9 y- c" B+ w6 _2 @0 U% y5 M9 w! c( a9 F8 O5 B: I: ]) C
if result == 'T':
/ i" g. B, ~3 ^$ }$ g: I5 M # 遇到和,不输不赢,重投
6 w7 B6 q" S) x% q. L3 V continue4 a8 c) K m/ e5 T# N$ j
' `) V5 I" Y0 D+ n+ r
bet = sequence[stage], N" [$ F6 t6 D! e& T
2 B2 F% [% @' P# i( d! v# B
if result == target_side:0 a f g, `: o9 L9 n& I
# 赢
0 t' l* D4 @% k3 @" W2 N S win_amount = bet$ S! l$ b; ^+ O& Z. y! J
if target_side == "B" and commission_on:
7 h# G: V2 r/ C win_amount *= 0.95 # 庄赢扣5%抽水
. _) G, e$ x- r% f8 t/ A1 R, Q commission_paid += bet * 0.05! T6 T6 n! X8 I) l0 ~' K4 a% d
profit += win_amount6 B# [+ t" _5 \1 d
stage = 0 # reset% @1 i! S. d$ C9 v/ `9 S1 H
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)8 }5 W1 y" {7 g0 k4 ^9 i4 P
else:
+ J. z6 R& @5 q2 h8 r- d* f7 k # 输* y! y, C+ z( c8 V) Q; D
profit -= bet
^0 S, G5 L( J7 A+ M2 W1 m stage += 1! ~! ]7 {, o6 }4 W2 f2 m
if stage >= len(sequence):" L7 e% b; b* `
stage = 0 # 断缆reset
+ ]0 w* Q- r- J. M @ num_shoes -= 1
; O% |- g$ ^6 m1 U3 ^/ D
, L# N$ M$ u* b return profit, commission_paid
$ ?( r3 B' @7 m& K3 P7 u+ \; n& }* {1 v* o6 r
# 设置命令行解析
- S7 Q6 c% S% _, C" x: h1 ?. Adef main():7 j; F3 p$ T' y
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")) k+ D. v( ?' |& ^% b8 D6 B; A0 ^' ^
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")* b! P- c3 T! M
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
# X5 L: h! F/ l* v 7 E) \& m. U. y- n! t; _2 q; L a
args = parser.parse_args()
7 C5 J8 y/ [3 L. h4 b
1 k) n$ w1 z! e H # 抽水开关:开启或关闭6 {; V, d' k# T$ N: h
commission_on = args.commission == 'on'
; k' T0 o2 y% ?- ^9 F$ _; x& N
; W% ^8 l4 n/ Z- h1 U4 ?( f result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
; |1 ^( U- h0 b7 W print(f"最终盈利: {result:.2f}")( S6 Z, A* k" y7 T: D8 C8 J
print(f"累计抽水: {commission:.2f}")- b# l; f* o) S; r/ I p
* L( O+ Z$ D3 k4 {5 _) M$ S9 v% A# [" j
if __name__ == "__main__":4 i2 k( u/ x" \' }! V
main()
- b; h/ |- c7 M3 V: P! u* _: L" k7 ^1 U0 E# K
% B9 `5 x2 Q' V3 i$ l; F1 j步骤 2. 运行 Q0 e" \- \3 _' H4 y
% {, T( [+ d3 D! A# n. h$ x; `
在命令行里进入文件所在的文件夹,例如:& e( G& [ P- {2 u
cd C:\Users\你的名字\Desktop3 m# a8 l. d) k- d+ K
python baccarat_sim.py8 p9 p; x5 U: L+ u( J3 y
+ r, [7 {' g0 {$ I0 F2 W输出会显示:
9 H" o7 F) M# @
- n, C; y6 S6 P9 s累计盈亏: xxx& a) f. }& O0 i4 D/ q( U2 B( n
累计抽水: yyy
{( k$ L" y9 z' W g: Y" F; e4 ^! g-------------------------------------; z$ V& K4 v1 S6 K: D$ I
实例:试跑3次,
; n: r4 B7 P; Z; \& EC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py $ }" T) `7 r& u/ Y7 x& \
最终盈利: -5360.35
/ R0 a/ s( v: c+ e: f! w( u1 ^! V累计抽水: 5176.35 . A v. X$ S8 T o# a$ E/ }' y) N
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
3 y1 W9 v5 t. Y4 l1 V$ d最终盈利: -5661.65
# @: f: Z5 N- s8 u. G& Q累计抽水: 5174.65 . u* k7 W9 v( L4 b: C
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py # @7 J9 B3 B# { j
最终盈利: -4244.50 7 }- V$ P) c n' I5 G Z# o
累计抽水: 5176.50$ X( @/ @4 R3 `- }5 B3 K
( y( g/ V, x$ }5 _) A5 o* j( l
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
& ?( u9 S, {. F! K: {4 e
+ ^; T7 s3 J3 U9 D累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
2 B6 e3 q- S( T0 P
3 x, B' w9 [8 ~! F* h: c5 Q4 {最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
* {& v, k+ X$ ^. h' _# b这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
& `' s! C9 F$ \# _8 i( ^人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
3 f0 q! j/ t9 [但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。/ y% Y" M" I# A% F
. v. c# ]4 N6 ~, P. t$ {* w y5 L
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|