|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
2 Z0 V; L( W6 R2 _' f3 P# v
2 F1 m3 }( J, C' a2 ^可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
* E- q. j$ i5 h' i5 w) }Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
1 B& F) @5 `+ [0 h
* E4 k" u+ N+ |/ ~7 d+ A. [在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)# t: }5 n6 E; @/ k2 D( l* o4 Y6 {
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。: n! L6 y8 _. }) z
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
1 o% v4 ~4 o+ u; Z- z8 k
, m' {) x$ H( |) I$ o D& n步骤 1. 新建一个 Python 文件
^8 g" \! H# R打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
) H; J: @- B7 v/ Q2 C把下面的代码复制进去。5 G+ G% `/ c) h; t- k4 J
保存成 baccarat_sim.py (注意后缀是 .py)。
3 E! t0 E, f: f' b' J" k6 J6 P* J ?4 P: I. Z
import random) O" N, ]6 Z6 Z9 B; s
import argparse* @! K) m- t7 V* S6 J7 Y
2 d0 E- F' C; t5 ~5 h2 D# 初始化鞋子9 I$ A2 I% o' B2 L6 O) [
def init_shoe(decks=8):
' r0 }- q9 Q& O( h0 ] D4 _1 U # 每副牌52张,8副共416张
* k- |$ h+ j0 V) m/ \ shoe = []- d/ N# W1 M8 T- \
for _ in range(decks):
" g* h: `. H4 O% P/ K shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和46 M) G5 D. d* Z
random.shuffle(shoe)
7 ?, D9 W8 M/ I2 Z2 v return shoe5 Z8 _& T5 g7 P
w$ Y r6 A6 F4 n+ p# 发一手
- R8 _6 y c; N. {, Vdef deal_hand(shoe):
: J1 z. d. j) V5 Z) s if len(shoe) < 6:
5 l- ?6 i8 a" b" u2 } shoe[:] = init_shoe()8 i: Z- o+ U% Y; ` U% [
return shoe.pop()
4 `$ Z5 i: ]+ A3 c3 _" B# |( D7 V: e, F. P1 I
# 模拟下注法 A
! D$ H9 [7 x9 J1 ]def simulate_strategy_A(num_shoes=1000, commission_on=True):
7 S" U+ [0 Q6 X. ? profit = 0
% H1 K' F2 w. b5 a2 G- m( y commission_paid = 0$ C4 g1 i. `# N# \- @* q) |
shoe = init_shoe()
( p3 ], o! k) R( k! X' i 8 P5 b0 m1 l/ |+ r8 c: ]
# 策略参数
* `8 ~& O5 ?. }# y sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级) r+ p- G6 |! L E b. Y
stage = 0
7 d1 S* c, L! b2 Y" ^ target_side = "B" # 起手投注庄5 A4 w' r& B: E0 @
x0 i/ ^" \. d& O% C while num_shoes > 0:! Z1 t7 d1 Q; |- D9 v
result = deal_hand(shoe)
Y# m5 h5 L2 P4 r1 ^% E/ k# `% P
* I5 ?, U& x! F& {) j3 @ if result == 'T':
) J1 q7 `; Z# e. s3 S # 遇到和,不输不赢,重投
+ U0 @' l3 |$ `8 }- ` continue
5 W) y5 d7 U' A* M5 G
* |4 u* u" }; B* A& _# u9 M bet = sequence[stage]
7 y/ A- c; l" Z1 g 1 N* Z+ n( }/ e5 z' H
if result == target_side:
# q+ M& H# B( @; I' D # 赢
9 c- H0 u8 `9 T# J win_amount = bet" R. q4 @( g- f: z* C# w, t* i
if target_side == "B" and commission_on:
8 r0 P3 j; h0 K8 q5 e win_amount *= 0.95 # 庄赢扣5%抽水9 }1 t! Z. X/ Y: h1 _8 Q5 ?$ R7 V
commission_paid += bet * 0.05
; N# t1 R% U/ t9 H. c* { profit += win_amount2 _- y, ]3 G, |0 l' c& w
stage = 0 # reset( r H$ s5 P# H) | j
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)7 b( B0 u8 e3 i! z# \' q! W
else:
0 m$ {6 O" v* W# X* I% L # 输
. c2 U) M1 |6 \( U- A* A4 M( Z profit -= bet
9 D! o: q5 {7 q' \( D: l stage += 1, l8 v) h8 h* Q, ?$ ]
if stage >= len(sequence):
3 Z; ^7 ^5 {8 ~- Z stage = 0 # 断缆reset/ P3 r4 |, q4 y5 M0 [& o i' C
num_shoes -= 1
* [7 b0 \3 x, ^" m8 `- R* S5 `# c* l1 P. }& e' m! H
return profit, commission_paid$ B5 }: E% M; O) a R
: x% I0 Q) e: a, p
# 设置命令行解析) d# l/ L0 ?0 j; _5 q# H
def main():2 m0 q% k( o& S! J8 p- n
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
4 {7 P$ }/ D$ @, \+ S5 q parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
2 C3 t( C. J: x# S W1 d parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")& @8 l/ s( D5 k' S: _# y4 o& l
% K% J( c5 n4 G/ f, `4 I& X* ]
args = parser.parse_args()
% S$ n U) Y; k/ u" D Y0 r: |& b( c9 a; H
# 抽水开关:开启或关闭$ j6 \4 s* ?3 {7 z: t7 ?9 Y
commission_on = args.commission == 'on'$ u+ L( m T* U8 d5 u
6 R1 e& w2 z+ {5 _% e0 s2 C6 y
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)5 L& y, `8 \" A' |6 y
print(f"最终盈利: {result:.2f}"). N m0 L, Y1 f% A
print(f"累计抽水: {commission:.2f}")
: G. M" M8 m+ C# W/ F
* L9 `& J8 q. T9 L/ W% u- zif __name__ == "__main__":) m# k' W$ c. X
main(), V" n8 ~1 l& K$ [
9 G$ H# r" {* }9 W
8 S7 L1 u5 U+ E( M步骤 2. 运行) u. v3 P+ K9 n# L" O% ?
$ [- Z( s, G' L3 c. D3 `8 O在命令行里进入文件所在的文件夹,例如:3 G: ?9 H/ H* p* ~5 i
cd C:\Users\你的名字\Desktop/ ~% e# f/ F) z# j7 t; K% H6 F
python baccarat_sim.py
" c a0 K, y# x, Y* L
/ O) i$ ^& K4 K( B1 v; k- ?输出会显示:1 B; p# s( }- p( \+ }
) l9 F9 W2 J3 C+ n; |累计盈亏: xxx
5 l2 j3 L" S" u1 V- [2 a( @累计抽水: yyy/ p/ i" M: _2 a$ N- r( ~" e
-------------------------------------: E5 S- G" q4 A- z( h7 P
实例:试跑3次,
8 f. o T# a! G) WC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ' i0 `. U' v. Z4 I5 f
最终盈利: -5360.35 4 d f6 m4 h' n8 Q4 M7 f& ]# k' X
累计抽水: 5176.35 4 D' L% j3 k) g
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
* y/ j; k7 L* u: v X最终盈利: -5661.65
& H- q. D4 R" C+ c6 \/ i5 n累计抽水: 5174.65
1 F, {* S) W6 W# H! Y9 n3 YC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
a, i6 X, R1 [1 b( Y( i1 u1 J" o9 z最终盈利: -4244.50 , d$ S# J- p# T$ _; T
累计抽水: 5176.50* _3 z: y6 B$ y8 A6 [# X
* Z- {" {6 i2 y; p, S9 R8 l
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:# N# v6 T7 q$ ~6 Q, k+ b% R
: j! p$ q. O% r F/ H' ^
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。# G' X; u2 D7 `5 I7 D. c
, ?+ ^4 x+ k0 B. O q8 v
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
. |9 G+ n& l5 U% M* }3 _这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
) k) ~5 _" i) T H; p9 L8 L+ G# ?人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。, H: |; g8 _. \. M
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
2 A% D X' B: |9 b! t7 f, k4 i) z9 V2 J7 K j5 m7 Q/ m
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|