|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
0 R% I V) y }6 X/ d
* \% O4 N# o E4 g' N可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
% v. O2 e( x5 [ w0 }& cExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。% X; A! _( s! m$ \' g: q6 E9 k7 X
' A, r# i2 M. |$ c
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
' M2 U- h- \3 }& y* ^! f' d: g假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
5 |8 K" z5 H* t- q" d. R: M先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
, Y6 r0 x: ?) i8 v1 s% v9 `6 J4 L6 a+ ]4 c1 F- ]9 T
步骤 1. 新建一个 Python 文件0 m8 X6 m; O6 e& p) w* ]' M4 Y
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
% T8 j+ ~ ?: T把下面的代码复制进去。0 |! @# i: N2 P: s4 p0 q/ S% P
保存成 baccarat_sim.py (注意后缀是 .py)。
" ^ |, Z! ~4 p: E' N) G1 u, Y4 s* Q) t& C* M4 b* W
import random* ]0 e5 v& i# x. S% @: B
import argparse& ^ ^& L( \1 V
9 R5 ~ ~7 r4 i1 f# g4 R" e* O# 初始化鞋子
/ \! L: a# @. P2 m& y7 h7 n4 \! Tdef init_shoe(decks=8):% O: O& M6 U4 S
# 每副牌52张,8副共416张
5 ^, S1 K7 U7 M; E shoe = []
- T6 x. l8 x9 U; T for _ in range(decks):0 Y* Q) R( R; z4 Z& W9 x
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4+ v2 s% L q- C2 P3 h
random.shuffle(shoe)- p/ `5 _7 c1 c* z7 B) J: K+ d
return shoe
- `- m) }* q+ T3 c5 K$ r7 I* |% A/ C" C) N! X
# 发一手
3 `3 k! b# [. c$ S( y, sdef deal_hand(shoe):
% n4 w/ Q1 ^5 `6 j5 j. d if len(shoe) < 6:
! o8 ~2 S* {' z9 k7 u. i shoe[:] = init_shoe()
* s4 w2 d9 G% x8 U! ~8 H1 W* V+ I return shoe.pop()
2 |9 R l! ~* b3 y
( z; W3 W1 q# i# 模拟下注法 A! E {% n. \0 Z; c- O" j: D
def simulate_strategy_A(num_shoes=1000, commission_on=True):* d" i, |4 s6 D. R! C1 e# o/ r& Z5 M( m+ L
profit = 04 ^ D" {6 }4 I2 z$ x' J$ V
commission_paid = 0
9 |4 {+ H& v) f) v shoe = init_shoe()4 m6 n0 P) y* k9 h
, O) _1 h+ ?1 j$ C: R( r+ I3 m5 F # 策略参数
! g0 G( R% r1 \8 h+ C sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级+ m, A# T1 l1 ^+ u Z( u
stage = 0
& z5 e) H' B h0 L4 G" A6 {3 ~ target_side = "B" # 起手投注庄
5 {2 g5 p- d6 a6 Q
0 t6 _1 U" z3 h& V5 A while num_shoes > 0:
) b |: z% \) ^& G result = deal_hand(shoe)6 ^( e5 z; U+ B' d
6 s3 p( y) b+ | _% s/ U5 c( J if result == 'T':
8 j) |* Q+ d( k$ L1 s5 Z8 p # 遇到和,不输不赢,重投
4 K& U5 n5 l" b1 L) `, E0 I continue
$ Q1 q6 R- E" o& |7 k% |0 \3 r
% r7 K; ^+ D) I* R& m# h U, N8 [ bet = sequence[stage]
! b1 k) I/ w2 w3 K( w+ \ ! x! k- c' P* E3 t
if result == target_side:. V v) b5 c- k
# 赢
$ g; j4 @5 Z6 g6 l s& O win_amount = bet: @2 J- h# j' |* x0 |
if target_side == "B" and commission_on:) F& e5 c+ m; G1 H) l8 _
win_amount *= 0.95 # 庄赢扣5%抽水' w3 L5 b2 H" m" b) X. x S
commission_paid += bet * 0.05' ]5 s9 f7 M8 n# K
profit += win_amount
5 G" f* r& w: F! z! [* ?& { stage = 0 # reset
' \) Q* h- `% B. u5 M" W target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
/ ?; j, ]% ?5 P9 I( K else:
( H q$ |. n9 B& v. D% \8 A # 输( A& d2 o! k9 O- l( `6 n
profit -= bet
6 v6 M3 U! M) C/ Q' ]$ G9 m/ K stage += 1
5 ]# m- r) q- {$ \' e7 e if stage >= len(sequence):; n1 R! k+ i. j0 u2 j" |8 u
stage = 0 # 断缆reset3 N( j' ~) @* O/ {
num_shoes -= 1* W5 U2 t! u* R* M: D$ g5 C/ o
4 C/ \. E6 q' u3 h; d9 e return profit, commission_paid' l' X/ R0 K& W1 ~
! v" f& X8 S" z/ c# 设置命令行解析. y4 z7 R* ?/ ]. w) ]. l' @ m' }! a
def main():
$ l \' y6 m Z" l4 u4 n, L parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
. D& r7 r8 S! J7 y# |1 ] parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")- s3 O: ], k# w4 G
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")) m/ w3 s, a+ k* s; l! ]5 x, {8 B3 Z
1 l2 }. w+ z+ P: W" {
args = parser.parse_args()2 p5 l& y( R, n3 o) N: s$ G
8 o5 k* b6 E- X8 C# G
# 抽水开关:开启或关闭
6 G D+ M5 Z6 e9 I* r6 G0 [) v$ r commission_on = args.commission == 'on'
& N. V0 V; k( K+ q$ A7 r" [: I7 _ * b, ]+ O3 {) y
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on): I# G: U9 }4 d: h) e" z
print(f"最终盈利: {result:.2f}")
: M+ A- s- d3 M' Y. a$ A) \. F print(f"累计抽水: {commission:.2f}")
1 [! {4 g: a8 U" i' R# `
+ b) m1 A, M* s5 t$ \. Mif __name__ == "__main__":
6 c. q! {% J* w8 H4 F: D main()
+ W) d9 f: R7 f% _, x3 L
' w6 s7 C" A! y" c( r0 E4 `/ O! c1 t: H) c; K, G
步骤 2. 运行5 N8 c/ J( g4 a( E- h& g
7 `. B+ R% j; j, J5 p. k5 z在命令行里进入文件所在的文件夹,例如:
. f+ H- ^# a! {8 A& Xcd C:\Users\你的名字\Desktop
3 D" { h7 }# y6 B; ~2 Qpython baccarat_sim.py
' w: R! t8 V( X+ k2 e2 A4 e% v! V% j" w* T: P0 l! T) |) M8 f
输出会显示:& Y- M5 L" t' @$ d4 w$ A
, R2 [5 S7 A' |' ]$ K9 x
累计盈亏: xxx, @( [3 d! R7 _7 P H$ C) \ k; n
累计抽水: yyy2 Q( U5 q' N4 H. C1 e% X
-------------------------------------" m, V1 _. ~+ x1 u5 i6 q; a
实例:试跑3次,
% }; t" R0 N6 V3 g- VC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
% K2 n* y- P% [* b7 r8 F最终盈利: -5360.35 : e# z/ l5 s) V: M1 R/ L+ N
累计抽水: 5176.35 ' k; G1 r: L% N% ^* l
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py # v7 v. S$ e; ^. c; [! l. B
最终盈利: -5661.65 6 z6 V/ b& E& o: q/ b6 ?# I
累计抽水: 5174.65 2 y% |2 v8 p8 Y. B$ }: n
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
9 [# s! C8 V4 K- _$ p/ N; |* j最终盈利: -4244.50 $ l$ h. E+ } V+ G* v. I, j
累计抽水: 5176.50
- c9 h+ |* l2 D- D$ W$ X3 ^8 G$ _ Q
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:, Q2 _' U/ S* ?% ^
; Z9 }# m, Z5 Y4 i' N# Z累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。 x7 j6 [0 d9 u$ U: N+ l1 j2 K
1 p! I, [, e: u) Y
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。* M9 I7 P9 E q4 v9 ^" Q
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
) ^, l) Y& W/ P6 G5 h {9 R: L人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
9 |- M1 X' l+ v) N" e7 R但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。1 D" [3 x$ R4 |7 V- q, k
' C/ \ N! b! _0 c% W q/ D1 l: S/ t启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|