|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 * p0 F/ I" D4 W; N% k9 l0 J
% r. o8 M; d5 Y. h可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
7 O5 M3 p+ L1 N& V$ xExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
% x0 ?* D- _3 x% ]6 X3 [# n
* E# X$ _: o& E J f! _, A在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
$ K* t- L% s) T$ B9 s, u8 M( R" x& }8 a假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。: a" m& y! v$ w. _+ W- Q+ i
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
# G3 ?, O9 M4 \ b5 [1 ^* Z5 `2 q$ |( [- Z2 M z+ ^, e3 z
步骤 1. 新建一个 Python 文件
7 m, ?5 w9 r; D2 U( f, e打开记事本(或 VSCode、Notepad++ 都行,我用记事本)% P4 p. j$ o9 b! J/ Z5 ?8 e; Y
把下面的代码复制进去。2 h ]8 M6 e* ^! |2 @
保存成 baccarat_sim.py (注意后缀是 .py)。
. \; {% d+ f# w6 J/ M) b8 C: T% ?5 D" ~0 b
import random0 G% G0 P. u6 t% w/ u, M# f4 h
import argparse
3 L3 h& ?$ A) n; S0 S& r/ P0 H( B
" E8 b: i, [! }4 h# 初始化鞋子7 w3 f* L. E# B; M0 W
def init_shoe(decks=8):* v% B* t8 e& F0 N0 W
# 每副牌52张,8副共416张
& x. @* @4 S$ P8 U shoe = []
6 \( k3 V* X5 |8 l$ k' I for _ in range(decks):
( ?* j( w' R. x4 I( _ shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
5 P0 t1 G! Q6 i1 M" X: ?( J random.shuffle(shoe) ~8 T7 E$ c+ U) z! Q
return shoe9 N% g5 T9 I; a e5 J! t1 s6 t3 M
6 z* C5 Y; V6 B, A" Q
# 发一手
4 o3 ~4 v8 }$ f1 E0 W, pdef deal_hand(shoe): n& h. G% a# j
if len(shoe) < 6:! u A6 P1 Z( u Y9 }
shoe[:] = init_shoe(). @7 @$ o! V' e' V6 J& W5 ^& c8 z
return shoe.pop()* ]+ f: N* b: S9 B. O( g; p
$ j& k7 q7 G Z& |1 O7 Y
# 模拟下注法 A
' D4 D& q$ b4 |def simulate_strategy_A(num_shoes=1000, commission_on=True):
( R5 C0 f1 B- S" z) K) V2 \0 N profit = 0
% o t! w/ m' ^9 e% ` commission_paid = 06 `. E$ D- u2 A2 ^' f# Z
shoe = init_shoe()- [& g: v3 F6 Z! L2 [# a# L ?
6 s) y$ y) ?* L( H! }6 Q
# 策略参数
! s9 u2 c! c' o, W, g7 z sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
% W( D3 H8 S% E: F+ G, v stage = 01 X* a1 n& T+ G* q, ~& C
target_side = "B" # 起手投注庄
$ ~& X+ ^& t, }" G
% \" c1 f" }* W5 U# N while num_shoes > 0:7 U' J& Z3 U2 @7 z7 G# ?/ w
result = deal_hand(shoe)
6 P& `4 C3 Q( ?9 X9 w- x9 Z( [: D' c' h% s! V# X
if result == 'T':
( S1 Y+ r: o( ^+ j0 c! ?% H # 遇到和,不输不赢,重投- z+ k' j0 E% w, m3 d7 I" M% _
continue4 q" \& P+ x" s; x {$ p
7 d) f7 j: r! W: R/ [, G; T/ y bet = sequence[stage]- ?$ B6 x( r! N' @7 I' Q( a
# U: Y+ t0 s' Y, g/ K3 J& f if result == target_side:$ k- |. W, z; i: Y
# 赢9 K& s2 P: B: C3 ~* @) x
win_amount = bet: U3 v3 o: ~- |+ W7 w1 F* ^
if target_side == "B" and commission_on:6 }5 x; x9 V6 S! q- z
win_amount *= 0.95 # 庄赢扣5%抽水8 U( D+ p' L# o
commission_paid += bet * 0.05
6 I+ G7 l% n1 Q$ c4 ?4 b profit += win_amount
) ~1 }, @7 P+ s, I! M. v' k stage = 0 # reset8 e, k. I0 d6 J1 k, d
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
0 X. w# F; I% `+ e# a else:
+ n5 x: Y& d& n6 E # 输! ~) b& E1 i7 H L$ F$ s
profit -= bet3 T3 v0 x0 h( P0 n! p. U5 G! l
stage += 1
+ g% I( u+ Q/ Q3 J, d0 g* ] if stage >= len(sequence):
4 k$ \, j/ Z4 K9 @$ b! x9 J stage = 0 # 断缆reset
' n8 l1 Z4 S/ g5 l6 [- i num_shoes -= 18 Y' O5 C' l: K4 U9 S0 K
5 E: s- p( D3 e
return profit, commission_paid# `& a" W; T& A% Z% m
; {$ t" O% S5 g
# 设置命令行解析; s! x$ s M! u$ @# f9 m
def main():
! R6 \9 ~* A7 Y7 E& m% {" e, B parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
: O+ T3 r) K4 o- O parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
# @. g* H/ Q W" ~3 u parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
+ P( C* C+ B* F& `: M$ g # _ G: \9 Q% W
args = parser.parse_args()( x& _/ M* D" w! o" A2 e$ y/ {4 k1 R6 o/ ^
8 {6 D+ V W+ Q6 {
# 抽水开关:开启或关闭" O- k0 U6 t' n7 l8 C) W
commission_on = args.commission == 'on'" U1 N' y0 Y8 x2 w) ]" j C5 a6 c. \4 F2 b
! A% W" v5 b# P1 m! I5 V
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on), @5 t4 H. ]2 Z
print(f"最终盈利: {result:.2f}")' g; |6 E5 ~+ p& ]# ?
print(f"累计抽水: {commission:.2f}")# V4 u" ^0 d/ v( ]" l" ~, W
7 l0 I! v" z4 |) O7 [# Qif __name__ == "__main__":
" h \$ E: l7 H main()
5 K7 a! G; h/ ^7 ^4 ?' K3 Y1 C' _
3 ]1 B' g6 d4 W0 |+ K( [' o: D2 d, Z0 X& C5 U& L3 R J
步骤 2. 运行
& r, d" Q+ V$ L8 ~& `/ v- i, A& ]. G7 r R1 _: {; G' s
在命令行里进入文件所在的文件夹,例如:" f: f& M; z; j6 Z4 C% i# U6 K# l
cd C:\Users\你的名字\Desktop( Q3 M) G" A) q0 I( j6 M S
python baccarat_sim.py
/ Q' A+ C$ s; X& G. b& {- l7 U5 o7 V
输出会显示:; t) Q, \) e7 J7 p/ N2 D( T) M
* l: E$ u( n" W* K累计盈亏: xxx4 ?" z5 `# x# [& Y
累计抽水: yyy
- v' ^( R& d4 I4 b7 }-------------------------------------$ x" y8 J$ t4 z; s! L0 z; n1 N
实例:试跑3次,
7 ?4 G2 Q3 g7 D. sC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
& R7 G2 L6 c7 l$ S2 j3 _( j2 ^最终盈利: -5360.35
; e* R& L# r( M累计抽水: 5176.35 8 ? P4 ]# Q0 `& g
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py / r0 }5 V# w! o. m7 g
最终盈利: -5661.65 ) q5 q# y0 ]. E" \& P9 \0 R
累计抽水: 5174.65
- `( f, m$ ? D3 M5 z- W mC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 7 U1 m( w) ]6 b9 f4 X. A! ]* c5 H) B
最终盈利: -4244.50
( Y% \' j9 s* j( V累计抽水: 5176.50
7 X! s6 {( W+ W/ s0 @& n
- B* S: f9 l" h, [0 ]说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
- j* r7 m& G' U3 V: R+ L% C, x' C3 w$ T# D* N- m5 q% @
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。. U! b4 e. ~7 v+ I; y% S
8 ]* W G9 d( ~ `3 g% |
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
; E! {* N7 }/ M1 _' m这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。) b8 D3 w& V& X2 W
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
; z; N3 Z' ] O2 ^' A但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
) A, Y( m* {: ?2 }5 ^ i
3 E J7 V+ l4 k6 f+ }启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|