|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
3 @, u* ]9 i: E7 c( T7 w5 c1 H! Q: B0 X& k. R }* i
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
1 q5 Y- R2 g9 e( y) oExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
) g3 c# @8 ]; y4 Z V' M7 s, |
) S* R. f& ?$ F4 T! o在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装). K& _1 }0 a6 h! J+ k* x
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
* s8 `/ G3 B9 t8 o$ T6 I/ H3 J2 N先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。4 T& H2 v: J- u. u' a2 h: X$ P
8 x+ d2 L, U L# w/ V" U5 m步骤 1. 新建一个 Python 文件
7 j0 T9 V. P# u( W! B打开记事本(或 VSCode、Notepad++ 都行,我用记事本)8 w5 x7 g. v: G; D* [
把下面的代码复制进去。+ X& \2 s' ]! ^* {
保存成 baccarat_sim.py (注意后缀是 .py)。$ v- b6 t3 `" o; }; g' U
& v) Z) c T _
import random+ ^; T j4 Y8 y7 y. w ^
import argparse, w! x& |$ c+ M, Z
9 M3 o0 H( c6 ` v
# 初始化鞋子$ b0 q/ Z1 ~/ B2 [& G/ I
def init_shoe(decks=8):
9 X: }" X" F8 ?9 R& } # 每副牌52张,8副共416张; E# u! Z( S# b
shoe = []
+ c# ?2 f2 U/ W% k* L9 P for _ in range(decks):
6 |% g/ K) w9 G shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
) x- B1 e# Z, b! z random.shuffle(shoe)
, w1 s3 ^# A& p. ~ M0 W return shoe g1 X" _2 C) C i- m2 \4 v7 M" `. \- r
( c9 d! c6 \; Z1 [! a+ p# 发一手
+ H5 x% Q4 \: f- B6 V2 p' M, _$ wdef deal_hand(shoe):
# A8 d! l _" e; b' h" O* H2 s if len(shoe) < 6:* y0 M# C. E* Q, P/ C. |2 N4 j
shoe[:] = init_shoe()5 H6 [5 \% F/ @, T
return shoe.pop()3 z* C! `+ ^5 X( x6 r5 ~. o/ d7 h
$ n" g& t* q9 F8 f$ {3 X
# 模拟下注法 A6 n) J8 Y( { c2 a$ H6 y' Y9 c
def simulate_strategy_A(num_shoes=1000, commission_on=True):
% _- M4 R( f$ B* m profit = 0% C+ q& a5 I* I( U1 X
commission_paid = 0
% P- D5 Y' T! V7 }. _9 l& Q shoe = init_shoe()
0 N) k/ S) v: U7 x/ P7 _8 B
" c8 v/ {/ I/ r+ M0 l+ r3 b5 J6 v # 策略参数; v. s" C. h8 ^) h- A! Y
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
8 F2 e& }# h8 i0 e! T) U% x stage = 06 }, r s, t. p# L# Y; P6 d: W, z' ~! F
target_side = "B" # 起手投注庄
8 ]0 j& O" p$ b$ p" H/ Y2 k+ ?3 p
- X% N' c4 }7 m4 J while num_shoes > 0:
: ], M, z' G/ s9 Z/ A/ b result = deal_hand(shoe)5 ` Q5 p x7 H+ @4 J0 Z; ^
% B4 L" M3 s2 l- C if result == 'T': & U, r6 C( P6 v }. ^1 u
# 遇到和,不输不赢,重投
6 {# q9 r- `% V) ?% \5 E! N9 R continue9 N7 N+ n' O5 ?) D
2 r. U5 q: f+ f' X
bet = sequence[stage]
# x$ a; n( X" @4 D
& b0 P U( D4 y; E2 ^& T if result == target_side:0 v$ _+ X0 V1 z7 t5 p! a
# 赢
, w% n1 h" d. [6 U% C- i win_amount = bet
* z! L9 o" W# Z) R6 @ if target_side == "B" and commission_on:4 l; \! M2 T& l, m2 a8 F( d& w
win_amount *= 0.95 # 庄赢扣5%抽水
3 p6 N4 J3 ?# b# T commission_paid += bet * 0.05
. C: z4 ~7 I. v, t# Q profit += win_amount
& q& \" I6 l* y. I( {) a& S stage = 0 # reset
% c& I+ ?& V. Q+ S8 S target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)" Z0 z) h( k/ @$ c' I
else:0 S! B0 a Z5 A8 k2 T: \' m
# 输
% v, }; V4 p; `) v/ H profit -= bet
4 k- ?4 h& x9 L/ t# q g* ? stage += 1
0 Y1 {2 [3 N: l9 X& v if stage >= len(sequence):
4 D% ]9 X: O. m& b stage = 0 # 断缆reset
+ V2 ^! N' O1 x3 B: G num_shoes -= 1( V: T1 ?, M8 V+ }9 ~, A+ B; u, T
. t& A$ g3 W, V/ ^' L return profit, commission_paid+ u$ {. T" ^0 \% n! X
( a; `3 i) a& s Y. U# ~$ [8 o+ n# 设置命令行解析1 e; C9 l J: j: @; u" A) e5 T
def main():
7 O. o9 G, ]# f6 n! a: L2 t: h parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")8 l" n# ~4 ~1 W2 R* ~( t
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")2 _$ T! n! r0 }# g5 R/ `
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
4 d: z2 m# y5 t 9 C T3 V! S4 z+ P: S; z o+ Q+ ? S
args = parser.parse_args()
x( O3 d1 w8 q& M4 N* B F5 Z 0 F4 B; z% o# l$ u
# 抽水开关:开启或关闭
0 J; J. w5 m3 }5 c commission_on = args.commission == 'on'
' M6 `& N. T4 p
* |0 m( C9 Z: j: K result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)2 i+ S( Q- i: v7 a
print(f"最终盈利: {result:.2f}")
: x+ z6 o& `+ p8 R! I& _; I6 m9 M print(f"累计抽水: {commission:.2f}")
$ M. @& r5 b" @' ~/ {0 W( v5 G( J$ R4 j4 f% K, N
if __name__ == "__main__":
! ?# e+ [5 P/ Z. x H main()8 H5 p! y9 j% \& F @. G- N/ W
* D4 G! |( i+ M
! H ~* O) M- T9 ]3 X1 P& ~: L* C: U& w步骤 2. 运行- a% M5 i. s# a' Y6 I) c
9 [7 Y' I8 t! x3 \: I& d
在命令行里进入文件所在的文件夹,例如:
% ?# R+ y( c* C9 jcd C:\Users\你的名字\Desktop
# y0 U5 L# O! s& D3 I7 lpython baccarat_sim.py
6 }* |" r5 o2 g
9 Q" Q: q; b. i5 V4 n5 i1 `+ l: t输出会显示:
9 h5 W3 _- p3 O# u' j. w) c3 @" x9 ~4 Y+ k8 n# l( d: d
累计盈亏: xxx
% h% K, }* m5 y( {4 A累计抽水: yyy' ~0 o: }; Y3 E- A3 e8 _
-------------------------------------5 b; l0 R6 s$ N4 P; e$ Q) Q
实例:试跑3次, 1 j* B U" m% x
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py - ~3 b0 S2 M. K
最终盈利: -5360.35
9 X. B& J' ?( C/ Z/ F累计抽水: 5176.35
, t' O6 ~" g# h# b2 n0 \7 g" }C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 6 Y6 _9 w; R5 r7 O4 u7 k
最终盈利: -5661.65 & t, @/ N/ Y. T7 ~# _: h M
累计抽水: 5174.65
& D4 h. L) u$ X+ R! SC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 6 [/ U' m, w/ n& N1 X
最终盈利: -4244.50
& T+ ?: u; K* T8 U( P! Q累计抽水: 5176.508 ~: D8 ?9 B- R A4 c3 u1 l
$ L* z& y4 y4 K3 r' t
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:5 V' b/ X% w! D% N% ?, X6 D9 ?
8 y1 ^2 @6 C/ a累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。4 Z) s' P% D# q9 Z
- u: n( X$ t2 n+ R最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
& {5 V, u4 e; f- b2 D这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。: P0 h/ I: p) c4 l
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
t8 L! M4 e. r: ^$ Q但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
" j; D" m) F8 y1 Z: R: w% v# e, v5 s6 N' N# O; D
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|