|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
- d# G3 W1 c) M6 r m; |
( F1 c! `7 i! i4 R6 `! h# Q可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。: G, Y2 N- k2 U) `; f. z
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
; q! q% C. b, S7 k+ A+ ?( {. r; ^8 M" \5 A
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)8 L8 e( C! a2 ?. g+ W* S$ e
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。& |# o% j z0 Z* S( g+ o+ r
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
! B( c$ \$ J i& n1 a. w4 W
R7 ], D4 Z2 {. C) N$ ?' S3 S步骤 1. 新建一个 Python 文件, m1 s4 j6 c3 e6 u6 C8 x
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
/ ~9 J; f# L* j把下面的代码复制进去。; j! @* g5 v% y" S3 ?
保存成 baccarat_sim.py (注意后缀是 .py)。, y( o: @& t$ w
# v4 G+ W$ Y* n! S& A$ ?1 cimport random
# X' {7 f8 p, u. Ximport argparse" S/ A+ i# f2 |+ A/ A) w U
6 o: B3 F+ A* j% h* T% A! y1 e
# 初始化鞋子7 ?- s% v3 G5 n( J0 h* P
def init_shoe(decks=8):
: q6 q$ N! |/ j3 M2 H F # 每副牌52张,8副共416张' j) w+ R) z. B6 D, v
shoe = []
+ u9 F6 e$ l4 I# Z for _ in range(decks):9 J; k; H5 }, l6 N% ?7 D& ~
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4# X; U( Y5 b9 i3 E/ p9 A2 V
random.shuffle(shoe)8 d" h5 e- z# c; m2 S+ F" A8 h
return shoe
+ g" M/ m# `4 l2 K9 |- P5 R. D2 x
# 发一手3 Z; K3 K1 }' l: f
def deal_hand(shoe):
. ^( A% m3 ?1 v+ Q if len(shoe) < 6:
0 z& W% P7 b# Z6 e- @- {7 @- h shoe[:] = init_shoe()
1 I9 A/ T( u7 b7 {; H& B { return shoe.pop()3 L& f! c$ c/ o$ C
3 _' N* n8 Q/ j, N1 L! k
# 模拟下注法 A
9 Q1 t8 ?. V6 n( X. {" s3 ddef simulate_strategy_A(num_shoes=1000, commission_on=True):
6 k$ \: m F! Z/ ` profit = 0
# h: `6 i: _1 c7 o commission_paid = 0( j7 e; F! P, L, ?& [* @* a6 _
shoe = init_shoe()
- H3 b. x: j+ ]' e- ?8 [
6 ?& G* m, p( R" q) Q! M# V0 Z # 策略参数
, y$ }- H) r* o- P4 t1 w. [ sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
% Q& i1 i- M/ T, H stage = 09 q* p! j; | |" s$ N3 g. D
target_side = "B" # 起手投注庄0 t- Z* Q( m" t; k7 b3 V$ R
5 u- d( S( @' }+ o- P while num_shoes > 0:% A6 x4 V! Q: A1 \$ m
result = deal_hand(shoe)
) R2 W" \" J! J) D5 X+ v( M
, {/ {5 x' [8 z1 i! X7 Y5 V! _6 ?6 _ if result == 'T': 3 ~4 a3 D t$ b W" O) j
# 遇到和,不输不赢,重投$ e7 S/ F% `& y& A4 V
continue
! K7 [3 n& @4 y* I; u5 m
/ i L# p: F$ T6 z bet = sequence[stage]
. z. l3 Y, Y4 E, |
! }3 x: X% T! x# m: T) G if result == target_side:) [& E) Y5 c1 V H' f) w: t
# 赢/ d9 M7 ^" M& t1 y+ K
win_amount = bet
* }. o( R- \, t1 l( C! z if target_side == "B" and commission_on:
2 h3 f1 r/ D% Q% `3 c0 O- Z }: Y9 p win_amount *= 0.95 # 庄赢扣5%抽水0 d7 K" b+ w) p# m! c
commission_paid += bet * 0.05
. N; B! H+ c2 |/ _$ F% V profit += win_amount: d' \# Q2 M, Z) z6 U
stage = 0 # reset
: g |2 s( L0 b0 P2 r target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
1 S$ @/ }+ z$ d' d9 ? else:8 w' c/ b9 y$ x' p
# 输3 ? @4 U$ T& B' E2 A; R
profit -= bet+ n7 s) g) _0 a
stage += 1
6 F, R! N5 W( [6 r. o: k if stage >= len(sequence):
4 k: } Y1 W- ~ stage = 0 # 断缆reset. c, [/ `' O0 n7 Q7 e' g
num_shoes -= 1* r. C% [6 X( c! R
: q- R ?1 l; m% B+ Q* B return profit, commission_paid
4 \4 X8 ^% R6 g, C
- @5 A2 Y8 j" n/ V# 设置命令行解析1 p: U- d) t6 N u
def main():- ]0 m: }& P9 {, P3 S& F
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
5 J7 t, R9 e; U* n$ x; ^& x parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")! o0 v2 F; w7 ]! l, g, r
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
3 n; H) [# L& u
* L9 s4 l; D* a l7 p args = parser.parse_args()
& }! ^# v) C8 x5 j! X C / z: n/ l% v5 b& {
# 抽水开关:开启或关闭8 g; f/ j0 n' Z( Q/ q
commission_on = args.commission == 'on'
; v/ m% z& [1 D/ g / n9 w7 _; B$ }) m4 I+ u( M
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
. M: ]2 F/ E5 Z9 o5 w8 d( }+ p print(f"最终盈利: {result:.2f}")
( N1 n' e3 S5 o print(f"累计抽水: {commission:.2f}")2 J( I& C2 F m4 H/ n. [( |
/ H2 Z& {% G+ @' v8 T7 E* }
if __name__ == "__main__":7 a+ J, C2 l/ {/ k
main()
" I. t8 y; s) F; i( E! p1 n
0 E( s' Z. z, ~1 l U3 h% R5 g: s" m
步骤 2. 运行: }; ?( T1 d% C, }; u* V
' r# c1 V8 v2 j9 C在命令行里进入文件所在的文件夹,例如:
/ g7 ~2 U$ z1 A$ Q7 k' D( h) P$ rcd C:\Users\你的名字\Desktop3 V/ k2 q( d- ^/ e+ q# y2 z
python baccarat_sim.py
$ T, T4 O* R& `* \7 O- h
- ~3 \/ {0 a- `7 f' ]) [% s输出会显示:
! D0 X: G% E8 C% F) }/ J
7 `6 D! z. R5 x" x累计盈亏: xxx$ }; a3 {" M8 N% _: S. `
累计抽水: yyy! ]$ U6 s4 A- X2 O+ ?3 L
-------------------------------------
8 g2 I, T* {" D \( F8 H$ H8 y实例:试跑3次,
! C+ y! z3 q; q f S; Y5 Q% dC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py : \% M% T6 z: m; Y8 G1 g1 e
最终盈利: -5360.35 + s: n- P6 u% H9 F0 C: n
累计抽水: 5176.35 2 L. a5 U- _4 l
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py {6 n& n+ e7 i! ~0 r5 b
最终盈利: -5661.65 & w' i, P' s% Q% K- @- h
累计抽水: 5174.65
' C! O9 t1 l: @/ tC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
v# Y( Q+ w- ~( l最终盈利: -4244.50 }5 M: N' \% f" C% C# x" I
累计抽水: 5176.50
+ m# i5 K0 t% I8 P/ r2 P, `' O
* L- v, E2 z8 F( p说明你的 Python 已经能正常跑模拟了。结果也很有参考性:5 H# v5 }/ s v: M
3 j2 q9 @ ]- y- R2 _4 P" ?累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
' B. b1 a' p) t6 _) E0 S d8 }
" b' b" q. P/ J& W- q* U T最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
) ?7 ~$ K0 d! P! z( k2 i8 q这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
# C" J+ |, F4 N; w, I& _1 f! }9 a人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
9 ]5 [! d# A4 z但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
$ l3 {6 o8 W( q- e' t( Z6 y) }( O# |8 c- E, B/ A4 Z# R' v
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|