|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
# C: g+ L9 H$ Y$ v; [% Y; i+ o4 B4 H6 ]
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
, }; Q6 R& d" d3 [+ qExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
4 v U- |* Y9 d5 K/ b. V4 V6 w z* x% S& G9 C4 J& y
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)2 K S6 X. U. {) D5 B5 m
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。8 n$ p& W+ F) a* t8 M- K' H
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。. ?/ D& e0 p( J
2 ^0 x" q) H5 A/ Z+ y
步骤 1. 新建一个 Python 文件2 \! @' ^+ Q( `3 n! y' T% J
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
3 O% e) p* i7 c" R. j( H2 c( U8 D把下面的代码复制进去。
5 F& \! H# Z- V+ h2 I) k' \保存成 baccarat_sim.py (注意后缀是 .py)。* C# Q, z( U" \/ j8 m
2 [) E' U, j& e: timport random
* X3 c9 p7 Z2 p! e9 h& q' j- Zimport argparse1 {* B7 T( h! k
" |* h4 n. S! y# 初始化鞋子8 r% ~( q$ c- N0 [7 z
def init_shoe(decks=8):
, b( r3 v7 H$ i+ I5 E4 e # 每副牌52张,8副共416张
, U1 s4 V+ N# x8 c0 N( x shoe = []
1 C1 V5 H/ o6 G5 @ for _ in range(decks):& c' [2 X1 Z: b* g1 j' O
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
4 S Z S2 ^1 _$ }! p random.shuffle(shoe)
6 b' j7 l2 w/ c! u$ V0 }0 x return shoe9 `6 E# Z1 m c+ ^# u+ S5 B
! u5 S F2 ^1 a1 Z$ [9 u) [
# 发一手
# m7 d9 z* {+ r8 p/ K5 Q$ @# `9 }def deal_hand(shoe):1 \; A7 _9 G+ k: k% S0 B* M4 ^% ]3 ]
if len(shoe) < 6:4 s5 ?, @, |* R# {
shoe[:] = init_shoe()/ F, [+ X1 L+ S9 u
return shoe.pop()
1 U; v0 o2 n6 g3 V6 v# ~4 R6 f# A6 K ^
# 模拟下注法 A
! l" F& F( M4 V) i9 C$ I4 Tdef simulate_strategy_A(num_shoes=1000, commission_on=True):! h9 p) R8 V8 j% y! J0 ?" c, F
profit = 00 [+ n+ b" B8 k: t( \; Z9 y# z
commission_paid = 04 N$ q+ }# R9 E6 @
shoe = init_shoe()
& k- ~7 W7 |8 C$ J+ F & Q$ d7 k3 Y2 j7 ~: S
# 策略参数
9 W) W1 E, l, [ sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级& J d, K; |* Y
stage = 0
9 R! Y l' w3 w+ [. z target_side = "B" # 起手投注庄5 I0 i1 P9 T! U& A
5 E" P2 }% k; c* t, M while num_shoes > 0:
! M; ^- `) L" z1 _ L! u- m3 Q result = deal_hand(shoe)4 e8 _8 X0 O# B$ S' o- U
9 K( A0 T: V: C U, J, } if result == 'T':
5 E- z0 N' W7 f; b! ^ # 遇到和,不输不赢,重投0 a) o1 K9 r0 O
continue
- B. Y# ^4 f# C$ s$ e2 h2 |. V
* k5 k- |# w! y; [3 l bet = sequence[stage]
2 H$ V3 i6 s- o; p' A v j; E; U! p
0 x% V1 p+ o" d9 q if result == target_side:
4 ~- l* }+ L4 A8 @ # 赢
( P, `( r8 U S. T win_amount = bet
+ ]1 G1 n2 e. {* O+ U if target_side == "B" and commission_on:
6 Q2 y: ]% `& l% j win_amount *= 0.95 # 庄赢扣5%抽水
5 x5 ^, O" \9 M4 S8 i: X commission_paid += bet * 0.050 B& e8 U. Y1 j
profit += win_amount Y3 R- x# V2 {' R" b& y& I
stage = 0 # reset7 \9 v0 t/ e8 k, `* V* s
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
* A- a0 ?6 T! Z else:5 t+ C; X$ `9 A( |; N5 Z/ M' l
# 输
% ~: _& T+ c, j. `- _/ A7 M" Q profit -= bet
& \" l0 @4 `1 h* W5 b! q1 W# ^ stage += 1
& n% |/ h9 h' J3 K. l# l if stage >= len(sequence):: ~! L- X7 k9 g9 |4 N- ~4 U
stage = 0 # 断缆reset
+ H7 h" _6 h: M num_shoes -= 1
7 ?$ ~ h k/ \, H$ `+ g- ^5 W( W" t {% K/ R' L @
return profit, commission_paid! n" p) o/ q9 i. e2 L4 s
# c) J5 Y( u, R5 a' t$ T) Z- q# 设置命令行解析: u/ t ~* ]# V% o5 |2 d. \- m: \
def main():% {! H% `) }5 ]! f8 _% m
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
9 s) \8 N+ H/ f& R# o1 ]/ ]- | parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")1 Q$ Y# Q8 G# _' h9 k1 W% c
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")* u) A% H' |6 E9 N) O' `) d( v
! K: w$ V' O+ R( ?6 T
args = parser.parse_args()
- R5 b% S( ?3 r% I: x 6 a7 \4 h9 N% s
# 抽水开关:开启或关闭; Q% w" Q8 R, F& U5 h8 \
commission_on = args.commission == 'on'
9 {" }' `5 Z; t* |; y9 X8 `2 O
$ y" w8 Y8 f5 C result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)9 x6 W C- k7 J9 }, m
print(f"最终盈利: {result:.2f}")
( c$ i. K, ?0 g print(f"累计抽水: {commission:.2f}") c6 B' O/ J6 i' F0 ]0 H0 I
8 L5 n' k i. }' Mif __name__ == "__main__":
1 R3 z/ y5 p9 S# T' q* y' L: r. M main()
7 y2 E2 z1 l5 ~" k( I4 e! a8 ]% a0 g0 u
7 ?: W& Y/ r+ L" U; s: f L! ?
+ e/ X: x6 n! c) v' M' T! P步骤 2. 运行
& u( m9 c; j$ b2 h! ~ r \+ W. w" F* O5 ~
在命令行里进入文件所在的文件夹,例如:
) T3 O* e- q6 h7 t3 y! D$ U! [cd C:\Users\你的名字\Desktop
% _' e$ }) ?- R, Jpython baccarat_sim.py9 t" C( [. M$ Y' X! A5 U1 V
/ n. C; _" m+ t' e
输出会显示:& M; y. e$ k- P! _
# p3 S+ Q' ]) G5 h" J
累计盈亏: xxx
& L# R# U: f$ t" l5 g$ n累计抽水: yyy, r5 e z5 W4 e0 G. s
------------------------------------- _0 f8 Q4 s$ {% m
实例:试跑3次,
, V! L; a& E, n0 TC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
0 X( S' D% c x最终盈利: -5360.35 4 _) Q [4 O) u( L3 p* B
累计抽水: 5176.35 1 |- N0 O) z3 x
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 4 R! y& f' |5 N; Y' m3 w1 ?
最终盈利: -5661.65
7 ~1 L3 X* |- [; ?( e! ?累计抽水: 5174.65 7 m2 t0 ~1 }- G' Z7 u
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
2 Z) ]/ `: M5 y1 }" i8 g" N最终盈利: -4244.50 1 _! U: `5 @& A7 I8 @& u S
累计抽水: 5176.50
' \) _. T7 `* ^( d1 `( t# X' s. q( D/ N. w; [
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:2 Q& V+ A- M9 k* u# f
! E0 ?8 m1 C% K
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。+ p2 C: x. |6 p# b" V
8 j. e' j+ Z; n
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。" O% [3 u; ?* ?4 ?% Z# X) N E
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
3 x+ ^: B e- v人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
1 D& K. v0 W( i4 ]: }6 k6 Z" w但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
" T) U% t8 B4 r9 Q. l. a/ ]7 d/ ?2 ]5 m: h
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|