|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 , s' V6 X: [2 x' a
/ j3 M1 W, L2 F2 u8 j- w可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。7 K. M' V4 {& K5 ?7 }: b, H
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。: a7 a% o( L# z6 j
) u* g1 K* \7 M: n在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
+ ]$ J, k$ _0 P1 x, V/ O: R假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。2 m/ t. ^# C/ x3 n$ F' F
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
+ v, B# A* T" Q$ Y
5 ^" P1 I) D- M$ H" B7 L" j步骤 1. 新建一个 Python 文件5 T) S; y1 ~5 A% a$ ` c8 B
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)3 ]) j$ z6 w( y2 G1 ~+ q6 q, o
把下面的代码复制进去。7 f, [) o9 w5 B% a' [/ X* I
保存成 baccarat_sim.py (注意后缀是 .py)。' ^) @; _9 ? K1 K
$ A- e$ N- S' \: B1 ~2 pimport random+ k/ y; v. x: `, E7 f/ h2 g
import argparse' Y- I; Z( H, [/ M* k0 A, f
. O2 f) ?& g5 {. P6 ~# 初始化鞋子
3 s& ~2 ?, L- c+ Bdef init_shoe(decks=8):
6 S7 r/ b+ u1 m0 o0 ^ # 每副牌52张,8副共416张
9 m/ B. ~+ ~/ f) } shoe = []3 F! {0 r8 v9 g
for _ in range(decks):% N9 j" m/ s5 c8 w" o$ F1 q4 L
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和40 O1 Z- L3 F8 ?& n
random.shuffle(shoe)( A4 V7 g/ S- C( T
return shoe
e) [1 q* Y/ b
5 z8 B3 ]3 L+ \. Z# 发一手
I- v# A3 h! G$ n2 Adef deal_hand(shoe):
$ U# X3 a; H0 i if len(shoe) < 6:6 m- L% ]/ y; [+ i
shoe[:] = init_shoe()
8 Q( g1 N& b! C3 B. F5 r& u return shoe.pop()
# F+ [( x6 H: W4 b. v* A4 T& K; a+ ?6 U8 s- C i
# 模拟下注法 A
- s, J. f+ P0 ~6 G, A* ldef simulate_strategy_A(num_shoes=1000, commission_on=True):. Q0 u& Q& S: G+ b1 h3 ?( z
profit = 0
4 l, _# v. B- O0 \' O4 P0 l$ Y1 x commission_paid = 0; ~0 K6 g8 z& p
shoe = init_shoe()' [! i4 G3 n& o1 A
, F. g1 P* V9 O5 b' ?; |% i: `; u
# 策略参数
- I( y7 |6 @: Y, s6 r sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级( x0 E+ c5 v Z
stage = 0+ |7 b' o* o1 Q# r. k) v6 v
target_side = "B" # 起手投注庄
t+ s/ g1 z9 F* R' n
- n% h7 }1 O y! A while num_shoes > 0:2 H1 C: u% c8 G' t1 H& I E7 D# |
result = deal_hand(shoe)
* h8 C! }" n2 |- a/ u5 A9 H' z
" k+ G3 ^" @7 Z6 _, O if result == 'T': % \* G# E, ?* h* o
# 遇到和,不输不赢,重投* `9 E9 Q. g+ f. \
continue! A* m9 C' \7 y! L* B
+ u1 n0 a4 B/ R0 ]3 w8 C8 m bet = sequence[stage]+ a% q4 t/ W+ @" E
2 W L) _. s5 K9 H: w: a# w! o
if result == target_side:+ C! T1 H. f4 C4 \8 o
# 赢1 @; _( J2 }6 A$ k# n/ ?- s
win_amount = bet: d' I" `& W0 v. G' H
if target_side == "B" and commission_on:! m4 |: x- k/ w) e! K
win_amount *= 0.95 # 庄赢扣5%抽水' O# P% b: G/ a
commission_paid += bet * 0.05& G% Q& I* k& F% D7 [ m& @0 ~
profit += win_amount
l/ |4 m- w. T3 F stage = 0 # reset
% k) P, {& P2 P target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定); y8 e' e6 X- R- A4 I# r1 z
else:
o' K" a: ^: o3 a. O- v# o # 输
; @( K$ @* Q4 b* b& Z profit -= bet
% E6 G: p( x: R* G" {+ N stage += 1
2 D) b. X0 u) ^* p o. A5 \ if stage >= len(sequence):1 K+ ^0 J1 ~# V5 V1 ?4 ^8 p
stage = 0 # 断缆reset7 u6 ]$ o6 }% h3 l* F. s0 h
num_shoes -= 1! ^! p% I2 \, L; E1 m
3 S n. ]* H* L: ]2 ~ return profit, commission_paid0 k/ u d. Z9 M: O0 d( G9 S' n
4 k9 n# a/ v/ O2 ^. D) V
# 设置命令行解析
, T/ Z" J. f- X7 z9 i$ a- D' `5 F2 Bdef main():
: u: R- W- q* u$ f! x! M parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")6 W! [& d- X/ W. k$ Q/ j% }9 e- b
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
7 R$ [. K, N& K* Q' L7 ~/ x2 _ parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
! h; s& y" f2 B, S1 i# B. U0 @( j* b . u* N8 W( H1 Z0 o; t2 n; X
args = parser.parse_args()3 A' U* }& L; W: n' @
# ~( c, N# v6 W) m0 x
# 抽水开关:开启或关闭
1 N! w: | d" ^, J( F commission_on = args.commission == 'on'
- G) \3 |1 I0 m
: V; N: w7 b8 m: | result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)3 E$ s% a; l; ^, f9 B( ~
print(f"最终盈利: {result:.2f}")
$ y( A8 g3 m0 i! L print(f"累计抽水: {commission:.2f}")
$ ?( ?1 H8 ^& |6 s% R) v% g' N! }5 W6 P* V
if __name__ == "__main__":
: s/ ]6 k5 q0 c5 r% b main()
! V% d7 l+ }# }* [) N4 H7 \
( e0 B. x4 ~5 e0 A6 }; s7 Q" w$ Y1 R/ }- E
步骤 2. 运行! I; ?3 |. V+ t% C5 V
+ \# k% T6 u9 [! \3 h( a在命令行里进入文件所在的文件夹,例如:' O2 g% y; u# x9 F
cd C:\Users\你的名字\Desktop
3 f% N! n: v5 `6 [% ^8 Qpython baccarat_sim.py
. v! l2 |% v" _ p( o
0 O& T/ A: P5 N1 G& I: u7 K: g输出会显示:
5 o" D( I8 s. q6 f* f e% ?2 n# _! f. l& n7 g. F$ f6 ?
累计盈亏: xxx
/ s$ m$ z$ }' A6 R5 @8 x累计抽水: yyy8 v. ?2 b6 w$ u" s% S
-------------------------------------- | a2 |( d) f+ u( Y L$ J
实例:试跑3次, 2 I# f1 P/ n) p G7 ~/ c- B
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py , L( ]+ k+ e* n2 f2 q
最终盈利: -5360.35 3 N1 R6 O3 g" Y
累计抽水: 5176.35
$ k$ o( Z: q3 ^( t; q) Q7 mC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
0 P( `, X2 V& C- `最终盈利: -5661.65
* E0 C' M8 j; @+ _$ {累计抽水: 5174.65 + w" K6 \/ K" p. j' o
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
' a# H- K1 t7 _- K最终盈利: -4244.50 ) k& U- U5 R" x }( F3 c
累计抽水: 5176.50 `- k2 b, U/ T- S8 r5 D/ B
1 i7 C7 r* J6 X0 M
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:, q7 C* J1 Q t4 _1 P4 V& [
: b) B% Y6 Z! `! b) p8 D
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
7 n4 [8 \2 l1 Y9 K1 V9 e' K/ _; \3 g6 m7 h- T% _
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
8 \ t8 Z2 R8 p4 s4 c这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。4 I/ }0 |+ y/ I3 z! C G
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
. m( g: H( N0 M: V3 ]- N8 V8 d% r但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。7 S/ n, X4 o3 i* M9 W$ g$ R) X3 T
. Z J7 X; y0 I1 y }启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|