|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
. a' L6 u3 ?0 M3 L
" d3 \9 E- t" k C, W: N& k7 s; g& g可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
. D1 Q7 o9 X7 f0 B7 j2 aExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。. [$ O7 ? A' l" ^4 T" g) [2 l
( M" q' ~# ^6 ~0 r1 i5 |$ {在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
7 C5 _; I% M' \$ n假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。+ u* L& S8 D4 s
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
" ?: f) V/ D( f6 S
1 O% ~, ~" E# B步骤 1. 新建一个 Python 文件
$ f( h/ |, Y) e& _打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
) {1 \ U1 }# v; F把下面的代码复制进去。
( y6 ~# R6 P- { Z( p- }' Y保存成 baccarat_sim.py (注意后缀是 .py)。7 q$ c5 m/ _3 P9 Z* @
3 w- \5 _" r8 _! F, b, R
import random
& }: F; V$ y$ Aimport argparse3 y Y6 o! o8 E M
* [6 `1 a1 c# e6 U( u j* @0 f9 z
# 初始化鞋子
& S# W% i* ~: p* k7 M+ _def init_shoe(decks=8):
k9 h |- U, d J# S # 每副牌52张,8副共416张3 l8 U' \- u9 y4 H, {2 R
shoe = []- k; j7 W' @$ j8 m' r7 X( {
for _ in range(decks):
% E3 h4 T7 T: `3 H0 O, R/ w+ b# J shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4: g' F" `" D- d9 N' o. K# Z
random.shuffle(shoe)
6 A- k3 A' I4 D2 G) D return shoe
- m$ J8 c6 @- S* b. ~2 o: D H5 }8 Z4 n, F; Q5 u" {
# 发一手2 {3 K: b/ m4 P3 l/ \6 G% u
def deal_hand(shoe):
' E' \/ a5 m1 N" g* W( e if len(shoe) < 6:( N+ ~$ {! ]' O9 l
shoe[:] = init_shoe()9 u- P2 K: e* F- H9 }( _2 @
return shoe.pop()8 o) P: |# v2 y
7 [# U4 ~/ \) G& J+ c; z4 W& r# 模拟下注法 A
6 N8 G1 n3 X7 T% Udef simulate_strategy_A(num_shoes=1000, commission_on=True):
8 B! [" R+ x4 q ^ profit = 0
3 t2 \, q( J' R* s6 ] commission_paid = 0
/ Q, V6 Z% \$ T' V( E T J( e; \ shoe = init_shoe()
$ u! X4 p+ V7 I" x l- d8 h
0 n1 Q0 T7 k8 ^: T7 | O( d- p # 策略参数
) L2 ~9 `/ a. O5 _ K# S: x sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
& W+ o- `) a: ] stage = 00 i7 D0 |) Z7 D; Z" g/ ~# K) C
target_side = "B" # 起手投注庄 a8 C8 S; E: y
8 I9 ]2 h' j1 C. t$ ]. M while num_shoes > 0:
# v* l; ]( X+ _3 c. B+ H1 _- N8 P result = deal_hand(shoe)6 |7 w5 g$ }" o6 h: y! R
3 H3 N. W4 G5 M, ~2 ?) {
if result == 'T': ' w0 @" @! l2 G' w. Q6 v. Z) J
# 遇到和,不输不赢,重投
9 m( H) g' Q# d% p continue9 i6 ~1 x8 Q! ^) [& `* O; ]0 ?0 e
" F4 ^, x7 E7 |- ~/ m
bet = sequence[stage]; @% v! i8 c( O$ G; B9 o
: j7 q/ X* K0 B if result == target_side:
; l7 D, K' G* p+ R; j/ @ # 赢
5 U2 o1 L+ `9 J% V$ o' e0 y win_amount = bet
! }- H' o9 y2 g5 r: h if target_side == "B" and commission_on:& S7 ~! k% Z! s; T
win_amount *= 0.95 # 庄赢扣5%抽水- A' n! z+ y+ t, ^. P5 j; u
commission_paid += bet * 0.057 k6 V( H: ]3 g) m1 g, {( I; `9 J) z
profit += win_amount& a0 b4 S% o* a! N
stage = 0 # reset
- m" w6 H$ d3 |' I7 t$ O target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)2 A( O0 Z5 m* b3 W
else:
8 e0 _8 Q( K- @# D1 q # 输
$ x( p5 Q5 p3 E3 L5 d! i8 @ profit -= bet
; I7 X. I# H0 o1 j* V stage += 1
+ @/ }7 E% }' K5 P. ?( V if stage >= len(sequence):
. U4 X* c" c! f! W) ^' _4 I stage = 0 # 断缆reset
1 c3 C$ A n' j4 I9 x3 k num_shoes -= 1- F ~% D4 Z8 V2 w2 A& X* {/ U
% q7 w' X; {. J" t: t; \ return profit, commission_paid
; E2 t* i/ V7 Q" c$ x5 l6 G$ _0 f; T& D3 P
# 设置命令行解析
; c; D( v6 Q8 b; m' M, m6 \" bdef main():- J0 _6 s, Z5 x! c9 m, N. t1 F
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")# a& e) r8 j6 q( Z0 K. F5 }2 K
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
5 Y# H0 Q3 _6 x! M+ G parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
9 O4 R6 @* L# Q
# c2 i5 @! p% ]( d args = parser.parse_args()
! x5 S1 D2 `) I3 O$ N8 Q* J
% _- J+ `1 A2 z0 M6 O& f # 抽水开关:开启或关闭
. x1 C( N: g, a3 G commission_on = args.commission == 'on'
3 p) G& i4 H/ u9 t- _1 C6 D( d
, |7 \; x8 `/ b, z# |- p: _7 @/ H result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)3 Z# I$ U6 `' [! A
print(f"最终盈利: {result:.2f}")! h; I n/ M3 E3 A8 N( V
print(f"累计抽水: {commission:.2f}")
) h8 Y4 e/ {5 S0 B& c" Y
) l( u) t5 {) @" Wif __name__ == "__main__":
5 s# W( C, U. G) H8 {% J& e main()
7 U$ V8 v/ `$ P7 x+ ?3 D
0 X- T5 s# c- f* `8 [
# F3 _2 k& K' i7 d6 e步骤 2. 运行8 t% j7 I2 R' |# _
* W' h2 a5 ^. b3 L0 \7 Y在命令行里进入文件所在的文件夹,例如:9 G% {+ R, X5 _: E1 U. w
cd C:\Users\你的名字\Desktop
/ g; O9 N1 w0 S" ^# p# f1 rpython baccarat_sim.py7 r1 G6 y, G4 K: O. o6 b
8 s7 n5 p6 ?, H* n输出会显示:
4 y5 Z) D6 g7 ~( ]( J! K' H7 H& w" y7 a
累计盈亏: xxx
" d- p8 l2 y+ D: D- |* H5 X4 M( V累计抽水: yyy& ], @; G3 S8 w4 R. ]
-------------------------------------; I3 U" E' _* z: q0 _+ _
实例:试跑3次,
2 S( ]8 c, [+ N4 VC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
3 J P( I' y3 L# w* W6 z8 n' N0 o最终盈利: -5360.35
0 ~ F6 o7 k. |% c4 \累计抽水: 5176.35
( I* Q+ f, u9 x8 Z, xC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 9 V- y' o: A$ H3 a3 m' v# C5 ]9 n
最终盈利: -5661.65
4 q5 W& @) T& A# A* f4 |累计抽水: 5174.65 . Z) G! s! c/ X- S
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ' u; f0 p; E" Z) o! N% g% n! u
最终盈利: -4244.50
" q( v: N2 C1 K0 ~; f/ J累计抽水: 5176.50
- J3 q: J8 Z: D) d$ c1 ~) e1 x3 N6 p- U+ B9 |- U& B# Z7 u# S
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
& @% F. e3 V. G% Y6 y$ ~0 P8 l
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。+ ]/ A9 _$ J+ \4 X1 Z) A: M
; A% H* v+ C9 U* W
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
: i H2 h/ Y9 T5 P, X2 ]这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
. \7 w6 f1 B: s$ t$ o- l! A6 W: U人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
, ?$ K* Y5 E. `但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。8 J$ n7 C7 g% m! U6 l" M4 b# o
$ H8 @% a+ A/ Z- b+ X0 @4 V+ D2 g4 V
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|