|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 & N2 d& [" g# J! Y) u/ ^
, a( @+ }. Y2 ]. d( J
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
; H( V6 y( }* z8 i' jExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
5 k/ d! U$ `2 H% g \1 U3 `: [, {0 m( y
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)- b1 J4 \" ]: X" L5 _
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。6 \( E+ g O) W
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。 s& K* l/ W& Q# ~2 J1 O: F6 n: p
* U) w; V% _: y; N7 `' r: Q& e步骤 1. 新建一个 Python 文件+ ^+ { i2 N8 T1 Q9 z$ g1 q
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
. Z% O" }9 Y; R; ^把下面的代码复制进去。9 e" Z {) T+ x# Q% q2 O' |
保存成 baccarat_sim.py (注意后缀是 .py)。
. i7 m! o( {& n# @' e% c) t8 E s! f
import random& k% L# }- f* b/ r6 _
import argparse
T, D5 `$ U e$ k
" n J, h: y% m# 初始化鞋子 q7 b3 _% R2 x& G3 h% Y: m. \9 U
def init_shoe(decks=8):4 Z2 L8 J2 L+ ?) [$ p
# 每副牌52张,8副共416张
% T% ^* U. T; I. C2 g- k shoe = []2 ~. K7 `$ W' e
for _ in range(decks):, k, S3 l3 n/ A; s3 t' \3 Z" ?
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
0 V0 \$ m! v" d( R4 W random.shuffle(shoe)
6 g, c7 X7 |3 _1 V3 J" a: k- w return shoe9 L( I2 h0 V2 M& Q$ k
0 O E- D9 k7 h" |
# 发一手
/ w8 Z- t a! Z: @* [- S# B$ Edef deal_hand(shoe):
8 ~' a3 C5 a$ h; A if len(shoe) < 6:
+ v+ w! j- X5 }% d8 S0 g& p shoe[:] = init_shoe()
" O: D) j" m9 c+ [" b5 T' g8 N, b/ D return shoe.pop()
0 Z. D* \+ T, s5 R+ B3 |: q9 e2 _: N+ [" ]2 l4 h0 b6 v
# 模拟下注法 A) q* U* }0 r2 s
def simulate_strategy_A(num_shoes=1000, commission_on=True):0 j: T& t8 Q* o% B! O% D
profit = 0& @: V7 }5 F0 R/ |% G/ H3 Y
commission_paid = 0
' d3 F( r! x( L' u, U shoe = init_shoe()1 B4 s& `; N: \; o* @) _ b
& ], r' d d8 G' t
# 策略参数
! D p! V/ h! T7 f2 w1 I& _' g sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级 y9 Z$ [1 m5 Y
stage = 0
; W- Q0 }' W. W5 _- o- F9 a target_side = "B" # 起手投注庄' g- R. k1 O$ y2 |
. x6 t( ~! ]: \; z8 `4 p$ {% } while num_shoes > 0:
. D, t# V( S8 w/ ]# E! ]/ k6 ~ result = deal_hand(shoe)
0 s- { X/ E3 _# d% y4 @! x7 y
if result == 'T':
) |- N, w. S4 ? # 遇到和,不输不赢,重投1 ]" W8 k5 @: P) ?- R, n; }# I d
continue% a: a! k" R# B2 M) Q& _& X
, R( L L. R2 H' T8 ~8 R
bet = sequence[stage]
) g6 h* |, `- p. \: F, F! u
$ Q b3 g6 k1 ` D4 V* _ if result == target_side:
8 Q* X+ J7 R6 I5 N, B. ^3 `) y # 赢# o- y( k1 W( K H
win_amount = bet2 Q J4 y+ M/ Q9 y1 H8 b. s, x
if target_side == "B" and commission_on:
, y& g! `7 P2 C- _/ P E+ N0 Z5 G win_amount *= 0.95 # 庄赢扣5%抽水$ `5 W+ E+ a6 L o" I5 O5 B
commission_paid += bet * 0.05- E+ N5 w" ?7 _' T1 V% N
profit += win_amount- t7 S/ x8 i- s$ `( ~
stage = 0 # reset
$ n! ` @1 F a, h+ C7 o9 q4 X target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
6 U( ^9 b- a6 i8 M* \ else: B5 f" {1 l1 c# [
# 输
1 w! v5 C' s' x [3 U' P profit -= bet
6 k! G3 B& Z; K5 J* h ] stage += 1
$ ?* C) z6 {; m; {7 c if stage >= len(sequence):
( p: z/ a2 G% t+ O8 ?2 {" q" a stage = 0 # 断缆reset
- d8 _* n! Z" V1 R3 S2 ]9 G" t num_shoes -= 1
6 B l$ p1 W X( j4 L
3 O; k b* @3 Q1 _' D5 N return profit, commission_paid( D/ u$ w6 g& {6 P" U' R
2 p$ }0 q7 j; h$ o
# 设置命令行解析" _% K2 d7 B, [4 @% O2 T
def main():* h0 y4 ~" w# \3 R9 J
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")- o; z3 ~) g0 {- I6 K
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")# L- F- O) N0 L3 E
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
% o+ V* j4 M% S$ ]8 p J
' o$ Y* D5 |( l* |; W5 T args = parser.parse_args()% R" [- y5 o& z" {# D0 ?
6 U' R3 Q% x6 W p # 抽水开关:开启或关闭
1 K$ Y$ ?. ?, r5 j6 V# ^ commission_on = args.commission == 'on' G) `, q6 L0 y" Y. M% K
- q( @( H' H, b1 W _" I result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
8 h1 K" v' C* n2 n7 r print(f"最终盈利: {result:.2f}")
3 Q" n& I3 i `2 ` print(f"累计抽水: {commission:.2f}")
! E# N9 @1 [" k/ a3 r
/ i# f6 {3 I. l4 M3 s5 wif __name__ == "__main__":
, k+ p. p# g5 w+ ~' ~. f) C' h main()' r( Z, `( O" h( R
( s, j! Y& A# }% b, M- `
5 \; x. ^& F7 G0 r步骤 2. 运行- A; I6 k; H. H; |
- ^/ o. f- D6 h+ Z! l9 M
在命令行里进入文件所在的文件夹,例如:6 @- S( h9 w: l5 y7 m
cd C:\Users\你的名字\Desktop; e- s6 _; _. s! z
python baccarat_sim.py3 U8 {- ^6 S7 @
$ K. H. J9 @$ ^* z6 z/ N输出会显示:
q# t% J- y. A8 v+ z# d$ J1 ^& S. @/ U6 x' B R
累计盈亏: xxx& _* `2 i$ m9 X! n+ p
累计抽水: yyy
7 e8 _- I. Y; s0 U" Z8 Z9 Q: c-------------------------------------
$ k, g( W( I d$ u实例:试跑3次,
8 g0 G' B! Q' X1 H' wC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
2 n7 [; P9 j y n# ~最终盈利: -5360.35
& b6 ~5 h) z. K+ a累计抽水: 5176.35
4 S# _, G( m4 V" M0 t3 k, q3 CC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ' R* I; r5 K# e6 U- N) ?
最终盈利: -5661.65
) z$ P) Y/ }) S累计抽水: 5174.65
1 l0 D3 u$ s7 i& T- t" WC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
+ a l. d( }8 c& `: A最终盈利: -4244.50
: R m+ s+ \0 R a累计抽水: 5176.50
0 M5 Y$ U- o$ Z: i* u- V! q N; F/ b5 ^; ?# n" P
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
6 p, T, s& A% r1 l
/ C, P' B% ]" ? Q+ i5 E) ^累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。9 j. Q3 B* s2 I9 d# b( u
& l1 L) R+ {+ B7 t- `# a/ U7 i最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。0 P' r/ }7 M7 e; R% x6 m
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。$ b" K1 I4 N, ?3 ]
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
/ ^; x9 i S0 c但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
8 C. d# E. a" f; n: y1 d6 `* ?6 c: T* M6 w! i
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|