|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
% u" o* M# I/ M Y P/ Z6 v/ R. s
) ~5 H7 u9 d! w9 Y- f; n可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
s+ j7 z: [- s+ h4 gExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。' o' L+ ]( S: f
1 O1 r7 B I& k% k2 q在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
$ F5 f. f& w ~; D; ?" E: h! N假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。- I8 s: H5 z' ]4 P6 ]9 h4 b/ t
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
% v. w( M7 h5 e# y$ V4 u0 q2 V8 S
; A* t S8 ^) t6 x* ]步骤 1. 新建一个 Python 文件
; S1 [% l; d8 n- p5 W0 N打开记事本(或 VSCode、Notepad++ 都行,我用记事本)6 t: U+ }5 q w3 q
把下面的代码复制进去。. ^1 d0 @' h! c7 R+ d" Q5 D
保存成 baccarat_sim.py (注意后缀是 .py)。! A& O' Z [1 J9 a) r
. f/ o/ J+ H8 p2 iimport random
+ E5 j- ~3 r; n3 k# kimport argparse
- v1 j5 T! H3 y/ E
- N% Z* F( X4 |3 Q' t( P( I# 初始化鞋子
6 S0 c- @/ i( | j0 P8 v1 a0 `def init_shoe(decks=8):- X* g7 [/ s! P, r- Y
# 每副牌52张,8副共416张: c Q0 E+ s) J' Y
shoe = []6 \$ ?; D* l6 H/ j, t; l% E8 f2 v
for _ in range(decks):
1 F4 @1 j4 e% c! z% X/ m: b% F shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和40 p. v$ M. A5 ~8 Q
random.shuffle(shoe)
$ a! ]: D# |2 v3 }; p; i3 h1 M! I, a return shoe' K7 p" E4 Z4 [0 g7 D9 |/ j& O
' X+ H+ j. H m3 Y! q
# 发一手
9 C9 k# O- V* }7 \def deal_hand(shoe):8 y4 {4 V3 {' K" K' b* L/ \2 }
if len(shoe) < 6:% T' `7 A9 P. |/ D: T
shoe[:] = init_shoe()3 }. x3 j( k: G1 I2 L
return shoe.pop()2 Z, X& N$ _! T1 C
/ ]3 T+ r1 k8 B
# 模拟下注法 A" H0 q! N( M+ G$ B" S: R
def simulate_strategy_A(num_shoes=1000, commission_on=True):6 p0 i0 D# h7 A$ i
profit = 0 B- g1 V* [- m: C
commission_paid = 0- t8 S& k7 q1 J$ K$ I( d. F
shoe = init_shoe()
" C% P$ X/ X1 b0 ]+ A7 D
* d7 l/ ` E5 V # 策略参数
5 U0 P& T+ e- Q' N4 [% @4 ` sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级: u! F$ H8 v- F `" v5 J
stage = 0
: f! V7 v! j. E& u8 m target_side = "B" # 起手投注庄
5 M5 U g0 v) s' S2 P
. h! f3 b8 R) ^! D while num_shoes > 0:
$ a, _. ^! O8 [& X2 N4 M+ u) Z0 _ result = deal_hand(shoe)
# q: V; ~0 i; O" C9 @3 f$ I4 s# d
+ t" w4 j- A& V6 L8 C& B4 i if result == 'T': # E2 Z' d5 G$ j4 i2 Q- Q0 E6 o
# 遇到和,不输不赢,重投# m& b3 }( d4 Y! N/ P: X
continue
7 C5 w2 m5 m1 m! K
* F( Q- i6 ]* F) e' G bet = sequence[stage]- T8 c9 ?; V' W1 b! [' u
$ A3 ^* T0 D' u7 r7 Q. U' n' O if result == target_side:* Q4 D x: C8 N% C
# 赢7 I- ?, |5 k4 ] {! O2 p; l
win_amount = bet
% c% q" q# H7 o3 T1 l6 w if target_side == "B" and commission_on:" L/ F# [4 M, V
win_amount *= 0.95 # 庄赢扣5%抽水9 S0 M8 E, O" e! V5 ?& ?& M
commission_paid += bet * 0.05
8 f6 `, x; R/ D) \) e$ `( B profit += win_amount
9 h# g0 F+ |+ o$ E stage = 0 # reset
2 p, u3 n. V {8 Z5 O target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
% m5 }) U6 O2 c+ B. k else:; W$ E/ o) {' l8 C. c. v
# 输 c! l* ^) V$ v4 ^
profit -= bet) A/ O1 ^' D' n+ z3 f' v- j
stage += 1
. J) R- O2 N" b# Y if stage >= len(sequence):
* @' T' x; \9 n9 Y0 \ stage = 0 # 断缆reset
0 r$ F' ?) t+ k& i- J1 g" N& j num_shoes -= 1
, u+ N9 w$ v+ [8 `* ?- e; B% h( Z- B1 Q/ p% G+ j
return profit, commission_paid
1 [" W# Z/ \- |. U v2 G! G0 v
! ?2 B: v& L3 k# 设置命令行解析
1 `. j' V4 D; ^% C1 N. H/ I" xdef main():
6 S, |# m- p+ \; T" l0 @ parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")/ H0 i7 k3 ]9 _) ]" l' }
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
# G3 v, @+ m) s5 c( [6 Y parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
6 S8 r# o: _: d) d9 W2 n + Y7 o- `( l" B0 A
args = parser.parse_args()* d5 ?& Z) u1 z; b' Z% z5 y
9 A" m7 L" H5 [. H h! E) h # 抽水开关:开启或关闭
3 _( A Y# M8 ^ commission_on = args.commission == 'on'8 w& Q# N% ?. \% a4 p
. L8 }- f T: R2 g result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)3 h% i/ p: X, Z8 h
print(f"最终盈利: {result:.2f}")8 D$ U$ c/ G/ }9 l- @$ p
print(f"累计抽水: {commission:.2f}")
f* y$ {2 P _7 v8 V
" g7 Y8 Q' C- S- L( bif __name__ == "__main__":
& p1 a& ^7 b$ p) \! d main()
' _" e* X4 z* @" Z
_7 S) T4 z0 x
0 H+ B, x W* ?' V8 L* L步骤 2. 运行4 w Q+ B9 I. {7 X
) Z! k1 h( [9 a$ P! j在命令行里进入文件所在的文件夹,例如:
! W0 i+ a( M& r. gcd C:\Users\你的名字\Desktop6 X G! i) [7 L2 z- r; g h
python baccarat_sim.py) o; H L6 N$ b. i! \& _
/ J) h( `/ ?- L* f+ m
输出会显示:
' I2 r( d. @: h7 v9 d; J" m
! \* @0 L$ {8 `4 E; Q累计盈亏: xxx
8 t i, t. y! X3 ]; A' f累计抽水: yyy
; @! h( t9 J1 L- b/ ?-------------------------------------/ G' U. j7 {1 o1 @7 F0 [& e1 L
实例:试跑3次,
5 E. r) N( N% B- LC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
4 S0 | J; I! U/ q7 o! ? z: h! | J最终盈利: -5360.35
- r1 u1 d1 N" e: H# P$ i& C9 Q4 q累计抽水: 5176.35 3 D6 ]( Y& l- u# x+ S
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
0 \( |8 E7 z: J) W最终盈利: -5661.65 0 V) d( }/ a% \
累计抽水: 5174.65
- |: Q& n$ U; j, SC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ( X5 \( ~; ^4 v6 y- u3 l! G' e6 [$ {
最终盈利: -4244.50
2 z" D- j0 I: H1 C- J7 Z8 d" i5 R累计抽水: 5176.50# v1 U9 t/ Y% }% A
5 u' M& {! V; L说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
' c: e( N/ b+ D0 Q! w5 S
+ z" o9 G& L- A0 K( G累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
8 `1 S: U3 A" `' j1 z3 M+ c) H' g
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
* H. G5 T- b2 i7 J这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。; H. ?) Y( f' N, U
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
- I) e% g# q: q( \! S9 Z# [. k但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。8 i9 j; d" G) i e7 J. E7 m
0 h# ?1 q. _0 {/ w! Y* U
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|