|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
9 j( y Q l! O0 A5 g( b+ ]) n
/ [" z6 W$ @! H5 O3 i可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
6 ^* Y" d7 \6 @* U2 M' @/ ]7 z. QExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。# i4 F) E7 h4 b
: {2 l" G7 U, J) z4 B( ]- o
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)3 h* q' x3 y+ d k3 b
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
! t9 k7 Z5 n* }先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。6 I" S& n" _# d3 |
3 S& p4 R1 ?: C" U( H/ ~" _7 j
步骤 1. 新建一个 Python 文件
7 Q+ I0 d, ]% H0 v9 j7 {: y) p打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
8 W( Z ~6 S5 u5 x/ w* k把下面的代码复制进去。& E/ M9 E: K$ K' V- \% o: r J
保存成 baccarat_sim.py (注意后缀是 .py)。* \( i( K8 D8 D- ?3 z9 d
- J' @2 l) v( c5 ?, B r- J
import random
5 x$ y0 O4 }8 K- F! V$ s) g* _import argparse
' M+ k+ C. t6 o5 l: n1 ]# q" u6 }" m; C; K# A
# 初始化鞋子9 R' Y7 o7 { T- w9 O: s
def init_shoe(decks=8):
* n( @ s d- n2 x( Q # 每副牌52张,8副共416张# G: h/ \# m0 l2 P6 X; a& ^+ f
shoe = []* E& Y+ H" z( {9 i
for _ in range(decks):
( T2 k# A4 e( U) R& p0 r1 l7 y shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和40 o. Q4 c4 R+ j% F
random.shuffle(shoe)
- L% C$ Z3 g' I9 p) p+ C, |" W( E return shoe: M$ m- S8 a+ A) y% B" ]3 i2 t. k
/ E6 L" P. X* z# 发一手8 s2 x; @7 D" }8 [, C5 {9 z; P B
def deal_hand(shoe):
. S* p" M6 O( C: K, o if len(shoe) < 6:% \7 c$ l: J- ]6 ^* N! u
shoe[:] = init_shoe()
7 F1 h7 ^# a$ {1 E( a$ n return shoe.pop()
x% K! h/ d4 V* m8 l! E1 R6 {
6 w. d8 D2 ]: q) \" m# 模拟下注法 A
( Q: P0 N9 i. mdef simulate_strategy_A(num_shoes=1000, commission_on=True):
1 U! f# \ k5 Y, Y$ P$ k2 a* ` profit = 0$ {/ v" S' c, l( r |! L: y& |
commission_paid = 0/ S+ q; Q V% ?- h& }- T1 P
shoe = init_shoe()
) w; i+ E8 y' I2 c8 R
( Q j7 Z/ T. T+ C3 e& a7 p # 策略参数 n4 c; n* B. _0 I, ^9 y
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级5 z$ E4 w7 B b L4 |! l8 l
stage = 0( J* I7 N6 Z- S
target_side = "B" # 起手投注庄6 ^* W! h0 ?0 c; t
1 Z0 F9 y2 i+ F3 x, _/ C3 m while num_shoes > 0:4 s6 t |3 M1 T6 z1 _- J0 N
result = deal_hand(shoe)
$ P" w/ v# ^" I" l; ]
% S! n. ]: r( S: A- R if result == 'T':
) x- X* B1 w- O& y9 o9 |$ g' C # 遇到和,不输不赢,重投
2 q/ X- q$ J) ]* U- k4 j7 e continue7 s7 j3 t2 ?! d# N3 Z2 G
2 B: r5 O& z% ~. e; F! [5 n/ S
bet = sequence[stage]
# n3 W' x, }. r( U2 A1 h T
l' o) f* f4 ?& ~1 |* |, U: @% ^ if result == target_side:( m7 M7 Y7 a% u
# 赢
3 H# |+ N' T& J win_amount = bet. F4 R A$ r& v8 C7 c7 l
if target_side == "B" and commission_on:
2 P$ Y# l3 |0 |9 F. D win_amount *= 0.95 # 庄赢扣5%抽水
: E W0 r$ t- M/ ]4 J" j# z commission_paid += bet * 0.05! ^+ D& o+ L' ]$ N
profit += win_amount
* P, u" F' Q: A: C, N stage = 0 # reset4 ~3 C# R+ T. V+ F
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
3 n& j; r: ? Y: I9 [+ m( m$ q else:
/ E, D2 ]' z: p: ^7 v% O # 输
' O7 A, V7 Z1 T& d) O0 K; H profit -= bet
4 ]$ u) T) I/ b6 o/ ~3 K7 g stage += 1: G0 C) c* v* g2 w# l- w! R3 f
if stage >= len(sequence):
/ {7 V6 \9 }, ~$ U1 J2 N7 n stage = 0 # 断缆reset
+ U' \, z2 A" z4 C% A' [ num_shoes -= 1; {4 b7 a9 p0 L
& i+ i3 i( J/ e$ `& M" R return profit, commission_paid
I; [9 }5 j/ V( O- w+ r! X/ r3 X* U0 `# H- }+ C( Z
# 设置命令行解析
1 \- e1 I$ H6 ydef main():
1 V0 W7 ]$ v- Q/ r4 N parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")7 }6 \- G, ?3 N
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
6 a V' L, }+ j A parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")( W( u% X& Y) {% A7 T
+ s- n* ~( a9 E! r2 ]% l' b; }
args = parser.parse_args()( M, d& I' ^5 D% Q: O4 ?
, L1 X, \- O8 v! {5 b7 B6 ]8 Y& r # 抽水开关:开启或关闭1 w4 }& L* a& D$ h: v. H; R& I
commission_on = args.commission == 'on'3 J) k4 i4 \+ m5 T* _4 |: b
F% K R) M5 L result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
( e* a9 M$ l( ]( p9 n, k print(f"最终盈利: {result:.2f}")* U$ @0 _# L7 f0 d/ x. v: l
print(f"累计抽水: {commission:.2f}")1 c2 F' R& {/ F2 B
" a! w0 t1 k+ ]- L: W4 c4 W
if __name__ == "__main__":
w9 X5 E9 j4 E0 Z: j+ \) O! R main()& L, H0 m" |4 K. f4 V# k, L4 g
: ?) ~; c% E0 A; e2 H# d7 H* Q
, C7 Y1 \: @ m$ F: |6 [! u) H
步骤 2. 运行. P$ |7 c, u* n6 }0 q$ |
) m- e) I3 M M. r' S* ^ S, q
在命令行里进入文件所在的文件夹,例如:( k! I" Q/ P+ _4 Q2 \7 Y% L
cd C:\Users\你的名字\Desktop
6 j- a" o6 w6 B0 [8 w9 G: hpython baccarat_sim.py% ?7 _8 P+ w9 v: n$ g
3 c& h* V5 ? [3 m8 g5 |
输出会显示:, l6 p* l0 g" G0 j
1 O: s$ U2 N* M* C" Z+ Z
累计盈亏: xxx
P0 L7 `6 y, Z- \1 \. V/ I4 M$ r$ I累计抽水: yyy
7 {, p# Y& a7 `- {. `-------------------------------------/ t, v: \" H1 _4 `, R& o: |; x
实例:试跑3次,
: b4 O, X5 x; w e; MC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
: l, R, A" C+ j0 P3 G( D" v2 c最终盈利: -5360.35 9 _9 g4 q3 t7 ]/ O4 x
累计抽水: 5176.35 & P; Z' W+ n# n4 r8 q' p! p; u
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py / c; v( e( t6 U* u
最终盈利: -5661.65 8 e$ T( y8 H/ x$ }7 Q1 u
累计抽水: 5174.65
. v* C8 G0 i, `& X; t/ _C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
/ e8 q% ~$ M1 a/ j: u最终盈利: -4244.50
$ w+ E$ O$ Y" E- \$ J: j累计抽水: 5176.50
& z- I4 D0 L5 n$ [ B
& |* I* ]! t0 v9 v- ^8 q' W说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
8 ~. j4 x) T- E
9 X1 Q# H- \5 L' S# G" s' v累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
2 D/ z* L; L$ \1 o- t0 }# ^7 F+ p* ]1 E i
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。5 G+ `6 p0 Z1 C
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。 H; n. K$ k( h% q6 c+ D0 t
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
: m, J9 v% f' f9 c. _) ^- _9 g* ]但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。4 r \9 O: P( ]# g5 G
+ F. t, u/ V: w0 L* U启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|