|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 6 Z# q! I( Z2 I% I \& L2 l4 _$ @
9 t; s: a8 S, {" }可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
( N1 V! L, Z& a: S6 V0 g) O+ TExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
& P8 Y% _: Q9 q7 i& D7 J4 k% r* m# J( e) Z
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装), y3 g+ Z# z# M) L3 `- j
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。3 ?0 ~+ I% u5 A' T$ _$ r
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。% X4 u% q7 q# R- \0 Y, f2 Z
& |; M! q2 T8 O5 X3 y' ~步骤 1. 新建一个 Python 文件
' I( L1 P7 f- o$ I X6 |打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
, M$ V {" ?- W0 z把下面的代码复制进去。
$ ?8 J: i( u" c: P x保存成 baccarat_sim.py (注意后缀是 .py)。( u) p( v- C* y8 b/ P0 o
% V& I1 I' j. ^6 b% Z( n& @. D
import random' L% O" `5 E+ O
import argparse
* n" g2 [/ C& E2 b/ A0 O$ ?6 D: |1 p0 t: D$ }& B: A3 E
# 初始化鞋子- s$ A4 X; j* }0 ^% Y
def init_shoe(decks=8): `7 v9 w1 c$ g- o
# 每副牌52张,8副共416张
# ~. R: g5 t: @7 D; [ shoe = []+ F, R8 q% k) a+ |. y( p
for _ in range(decks):% p! g" N1 C! |! T* c
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
# d2 }& u' T1 f. g4 ]: x random.shuffle(shoe)7 D4 M7 ^, }( n1 H" {( s+ T
return shoe
2 \, a8 @( I3 D# R8 _' A" g, I% W' z/ x! L) {3 q
# 发一手, f) n3 T6 e0 I9 D" v! R
def deal_hand(shoe):
\, S. y5 H/ Y9 q" f' k' Z' V if len(shoe) < 6:
) }( L( @5 M" m# p, } shoe[:] = init_shoe()
8 }# ~# u! z6 `' b# y( K7 S return shoe.pop()
. Y; m+ L: u+ q( a+ u4 l* `0 T" d9 T
# 模拟下注法 A7 Q# B! N \4 Y, }
def simulate_strategy_A(num_shoes=1000, commission_on=True):. e- ]: c# H7 A2 s3 ^
profit = 0
" p4 m; t% j& b4 N; l commission_paid = 0* Z5 Y; E* s. _7 N+ N( Z3 w. E
shoe = init_shoe()
, v! l# p* r4 e" ?5 r0 T7 k
- [; w7 ?7 H2 L- e2 L # 策略参数
" f$ T$ f! w& W' h& M1 I' m sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
' f9 H9 H- X/ H+ x; t: T stage = 0
$ b& ?) L0 Z) `1 `! k' |* E/ K8 O target_side = "B" # 起手投注庄
& d' k# }3 @3 C3 ^; f* I& a+ b6 f; N) u( W; l
while num_shoes > 0:9 [) I! @+ B8 `" p i, V
result = deal_hand(shoe)5 ^9 y6 H0 _9 B
+ x6 }! z z/ y, g% d& F' y. @ if result == 'T':
% f+ [0 d0 s5 D( `" N! c2 M # 遇到和,不输不赢,重投
. f! H q1 a V4 L) J continue
# _+ }/ S% Y) `: N2 c4 E$ r/ g+ v. I. L9 x) K1 ]+ A8 h
bet = sequence[stage]
7 j3 U- H2 ?( T9 k% |" n ) u4 F( b( A, k6 B: I1 v. S
if result == target_side:
! l$ s: |& h( H. _( a j1 h # 赢
! h" ]7 E5 y0 }0 G T, L* { win_amount = bet
( [1 k; ` g, Q. d if target_side == "B" and commission_on:& [9 d: F. L- v; M- i F, O
win_amount *= 0.95 # 庄赢扣5%抽水
6 ?( Q9 _' p n q4 t3 n7 } commission_paid += bet * 0.057 l% p9 ^0 M6 P
profit += win_amount# i& c R) ?; m7 Z4 \ r4 L
stage = 0 # reset. l! {$ C" |! P; ]
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
# ^) p( \' \; F) D0 w# g else:
. a; a' x ~& l9 |0 ~- S # 输( R. J9 R! L. S- H/ x; b: Q
profit -= bet
9 e3 ?) `1 \+ i( r stage += 1. ~. q, J& n6 B4 i% g
if stage >= len(sequence):2 ~) I' T% X, z {
stage = 0 # 断缆reset3 y1 W* ^; ~$ h4 V& g, u! i
num_shoes -= 1
$ {0 Q0 Q/ F0 `; L6 C
! Y7 X; }$ v- R3 `: y& p8 V return profit, commission_paid
. D! Q# G$ H9 k/ d+ g
9 z7 \% l& w. W$ p: \' p: }3 K# 设置命令行解析
0 `6 w U( {! bdef main():, ^) m4 }# q. R7 J7 m8 d
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
( ?, J+ d% o9 b, D parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins."): B9 x1 @8 N! X n4 z
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate."). |0 P0 Y, y, q% s9 J
' K0 m1 R4 S9 a7 l$ `7 D1 V& u5 s args = parser.parse_args()( T X. @0 K: I$ t/ j6 U
' ]0 k1 |! w9 v- N+ p' c9 e* d. \
# 抽水开关:开启或关闭- K% C- H6 d3 S4 N* u1 m) y
commission_on = args.commission == 'on'
5 p; @+ e, V- h9 T8 |# V ) }$ V2 ~$ e* D9 i
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)+ L. }* a7 k; D f5 n: Z$ j
print(f"最终盈利: {result:.2f}")2 C6 s% b% R: x" R2 ~7 [& g9 x
print(f"累计抽水: {commission:.2f}")
. z- q' I4 q3 M6 q: X) F* k1 I- S+ |/ C3 n# g3 G; W5 Z, a& t
if __name__ == "__main__":
* t/ o5 I! h0 _& o7 Z main()
- }4 i! K1 [. @% g3 c: N
2 Y( _+ N& e: v$ m; {3 q6 L7 Z: |( [6 U
步骤 2. 运行
4 ~5 p7 _& [# @. u/ I: h3 n6 o- C+ Q: ^; y# @( e
在命令行里进入文件所在的文件夹,例如: Y% ^+ H& k6 b1 I& I2 }! V( c
cd C:\Users\你的名字\Desktop! v# o1 Q; z9 h9 M! E: o/ W
python baccarat_sim.py
" K- F1 A3 e& P) |% F4 _6 x; ~
) T) A1 l) } t6 b4 W输出会显示:% D/ N; y; ?2 r* p' D
+ Y* W" E5 Z6 k( N j, c9 Q5 j+ l
累计盈亏: xxx
' _( l9 n6 N/ m ^2 x9 ]7 O" U累计抽水: yyy
8 S9 A5 L* c. d) q-------------------------------------/ ?( x1 F) W# [
实例:试跑3次, & z% k* E# R. O4 {1 j! J& _+ Q
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
0 K4 p- T! Z& \0 C9 Z最终盈利: -5360.35
) ?& k2 y6 |& ^ q5 F$ B; p9 G5 {累计抽水: 5176.35
" ?2 `3 \4 t( n' ~& ?' h3 X F( e tC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 2 t5 Z1 g) A/ S3 y# c% s
最终盈利: -5661.65
! a) J$ ?+ T* e4 c累计抽水: 5174.65 6 F/ J+ I! o. r+ S1 P. V' K
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
( s* _2 |3 `$ s2 G( Y1 [最终盈利: -4244.50 & S' J8 b. d5 t% u# ?9 H2 H
累计抽水: 5176.502 c/ W' T) T( p/ B
( x0 Y9 `/ a. U+ M5 {) t9 N
说明你的 Python 已经能正常跑模拟了。结果也很有参考性: y" |3 N" I) ], h; Q2 k1 o5 y
- N* I! ]& n! a$ A3 E5 d
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
: ^8 k! |% g- w, @' h: N$ c- S! M8 I, P3 |
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
+ n4 _( ^% K, e4 ^! u0 k* S这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
' t' K6 U$ d5 @0 f人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
& A2 A5 ?, M' ^5 F* r但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
/ e! I1 o, e2 v! E8 p1 A0 }5 G
: g/ n3 H0 ^7 @ E& H7 u启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|