|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 S1 N$ b' O8 a2 B% N' m
0 ?6 u" I: c1 M! c; n( A
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。" y7 ^& l- ]$ Z8 _
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
( G% Y: n! x4 W4 t3 Z: A2 Y4 i$ j: a X; L4 M- g4 ?9 t7 ]
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)* ~0 i5 @; s! d9 \% {" Z" E
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
& L1 r5 |$ }& }4 g6 A' u7 O先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。; j) y+ V' U$ H+ A$ {
) t/ R5 H% I3 T N3 w$ _% @步骤 1. 新建一个 Python 文件
6 b7 | }" P" u6 T* w2 N打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
2 J, n3 P. e: c7 D$ P1 `3 B0 Z; M把下面的代码复制进去。. }# v" K' i$ y' ~/ V
保存成 baccarat_sim.py (注意后缀是 .py)。( N9 U6 e+ x% o4 L/ J& v3 P# q& R% M
3 q% l+ I Z( @: c1 `# F4 \
import random
8 G; D4 m6 E7 Oimport argparse% v; X, P* V' f( I ~
1 s* C- V, o3 Z/ _
# 初始化鞋子
, z- Y9 _& p2 q0 b; F: P0 o% i; l: \def init_shoe(decks=8):
; W1 U5 M) C' x7 j- e # 每副牌52张,8副共416张% n+ u( n2 R9 C- Z! s! v
shoe = []7 j1 `% `& y2 v) w+ I
for _ in range(decks):
U* ]! l9 e3 E/ ] shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
7 I3 n- v+ a \" a- { random.shuffle(shoe)& a' Y* T. c: L; [& B
return shoe' ?" n" L0 ~4 [4 S! S
! y: v- A' R+ U/ d3 s4 n8 {1 k# 发一手: x' p# h' ], t; _
def deal_hand(shoe):; X- Q* m" f& Q
if len(shoe) < 6:
7 }; L& O6 P* g; G shoe[:] = init_shoe()
A: K& |; v& s( ~. G' k2 A6 c return shoe.pop()
2 x& }- s+ E2 k8 m3 F* l Y8 v; H( S" R
# 模拟下注法 A
7 S! T+ o% q6 Mdef simulate_strategy_A(num_shoes=1000, commission_on=True):7 s+ b6 b1 {( i1 H# Q P
profit = 0
. @$ A3 m5 v: L) U commission_paid = 0
0 x0 e |( e/ b. V shoe = init_shoe()9 ~/ J. Q6 T" U5 ^& o Q+ f
' M+ g# F5 @& C; X, v7 c) I0 I- w # 策略参数; ]4 [& O* w6 u9 s v4 y: R6 Y
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级3 m9 L9 H: w# i- k- @2 V
stage = 0
9 c* g& y0 ~0 S: X& |) w target_side = "B" # 起手投注庄
! Y+ L! ], {8 w* R+ }1 c6 u4 h5 g I- g- Z# o/ h: c' A& E% k
while num_shoes > 0:
) Z! K2 b- z5 i% X- a) { result = deal_hand(shoe)) Z8 j& G( Z6 U0 t; P# j
) y9 r0 _' V4 D U if result == 'T':
, m% [7 w% r. Z. \ # 遇到和,不输不赢,重投
V- s- o, ]+ R3 A1 [2 Y continue
% F( I. E& C* Y. _6 J5 W
' Q* B0 f6 t! O, f! {1 Y2 i0 H bet = sequence[stage]
6 @! \2 W) J* t4 Y8 t! G
. r8 f$ m- _' K; F if result == target_side:9 G" l3 a% u2 Y' W3 l2 n: a
# 赢 q, _- U6 `* d' d1 H/ T
win_amount = bet8 s8 C, l. X9 h; Q i3 z
if target_side == "B" and commission_on:
8 t5 \0 t7 y% l# y6 x# Z9 r win_amount *= 0.95 # 庄赢扣5%抽水
2 I2 C F1 V8 v, l commission_paid += bet * 0.05! E( R6 B) S: O* ?
profit += win_amount
, v7 b- p; o h) d9 q4 r2 | stage = 0 # reset2 g$ o( b+ H5 z
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)1 g ^" Q- J9 ^. D) z
else:
3 n' G p: G2 ?" p # 输
7 J0 v: {0 F @* w+ i profit -= bet
8 k |2 c) y5 Y( a" z stage += 1
$ P. q [6 @ G( L7 q9 S if stage >= len(sequence):
% y- M: |# K: X8 z( A stage = 0 # 断缆reset8 G& V8 D- n# |! S0 g/ d$ F" C
num_shoes -= 1( a3 ^! D" D: Y3 c
: f+ j1 w2 v7 ^/ C& D
return profit, commission_paid' C, N* ?( W9 y2 l
_% g6 K$ T. W; ^
# 设置命令行解析
: |0 B: d# }: z( K* L9 wdef main():8 J+ D J2 t& M& w, R4 [# H
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
1 |" K5 ^$ k( R0 W5 x parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")$ Q' B- R& t j( A- Z+ a
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
6 Q+ b5 M) B. X2 F2 r ! Q# F9 ]; y; t$ }! J# H
args = parser.parse_args()' R5 u- p; G% j, ]$ Q
4 B$ J) K+ e& R3 K% m # 抽水开关:开启或关闭
% a( X8 I( y- t- n; t3 n commission_on = args.commission == 'on'. D" J$ ]& f. W
+ Z; F0 \/ ~3 D; ?3 `' [
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)3 A, e# D k. {; T* }
print(f"最终盈利: {result:.2f}")) N& s* z+ x. V/ \
print(f"累计抽水: {commission:.2f}")
( A& p+ X0 m) |$ G- S, J8 u2 R9 R9 \. _" ~' Q, W" N
if __name__ == "__main__":
3 a% }% _7 R7 [ main()6 v4 V" t; k; l8 a+ c
3 S% \; _; |) S/ s
% R% Z$ J7 H9 Z" m步骤 2. 运行* d5 P* t5 s X6 _& Q
6 G+ @ h. t. t, q" D6 ^- Q/ [- \4 P
在命令行里进入文件所在的文件夹,例如:. L7 W+ l9 K- q5 W# I! c1 d
cd C:\Users\你的名字\Desktop% ?: M. V* V6 |; d: y5 c+ a1 y! A1 p
python baccarat_sim.py
" V7 s& o! w) ?1 y' ?6 ~) L+ S& w6 Z6 j: @. O
输出会显示:
- _/ ^8 x, x2 @/ X+ z* P5 `* Z& r3 @2 N" ~3 a
累计盈亏: xxx
- m. v. R& I# f& ~7 f累计抽水: yyy
. p2 L4 g: {1 n w Z-------------------------------------/ ~7 J. |. `3 t* {2 e. T# p
实例:试跑3次,
( e$ \" q8 d' s# ~$ B0 gC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
7 E3 ^$ r/ L: h最终盈利: -5360.35 7 Z% a* b5 A. n
累计抽水: 5176.35 5 `' [: M. r) u3 Q, W' Y7 w3 L/ E
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
* h6 X$ y2 [5 @最终盈利: -5661.65 ( ^* L( X$ G. A' T7 m
累计抽水: 5174.65 , ~4 i. u- k, j0 n$ B+ R2 x: A
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 8 G, {/ B( q$ f4 A7 M' f
最终盈利: -4244.50
2 |) K" L! m9 b" p累计抽水: 5176.50
' [3 E) R/ y: d5 S0 x( f
$ H, R# p. r2 T5 \' g说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
$ Z/ A1 c( t4 ~7 f! i, N/ ^: \1 q
7 v7 m0 B8 _) \! T( ?. A3 x- Z累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。5 @' D% h8 t5 H+ ]0 d
* A" U% }6 y! j& P. C y
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。$ e2 n5 o/ @" z: T3 O4 {6 Y
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
. [* K" x" J2 B0 U' i" i8 Z7 _$ Y人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。; e# n' u; q- O- s& j
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
5 f5 }/ {* e& ]9 A7 m# Y" t4 V! {% n% g0 z& e q
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|