|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 0 S( @/ x* j& ^; N& w" s r
& `; X i& Q% T9 Y* a" V6 p) `; q. u可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
( A& B" L ~9 d' Q3 ~Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。7 x* U1 |& o# e! q- @/ n! B+ \$ j
1 n9 r, Y Z2 ?/ g) C
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
4 Y2 k2 w" k- G& l3 k( Q8 ?5 X假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。) q3 R3 H; D% A
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
6 j8 _+ p; W, n0 n
W: i: w' w Z y; Y' a步骤 1. 新建一个 Python 文件
& Y( A" K- p' W! T/ W9 y! x打开记事本(或 VSCode、Notepad++ 都行,我用记事本) }7 ?% `& ^; h1 [; |3 X
把下面的代码复制进去。
. w4 m+ d$ w# z I, K9 V. e2 ]0 v保存成 baccarat_sim.py (注意后缀是 .py)。
1 c. I3 A$ y) } W1 w h
9 P; r+ u# b+ W" C+ v- x# |import random2 X( E$ ~6 B& F0 a: D$ ^
import argparse# D Y" S ]( s2 D
\* C/ r+ W) K" X
# 初始化鞋子" n9 P q+ L* X( g( E
def init_shoe(decks=8):
& {' @( d C' N; m6 \ # 每副牌52张,8副共416张
5 l8 @. H0 t: l+ _/ k0 {! W. W: j shoe = []" R4 Z2 w/ R5 _* `6 ?7 y+ V
for _ in range(decks):
+ u) k' k; z' Y shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4* i. a! t! @8 q: r: ?' j
random.shuffle(shoe)
4 G$ k# T8 y5 J: }2 W5 p! C return shoe7 m6 I2 Q' v* N! v4 A8 f
0 y+ b$ |3 H# I7 S/ L% ^
# 发一手
' v9 z7 L# B, F( S" S* tdef deal_hand(shoe):
! S; B" L+ R8 n$ g8 ` if len(shoe) < 6:
$ m- @1 I' h* |" R# X; U+ h shoe[:] = init_shoe()( z) `/ ]- w: L: X
return shoe.pop()
3 O# r( z9 U4 C, T& c- z
6 I. H3 v* z! f) P M# 模拟下注法 A2 A v3 w# y7 |. \" m1 V# a
def simulate_strategy_A(num_shoes=1000, commission_on=True):
: F. z w3 X8 b$ ]( h profit = 0
& q* V* ~- Y" L! a* _* R' { commission_paid = 0
% e" A0 K; G' x4 g& c# O shoe = init_shoe()4 F) V% a. O1 ?1 |1 i6 w* [
* Y7 p7 Z0 z l- H% S # 策略参数5 U1 h+ X. b. {) r" Y
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级* m9 |: V( U0 `* k1 t5 g' b. i1 D
stage = 0
2 V/ K% ]$ r# I" i2 V8 p% G target_side = "B" # 起手投注庄! n, T$ U% ?" F3 g. Z5 ~
5 C# d7 b7 k0 j+ Y while num_shoes > 0:
! {1 d. Z: s1 U2 P result = deal_hand(shoe)$ T$ ^+ @6 j) n) K: v& K- h
f& ]- D5 ` g
if result == 'T': " o ?1 y! r. e" R: o
# 遇到和,不输不赢,重投
1 E5 L5 H Z# O$ \3 a continue# o# r7 u0 W0 O8 h2 D: z" j% z
+ [- t [- M x/ d; L
bet = sequence[stage]
2 w- s" V3 W0 Y9 x+ h1 y ( z ~, V, }" o% ]. u) v
if result == target_side: @" c- E7 K* k2 e: g9 M
# 赢" o$ ]# S4 U1 F1 k6 R
win_amount = bet
, H& u3 B y E, v* V if target_side == "B" and commission_on:
4 [+ B) W' r% d% Q win_amount *= 0.95 # 庄赢扣5%抽水
! `8 S0 ~: D$ N9 o& X8 g commission_paid += bet * 0.05
) y5 x$ A6 U8 h2 h% W# L8 x' v profit += win_amount' h, d# ^! @" \: L5 w) \
stage = 0 # reset
0 V& Q6 O; K1 y target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
9 a/ {4 \& Y8 `; m else:' V4 h( b- P3 M6 Z s8 b H9 G
# 输7 y2 s( Z6 _( {! ^8 w$ B8 \) ~5 b
profit -= bet7 O9 s* E; r$ T! a* y K
stage += 1 \) Q! w7 O$ V$ O- E7 B
if stage >= len(sequence):
# L" y- `. T# K0 a9 g stage = 0 # 断缆reset2 j3 } b o& C$ ^6 z" t" E
num_shoes -= 10 }5 Q& Z8 n1 N/ U
' E7 n1 f Y# `* R' g+ S
return profit, commission_paid; w* X$ R( f# p
. s% }4 U, h3 k- n+ `" i. P# 设置命令行解析+ C; v7 |, L3 u- I/ }2 r
def main():
( n& B. @( t; J; I' ` parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
' d) y- Q& E7 ~+ c. x! ?9 [ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")4 z0 s: V! r) p9 d& @1 Z4 O! \1 ^
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
0 E7 _% F1 \- T, o # G0 O! p8 o6 f3 }9 w* W; \- w& H
args = parser.parse_args()
: u6 ~' F+ R$ w4 j g5 T * y% R' e( @4 K6 V3 M L+ h
# 抽水开关:开启或关闭
% Q& U: h3 o5 D j7 a commission_on = args.commission == 'on'$ E; b: e! ~& y) w
# M6 X* p# s9 l% j
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on) C/ _8 d7 \3 Q5 `" V8 S
print(f"最终盈利: {result:.2f}")
7 ~+ }( h/ v5 Z print(f"累计抽水: {commission:.2f}")
4 F# {/ \2 ?& G; K+ R" \. Y0 ]5 W; J/ B
if __name__ == "__main__":
( c6 _: x9 E* T8 E I$ ^ main()
) D# [# g7 ]2 b% j* B2 A8 b A) C; L. T) A, K! |, o
" a- q) c: Q( q- L- t& t# Z步骤 2. 运行, M, H1 C+ t/ R
% Y6 i' w. ~. L+ g" M: _% u在命令行里进入文件所在的文件夹,例如:1 Q" Y: G j7 ~& x5 T- s1 j* a
cd C:\Users\你的名字\Desktop
/ q A' z4 G' r5 i' Wpython baccarat_sim.py
' a# J/ s) t- T! v" U
+ P/ M. Y8 S( q& R: ]; J输出会显示:# K* M& l8 s; t4 J1 s& P
. E7 V: `8 d/ A/ p! C累计盈亏: xxx! E: l# |+ q' @+ z9 v+ _# `
累计抽水: yyy
$ H& J+ q' F% c5 W-------------------------------------& v/ z* U3 D( N9 m
实例:试跑3次, ' L1 `% D1 n, @4 \ M4 M
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py # k& z) d8 ^: ?0 H
最终盈利: -5360.35 " Q2 N: C# E: q* r. P: V5 \1 i1 L
累计抽水: 5176.35 * p: f% U9 v3 z
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 0 ?: Q! g1 i7 t' p# l6 F) {3 x
最终盈利: -5661.65
1 o: J0 U9 s* D! ~, K8 F累计抽水: 5174.65 3 s2 S" ^ `/ i/ D4 V# j0 ~- @
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
& y& e+ O- a4 Q( Q! H& ~最终盈利: -4244.50 }. L Z) r2 A8 q! c5 i
累计抽水: 5176.50
" m0 `: Q9 p6 ~& I- \: _& T8 h% y9 d7 v) R8 p% x7 ~/ Z T
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
- G- ~$ @4 _" h9 `) c4 C' z$ e
2 A! [* {" ~/ P累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
; {* u& h: g4 H
. ~$ j2 @9 }2 d$ `/ Y最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。' P8 b# n" R- T. M) H% {5 d" p
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。# m9 M3 [4 G; D! V3 U+ v6 M
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。 W9 w" i/ R/ z: ~
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
: Q- m. a. v+ s9 c' c5 i& v G N* O2 A# J
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|