|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
. E c0 `0 M# ]1 @. l& k% `# G3 |+ q8 w1 [3 s
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。) O! ` B7 l3 Y& M
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
: o7 D# L' ^( @( Q/ }
$ i8 b; S: R$ \6 J( A在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)( ~4 E; r* k9 ?3 g
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。7 V4 f% W) j V
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
6 T# ~& Y/ `! b5 p2 D+ m' r: o6 X* t$ k7 u
步骤 1. 新建一个 Python 文件' }7 s8 T, k6 f( J6 I
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
& I" H9 @7 U- [8 R把下面的代码复制进去。8 ]' A9 ^. e4 n2 w
保存成 baccarat_sim.py (注意后缀是 .py)。* x0 c8 z- z$ s! D* Z( ^, V$ V- t
5 @; t) I* l) V! K+ u0 q1 y' t
import random
$ l( }, Y' U. e; Z" b+ Limport argparse5 [( j6 u6 d7 _. L0 R
' [1 m4 }- H! g
# 初始化鞋子, Y% K2 G4 i# z' x, G. V4 f
def init_shoe(decks=8):
+ [! P& M* ^! \' |7 l. T8 S # 每副牌52张,8副共416张
3 O2 n6 c) h4 n+ o1 [4 Y' C shoe = []3 S' A2 [8 W+ J- z) E
for _ in range(decks):" S7 J( @2 M( ] r4 B+ m' J `
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
- e, U' e% H2 H. b* ^ k random.shuffle(shoe)
i9 o6 Z) q+ j2 V return shoe6 I1 f& h9 D& b. A& f( `% y: N* [
: g0 n. x+ c4 n0 \) Q
# 发一手, t- Z" `# {. }5 k# M. z- \' b
def deal_hand(shoe):( V6 e( a7 h) G# L, b% _
if len(shoe) < 6:9 U: ~, s- P1 x6 |9 J$ i r+ F
shoe[:] = init_shoe()
: ^ ]) ^0 I- r6 Z) d return shoe.pop()3 d5 S, A! }8 U8 I6 Z6 z h
$ j: D% ]7 }0 f( L3 o# 模拟下注法 A
$ d( I# K+ O8 V) _# Wdef simulate_strategy_A(num_shoes=1000, commission_on=True):' U+ C( u' D0 x6 U$ w, x
profit = 0% Q$ a3 T! m0 }+ w5 [8 {9 Z
commission_paid = 0 u0 Z+ m) L; a9 j4 O3 }- ]
shoe = init_shoe()4 U* H9 L5 E) w" ], P
: \. }8 @3 |$ y1 J1 j1 b; k # 策略参数
! f0 x- S( f3 h6 V sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
: R# l* \7 v- D% S* E- U stage = 0
g8 d- C) j Z$ G target_side = "B" # 起手投注庄
5 Q! H0 X3 z$ E( W. H/ i6 e9 U9 ?' P5 H
2 u0 l$ P m. w. k; r0 ~ while num_shoes > 0:9 V/ v7 @" w" @8 E9 a
result = deal_hand(shoe)* p* e( f" @ L4 P( ~# g/ C/ q2 ^$ ~
/ G! J8 F! K* ~* m if result == 'T':
0 R- v4 T8 x8 ?8 T6 b9 l' M # 遇到和,不输不赢,重投6 {. D8 e% k% O- g
continue; ?/ A9 T' T3 d" q: X
s* S+ l' m% X. I1 v bet = sequence[stage]3 n+ w2 Q' z O; C) H
" \4 }* l& `- a7 V5 Y0 {9 D
if result == target_side:& m# n" C5 ?6 o3 F1 u) C8 \
# 赢
# Y9 t, l' _" T9 E) ]" Y win_amount = bet
. {* g& C! n0 a/ A; u0 s if target_side == "B" and commission_on:
7 H, r1 ^4 H) x8 L8 J4 t4 f win_amount *= 0.95 # 庄赢扣5%抽水* y# a5 o9 e7 s7 e7 }; b
commission_paid += bet * 0.050 y g( q( d8 C$ E& Z
profit += win_amount
- J; m1 x6 P# @% J J' V( A& X6 | stage = 0 # reset
6 @# X4 f8 J) ]; W target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
; [( X' l4 j5 @7 L$ t/ R, ~, H else:
" {* ]* n; g& C" w" Z( ~8 r # 输
3 O- Z' G% V& A+ |8 m profit -= bet/ x& \, S; Q. W/ ^& x) R, v
stage += 1
+ y4 j9 f) }# r4 p if stage >= len(sequence):+ k. L$ }# k9 Y) y9 o! ^/ P& k
stage = 0 # 断缆reset
! b5 q$ k# x {7 \& H" B/ { num_shoes -= 1- p# @+ g+ \' s% G3 L" h
/ P8 ^3 E2 U) C
return profit, commission_paid K0 U4 T$ T( K) \1 h* Z
9 {0 w+ a% ~8 A7 l! I h w# 设置命令行解析3 _! W2 X8 T" N+ S0 C4 v0 ^8 m
def main():
0 z9 C% z1 N9 }7 E6 e parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")3 @7 q2 C' y, d v$ Q O) z
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
# c. H# H- W% W parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
6 P' k% ~* q- B Y5 b! P
& K* D' X! a r% ^& b( |! n args = parser.parse_args()
' k" O& G, Y% i* e7 }0 V( h5 }
! o* }, j9 n( J* p B # 抽水开关:开启或关闭: s: C* ^1 \- o+ @& [* Q5 j
commission_on = args.commission == 'on'
$ G2 ^6 j/ X' ?, b
7 ]# m# ]3 a+ x# V! v result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)! q& m4 h& G3 [7 |7 m
print(f"最终盈利: {result:.2f}")4 u! l' s0 R" d+ U: d6 A1 H; P
print(f"累计抽水: {commission:.2f}")8 c! F! \: b' O: M
) l# y h2 b+ O: Cif __name__ == "__main__":
5 Y% W6 o# s' n main()
: ?: @/ S* Y) o* u- t# J- S' {/ }3 D, l: J5 V
+ ~! J+ L; M2 b1 R步骤 2. 运行4 ~5 v- v0 O+ [3 e$ D6 f
/ y% z8 ~: Q5 W% k9 |8 R, p$ Q6 i0 x在命令行里进入文件所在的文件夹,例如:
( |1 L9 P8 E% H2 K" N% ncd C:\Users\你的名字\Desktop
( X( I* Z5 |2 u1 O0 v% Epython baccarat_sim.py3 X6 X4 j2 S3 j) S; ~
& N, f( F: ?8 u. A+ U输出会显示:
; w4 E: H+ b0 Y. r! h' O: Q2 o4 B3 e! Y* A4 {6 h5 d/ W1 G- K* H
累计盈亏: xxx( n) J0 b& Z* C
累计抽水: yyy
U& U$ W: g0 @-------------------------------------
. |9 w' K" J# W% R! O) f实例:试跑3次, " Z7 e# I$ `; x. L. k# T! K
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
3 {1 y, P# ^! S1 v最终盈利: -5360.35 % i) z/ i0 I- l6 n' C
累计抽水: 5176.35
@$ `7 ^$ e/ T7 z* R& y7 s+ }% ~. OC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
, |6 N! |0 u2 w9 T" k$ e最终盈利: -5661.65 5 W& @: F( K: f( I. Z
累计抽水: 5174.65 $ a" T u7 X9 }% R
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 8 M0 W+ k! b4 K; U
最终盈利: -4244.50 : L# s: x o+ x. a, g7 p
累计抽水: 5176.50/ v1 M* |. E8 l* s0 y3 O
; S( \! A0 i& [0 f6 j- E$ f; L: U2 F说明你的 Python 已经能正常跑模拟了。结果也很有参考性:+ q \% k* ~7 r4 t5 e
& d3 z. Q5 `2 `% s( ?0 m$ m
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。4 ?6 A4 O Z: R0 U6 D
~- c; B* b& W6 C/ C最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。0 x! z5 Y- s5 ~/ w% [/ \- d
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。/ g" X l( D& P f& p( y
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
4 x( a/ H) h3 F1 B$ L但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。, Y/ ^0 Y2 f. ?1 S% P7 u2 s+ ~
, O1 u+ T0 L* e启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|