|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
1 t$ I9 H2 ~: M& h0 R
$ G( c# f% G% m4 }9 E可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。, m }% ~, n1 l7 d) ]# I
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。) m# N5 u2 }- {# Q
3 \( C" ^" ]2 S2 R在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)& }2 N/ K8 i( n1 g- {) }
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
2 u2 G" M7 g" @6 K$ W/ U( o M先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。2 h( ?& x! P! m
$ v3 K5 Z' C+ i! c# t步骤 1. 新建一个 Python 文件. d' u/ o; J, Q4 A1 W* j
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
8 k9 Z3 o' L/ k把下面的代码复制进去。# J# X6 W1 q5 h- `9 R/ K8 z0 i
保存成 baccarat_sim.py (注意后缀是 .py)。 w+ N; d1 X1 v$ L0 \5 a
) d' H/ {9 @( V% `( |1 ^2 ?6 m
import random
0 W6 y9 H, h/ C8 H* Oimport argparse
! t0 b" e& M, Z) p! r
6 y) f! q" d. ]* A! `# 初始化鞋子- X) q/ c# }) Y" ?8 H% y5 r
def init_shoe(decks=8):/ g7 e4 W8 H8 C2 f: z Z9 p
# 每副牌52张,8副共416张- f* p! N j( @8 A$ D2 L
shoe = []
" ^( e" L. ^9 B L+ q for _ in range(decks):
9 {9 s+ A* L( z shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4* y7 G! {: [+ h; _6 h; |
random.shuffle(shoe)" i$ m, l6 N8 i/ R7 ]" j
return shoe+ o6 f X2 ? b$ n2 K( i& f
: L+ `8 t% {/ H7 d, V, p6 D
# 发一手
1 B1 G" ~ U2 c/ f& Rdef deal_hand(shoe):
i* }3 [3 u- ]; z if len(shoe) < 6:
0 B4 Y% r! j" X! g shoe[:] = init_shoe() h2 G3 `& ~. h7 c/ P7 X( L
return shoe.pop()
( `$ Y5 V& V R: a# T/ S! b7 K) |4 z; ?! c ~: {) c3 J! O& M
# 模拟下注法 A
! h3 z1 E5 A2 @def simulate_strategy_A(num_shoes=1000, commission_on=True):
, I4 l' Z4 O. Q profit = 0
: s0 F- r- u* C6 S$ {2 @. E- _& C3 f/ W commission_paid = 0
1 h' S; o8 _( D4 U( B0 j; C8 U shoe = init_shoe()5 E& R) H) O* H- P
3 ^% I q4 K: I' c6 ]5 W
# 策略参数
3 j* e6 n% X& D6 L3 B1 @# q sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
6 D7 V. g/ n: S$ N; K9 c# r/ y* K) z stage = 0
7 |1 J1 C- f% C! K target_side = "B" # 起手投注庄$ y/ K9 N9 g4 z, G. t; K! i
7 {: s0 W5 w. F# i9 H+ o/ b
while num_shoes > 0:8 G! Q2 d [- S1 O& P* c
result = deal_hand(shoe)0 A5 E" I N5 h' R3 q2 z
6 G# Y- E* D* D4 T" ?
if result == 'T':
- C% u# T1 ?0 {( [1 G # 遇到和,不输不赢,重投' @: y# X$ U; m8 v6 I8 C
continue& ~: y9 S1 {7 i: `
' {; g* x. z- a& ^5 ^ bet = sequence[stage]
- x! k: N+ X3 n! W0 L x* l+ C! L, _- ~4 v' o
if result == target_side:/ H; E! q# ~' @8 ^4 A1 f
# 赢" q# f2 t$ I3 G% f5 a( E: M/ \
win_amount = bet
$ m; F* M( D0 R% Z0 q, U6 o if target_side == "B" and commission_on:
% e2 P" m1 K3 C0 [* s0 G win_amount *= 0.95 # 庄赢扣5%抽水
" r6 ^+ L S) I' m- y# Y commission_paid += bet * 0.05
P: N+ t; u( p profit += win_amount
! x- {" V6 |5 k: `6 X1 u0 D6 H' k stage = 0 # reset: Y& [. z) D) I4 ]! S$ J/ ]& k5 o
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
7 X/ |+ D4 g' g" L2 w else:
- g; Y, j) m# w& k- [: m, \* x7 q # 输
/ c/ {) g5 p. J8 S7 T profit -= bet1 o7 T* K6 F2 j, O1 r2 @
stage += 1
) @" ?/ k; ^# W) i" R if stage >= len(sequence):
! K+ E* T, l+ Y* [+ K stage = 0 # 断缆reset) u6 w6 c( w& F$ [0 R1 Q
num_shoes -= 15 v3 n' C$ H1 F' `- D' q
; K9 z4 B1 U, e return profit, commission_paid% {$ f% | b; a" i1 v
- j6 {4 ^$ V, ^# E# n4 [- F! e( w# 设置命令行解析
8 A! g8 c9 Z' I; T7 x4 @def main():: Y7 O4 @! H8 }, f/ W
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
8 a$ _* g" |6 n3 ? parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")7 J+ }, v$ d# ]0 i( _( k& ?
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
" O5 n6 e0 R' W5 T2 h4 g) w \
/ C; {! _# G+ r+ J3 N5 a args = parser.parse_args()
) G# N/ Q* `- j# s- O" K1 p
3 p3 V, e7 b1 m- k # 抽水开关:开启或关闭) }" Q; }: i' w1 {$ k
commission_on = args.commission == 'on'# Q8 f! d9 e# b( e0 ]
% w& h1 o% ?2 E2 x9 O. H1 I- I- S result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)1 P0 E6 s: y! E+ V$ q
print(f"最终盈利: {result:.2f}")6 S1 M3 P( Z3 k8 K
print(f"累计抽水: {commission:.2f}"); }5 b. ~, S7 M
& n) }* A6 r5 Q/ ]" ]& p+ ~if __name__ == "__main__":% _7 {3 ]& a/ v
main()+ V/ _. S# d$ q7 R% b! X1 F" W9 @0 o
5 x1 P7 I: s$ K
/ X7 ~) d8 v1 F
步骤 2. 运行7 f# h" h! x A# R h2 @% Q
8 i! T( V& u9 v( O
在命令行里进入文件所在的文件夹,例如:$ I# u+ q0 @# l8 U, ^
cd C:\Users\你的名字\Desktop) T" z5 y T' i& [2 U. U2 F1 r
python baccarat_sim.py" x* u6 R9 ^% v" s. A9 ~
, `& @5 s5 I' ^, X5 U; m输出会显示:( k( {7 u1 E) x0 {- T" Z+ j
% I0 z( C. m6 g, }! P+ L0 T( `累计盈亏: xxx; i7 }# {; `! K* |
累计抽水: yyy
( U3 F K* l2 C& E" M" O( O-------------------------------------
# m. _7 ~: A8 }! \ h0 k8 n实例:试跑3次,
& m4 t' s- X" B, T' V( K9 RC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 ?. C: Z% \2 F最终盈利: -5360.35 * K3 Z# r" x1 Q# x0 `% p/ c
累计抽水: 5176.35
+ C! o5 b- R& ~) j _C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py & {0 j5 t. q0 D" ]$ ^$ B# G; B
最终盈利: -5661.65
3 U5 ]2 D; \2 W7 n8 v* J) H5 A& A累计抽水: 5174.65 , f4 _$ \* `$ [" Q2 n1 {. ?
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
6 N# ]- _! F6 r& Z2 a9 L. M! S最终盈利: -4244.50 7 d* s' b0 ~3 q/ d2 K
累计抽水: 5176.501 w: c) B% _" V8 m5 p
( R( k- s5 R5 v0 U说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
& H. {7 j+ [2 @/ D3 }8 B& I3 s K2 Q7 \! C
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
1 N% U: d& ]% N* H. J/ n& A# s8 @* n9 k' |4 v: M/ y/ S
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。5 t# X# W3 q g6 K
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
! a2 m( i" b! T3 M( R/ f4 A人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。, E* ^4 k& @5 b9 y( \ ]" X/ B# ?
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。) @1 j0 M3 W' r0 J6 n8 A8 W
' G' d, D" H) T) P
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|