|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 0 M- d5 u5 g' g3 G4 a' y
8 h- N# a) [$ c: W' t可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。, W7 y5 r8 m5 i. g) q5 i( Q
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。: B5 r0 G$ }& s" ?% S* i2 R9 L
& D4 [( Q* \( l4 S在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
3 X" ]8 L6 e0 F( `' d假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
" R5 {7 A2 a" z" k. @先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。3 _. ], s, u& x: R+ Q. Q1 J
: B4 e0 s" b _' O步骤 1. 新建一个 Python 文件
7 D' `. N) |8 r, ]$ H8 u打开记事本(或 VSCode、Notepad++ 都行,我用记事本)8 |5 D) @& ?7 }, g. t* W `; C
把下面的代码复制进去。
$ J) G( C! m7 H1 F0 B0 h保存成 baccarat_sim.py (注意后缀是 .py)。: W: R8 d4 A0 |# D
) L4 D* f) R# I0 P* ~) K' M% R B
import random
0 b0 e/ ?/ A, l) Kimport argparse; }! I Y2 _! m1 h, Y9 t D
6 b. L" \- V) X7 t7 A# 初始化鞋子
: ~( H6 T, _! i$ n( N" Mdef init_shoe(decks=8):
: I1 n8 J" O# K( s" S$ @ # 每副牌52张,8副共416张- F4 s8 F' j8 M" z
shoe = []3 G% a' g' e* l, O. }+ c
for _ in range(decks):
* l$ L/ _# m4 ]& U) ~! q shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
) t7 l+ ?, r8 w# e random.shuffle(shoe)
2 {% R/ D$ M" ?9 E0 F return shoe2 c" k! `- f1 `7 Y; u
# z7 P) Q. n- R, ^( @/ G) \# 发一手
8 O; E0 p8 ^ e* w3 G9 ^def deal_hand(shoe):
3 C2 \9 D. V) W! K( G+ [/ }' W' u if len(shoe) < 6:' s2 t0 E+ P; P2 h0 d
shoe[:] = init_shoe()
; T6 l- o [% K) Z return shoe.pop()
# N, d* W X3 {5 S( N) J! X) D! z+ c( M$ u8 w; h: t
# 模拟下注法 A
! |$ L. I6 I( v7 n/ ldef simulate_strategy_A(num_shoes=1000, commission_on=True):
3 a9 k( d* x% b5 n( h4 {; V" _/ k profit = 07 Z& x- s5 L% d5 S: V4 d1 }
commission_paid = 0
7 D5 m. h' k) `* X" Q shoe = init_shoe() y, V' W ]7 p w# W
% Y1 k1 p; t! o# t
# 策略参数) z0 x% V. ]' r3 G3 ?! B: z% _: ~8 q
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级( B4 ~! R# s9 X4 @( y
stage = 0
6 ?1 z$ f9 t4 R" \, P) j target_side = "B" # 起手投注庄
9 b1 E3 ~ m% n2 {! T. i$ q% h$ V1 Y
; i1 @# l, H& U% `: K5 \ while num_shoes > 0:
/ Q3 M0 T* s+ P+ s% [ result = deal_hand(shoe)8 I% F& v; Z- A' |6 c
! I' {3 X' b+ U$ c8 U; I6 I
if result == 'T': + A% V: e: h) A( h
# 遇到和,不输不赢,重投& S/ K _. q, L- A' A
continue) }% @7 @8 W; y
5 t% {9 t7 }, e3 U
bet = sequence[stage]
/ o. N! q; R) j" ]2 k
& A, q' s2 i7 \- q; V7 b. Y" i if result == target_side:
, K& x- e6 x0 Z5 w& Y # 赢5 i$ f" ?, E9 y# s; Q
win_amount = bet: {5 I1 k) X t
if target_side == "B" and commission_on:
. Q( [: I$ M. F win_amount *= 0.95 # 庄赢扣5%抽水# w8 T) S- e4 ?
commission_paid += bet * 0.05
* P8 @8 s1 E. r5 [% v profit += win_amount
2 f7 Y" @+ h! S3 \) t+ r- Q stage = 0 # reset
0 m' _8 e7 b# [7 m/ u. \ target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)7 ]7 t7 _2 m4 I
else:8 u* S9 l7 c' \& Q9 d; O; g
# 输
* m! m* ]5 l( y# I! R profit -= bet# \! Z8 [! L; n8 T/ d/ m4 i$ Z+ V
stage += 1! p. L5 n* A) Y
if stage >= len(sequence):
3 y$ _0 b+ }& l6 K( ]" Z6 q stage = 0 # 断缆reset: W8 r$ z' I# F* L% u
num_shoes -= 1
5 g# v6 ?7 V* r' i+ l1 N
$ `+ v8 N5 n1 f* a# J return profit, commission_paid; X# E K) @% a! p
' b! R6 I9 _/ N# {# 设置命令行解析* b* I/ E. {, m; Y
def main():9 \. O( m7 D5 e2 M- w
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
& C* N Q. w5 _- M/ D- [ parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
; i: x: y2 ?$ e) k" `: ^ parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
1 P; u" e! z: q! [; i E# ? , A5 M) e. d4 \ @4 q$ G
args = parser.parse_args()
# T) v% a1 v" j0 E+ }. z : }- S7 w3 _' G8 B% l
# 抽水开关:开启或关闭& x& q9 t. v! U: g% l5 g
commission_on = args.commission == 'on'
; {3 G5 ?9 R5 K3 ?
3 ?. |4 m7 H: ^4 X$ W' K result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
) E6 P) M/ W2 n& u, _7 f print(f"最终盈利: {result:.2f}")# U- ^& ~; Y. f0 @( X' j2 M; @
print(f"累计抽水: {commission:.2f}")
: D p; Q A8 d( V$ \" L' |* W0 w9 h' n; h# p# M
if __name__ == "__main__":
& }' x5 S. r, B. A! s. m% [ main()
; N; R0 E& R& f* O R0 X4 e
( F6 Z" g7 J3 }- s: ?6 f
, V- c; L5 r8 x2 x) \步骤 2. 运行& n5 p1 c1 e, x% Z$ W/ J
9 {! ^$ ?* x7 e" G4 b+ B* |在命令行里进入文件所在的文件夹,例如:' D+ q3 G( P( n; K0 S- k6 V
cd C:\Users\你的名字\Desktop
' N9 F9 G! b' Q/ x3 u: ~( jpython baccarat_sim.py
% m# h+ `$ c8 Z0 {; c" h. B/ W' }# M: Y5 i/ _
输出会显示:
! J, ?) e7 E8 y1 O/ \4 u7 E2 l- R2 v3 \* h- }
累计盈亏: xxx
, k' E) L4 H# G; q( j9 Z1 q累计抽水: yyy
5 h$ z* }; @4 N9 a! x-------------------------------------
/ a( R/ E, |8 f; t, ?3 g实例:试跑3次,
`- x8 P( `7 b4 O' l) F% NC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
& L/ O0 `! g: t" T+ _最终盈利: -5360.35 7 L' P) y2 h y
累计抽水: 5176.35 + L' I. ]% N: q* L
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
$ [; T; i; h' Q% e6 U( ?最终盈利: -5661.65
4 Z$ Y5 v ]& {! q' b: U: |% K累计抽水: 5174.65 1 o% Z- q9 e3 Q# |) M. j
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
8 }" c+ c! ]; a% d- V最终盈利: -4244.50 / x* l+ v H4 Y% a ~5 S
累计抽水: 5176.50# L/ @0 j" N9 p- m/ ~: ^8 J
. t! g- n6 Z) W7 J/ ~; v6 U说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
8 L; O& i' r9 y
! E1 v% `$ ?- h8 r1 G$ @0 D累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
% t0 K6 Z/ s/ G3 @/ J
1 t9 B& p j/ T1 G# [1 L最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
( U0 X) T6 k& G/ U, q这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
5 D4 A5 @& ?& [5 O; Q) ^人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
% p# b9 ~! M8 n* e4 a但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。" F2 N. F; H2 X2 o, q- N
, |0 q4 j- L1 S* \: U8 s6 D
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|