|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 7 m; D2 |. M" {) y) }
5 e" w6 P4 o) A
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
. ~8 W4 _0 B' P+ k( m% `6 fExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。) \/ S/ _9 ~0 h- h) F: Y* Y7 g5 K% u4 ]' ^
2 ]) |8 ^" w5 s8 P+ a$ A在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
_$ F; r" d3 R3 Z# [4 \假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
! y! h; F1 H H% u0 I先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。8 v+ T7 x* F7 a( w
& H; f( C. K( E- L: d* y+ R步骤 1. 新建一个 Python 文件' `% ~' P( j8 f0 p1 `
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)% K" h1 s" t; `+ D
把下面的代码复制进去。. S; }' b' D& V
保存成 baccarat_sim.py (注意后缀是 .py)。: P" J" \$ M0 ]
+ I6 l7 D$ J# U* S$ Iimport random( I. U9 M$ t& T7 w# I# U, J$ B8 t) w
import argparse( a# l. n" S* A. {
! o: A' o$ G; H0 x2 [, W# 初始化鞋子; V" v! j5 A: {( T- @1 u7 b1 ~7 N
def init_shoe(decks=8):. P; r0 V$ j! X; @" x% c
# 每副牌52张,8副共416张% Q. h; _6 C7 p% G4 @; K
shoe = []$ |6 e) a) B; ]* r4 U
for _ in range(decks):
% ^6 ~: Y+ L) H- R$ m& L! R* x7 [ shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
/ n3 \: o5 j8 U3 B, `1 P- Z% l( ` random.shuffle(shoe); A6 T# ~" d+ \8 \) W' w
return shoe
: L; g2 a# x3 N- Z, C0 V
3 u; x# p5 H* V# 发一手
4 c. t o7 S3 Ddef deal_hand(shoe):- c: F3 f4 O: [* V. n: I! F8 h
if len(shoe) < 6:
% }, l" W' |' b1 {$ y shoe[:] = init_shoe()9 @* C8 _5 y9 j( ~4 ?
return shoe.pop()
* y+ O4 [# \, z' p: K% C' M {3 v- f
# 模拟下注法 A
" o8 D: ]1 r5 @4 O3 vdef simulate_strategy_A(num_shoes=1000, commission_on=True):
0 t! j7 y3 r( I5 K- X+ S profit = 0
; d: `7 L( s: Y4 Z1 x0 W commission_paid = 0. r* q& H# L) b# B! X) D
shoe = init_shoe()
* q8 }0 n+ \$ D, v5 ~: S; w( h
/ Y1 G. |% q: P3 B0 K8 a8 i0 H" v # 策略参数
( Q2 U, ~. C1 U" i$ A9 n0 B& I: I sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
0 T% A5 c5 z- F/ K: M; O# l' r stage = 03 R3 Y. ?0 e& B! `& H. A: [
target_side = "B" # 起手投注庄* x7 H$ e% ~0 b8 R# c
/ p/ d& i+ s* G Y while num_shoes > 0:) l* ^4 J- F! y8 k
result = deal_hand(shoe)
4 L& k/ t1 |9 c! l# p
5 Y i* a+ T: ~4 v# l3 c, U; [ if result == 'T':
$ J, H" Z9 T0 H+ t; q+ h7 ? # 遇到和,不输不赢,重投
# {7 N# m$ h, m6 i, g continue
* ]/ x0 @4 I4 g. N5 Z
! ~. ]$ g/ ]# Y5 u; X4 | bet = sequence[stage]
7 q* |0 k% {3 T8 W7 p5 W
. Q( p' b9 y$ [; R" Z: b& p if result == target_side:( c& v5 K2 o* O6 y
# 赢' v' Q3 I N, J! t+ j, ^1 ]
win_amount = bet
# J6 D1 O- ^% I) G if target_side == "B" and commission_on:
- H& `% O7 F8 D0 ~' n win_amount *= 0.95 # 庄赢扣5%抽水' o4 {5 P. p& F% c" I# f) O# c
commission_paid += bet * 0.05. L1 Z" a( }3 ~% n0 k
profit += win_amount
' L5 v i+ s2 G E- c1 o$ O D stage = 0 # reset, R, P0 M+ q/ ]4 m5 q' D
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
" {+ x4 r9 B5 U3 h+ a# _9 N9 N else:
, C( O$ g- v4 D8 @ # 输
" v, e6 S5 T: I; H4 j; n profit -= bet
- u4 ?- Q* _/ O* G+ x% ~( k- W stage += 1
/ V B9 F% x% e/ C, k if stage >= len(sequence):
# q+ I1 a1 Z3 z) ?( g% x stage = 0 # 断缆reset$ _% k1 h d9 a% w% p9 _2 }
num_shoes -= 1; L4 ^& i/ e: Z) B1 E5 w
: c0 G# j7 w0 ]. a1 z
return profit, commission_paid/ S; t8 j U( y; d, o' A. i
5 ~% @" K( p0 d- i$ ^# 设置命令行解析/ X0 r$ P3 J0 N) E1 n9 Y: H5 p
def main():
k, j& x @; l$ e6 ~9 S parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
+ g3 i, I8 |" g+ X4 d parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")3 z. G1 S d2 W. N* G8 A& j
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")/ E/ D8 R4 }. @
7 |7 b3 v" ?6 k args = parser.parse_args() |$ P3 J) ? M+ a O2 o
4 n* B9 y1 y) n
# 抽水开关:开启或关闭9 h [& x0 @8 e: H1 l
commission_on = args.commission == 'on'
* K; L( q% S6 A! D J/ l: i ! J7 l4 S" f5 Q: r
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on) U. O$ v* O* [& I# t# Y
print(f"最终盈利: {result:.2f}")6 t( P+ [! ~% |& ?& C8 X9 X
print(f"累计抽水: {commission:.2f}")
$ x9 y9 Z) o3 u% `& E; K6 A* ?9 x" F) N" M4 e1 i# m
if __name__ == "__main__":
; z* G3 T; ~! @; X& @; t; D main()
( W9 W2 Y7 _: \, ?# Z' S
7 E# P8 f$ F+ Q- W3 u
5 ~4 ^& |1 r6 X) l# ]" K7 E- b% F步骤 2. 运行) j& |# y5 |& {: Q6 q
! p- ~$ u3 n* l: a: O! J- _) _" l在命令行里进入文件所在的文件夹,例如:6 B3 W2 ?) l/ v4 {
cd C:\Users\你的名字\Desktop
' Q3 e% ~/ e0 s7 ]( Epython baccarat_sim.py
( x9 L. Q u! T& i- J U* s) c; n. b0 l
输出会显示:: @; }! u2 _- ~1 @
9 C, P6 K% F1 a% e累计盈亏: xxx
( q: Y# b# E O/ |" W, y累计抽水: yyy7 {; R' n# \5 ~, h. Y' R1 _
-------------------------------------" N. m( r4 L* P0 `6 @: s/ b
实例:试跑3次,
4 m4 e& r# H. Y* {$ NC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
- P9 |9 q( n9 N! W X( s- o最终盈利: -5360.35
/ \' Q: C) E7 B/ _累计抽水: 5176.35 5 \$ Q/ S( F% ?3 j) z
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 1 e3 B" ^6 B: f# X& q4 ^
最终盈利: -5661.65 / A3 }: J( s- b. ~& O; |
累计抽水: 5174.65
# ?+ ?: M0 P8 P' j' |C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
. x3 T+ @. r3 O" E最终盈利: -4244.50 . `8 \2 t4 U8 d4 s+ Q
累计抽水: 5176.50: c( d4 a k# k0 I
0 k* m% A% k- w8 D2 i7 ?
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
% o. f; E+ O& ^' e% |* D0 j8 y+ D, S( q" _& [9 [
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
7 z" w1 @* ?( G n9 Z1 i: X
' g' U& s2 o. ?) o6 P最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
. f! B0 c5 T; o! i: j5 Z0 d( C这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
7 `; @1 [3 S+ m. Z! y1 ]# h1 f! G人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
7 T/ a! V6 v# I# e8 ]# Q但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
# I( T- l) P2 p' V# f# N* ]. b4 x g( v" D3 d
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|