|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
$ g7 }) G& }" W4 N/ m( x
+ c' u; _/ Z2 c可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。8 w" {0 t4 t" O+ R* m5 j
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。0 C' b/ H( K' _; I" e% E4 e9 L
# z! ? ^- ^* U$ Y
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
5 ~% |' W/ s8 h3 ?3 C假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
9 o( J! C' s( y# i0 v: z9 d e9 x先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。3 T. ~2 P& p' \$ L
; n9 `) t4 d4 c! |3 ]) Q4 A步骤 1. 新建一个 Python 文件) \% R2 o) g( N3 D
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
/ K$ O1 P5 ~0 j: `' S, k7 o' u+ F把下面的代码复制进去。
/ S' A" R# V; q保存成 baccarat_sim.py (注意后缀是 .py)。
/ p1 @" k' a7 t5 s& H1 A- r3 m6 m
import random$ w% S2 V/ h1 G3 T
import argparse
9 Z) z+ f5 n* Y0 h7 F5 m8 s) }6 N' x# w6 J* _/ k" z& |
# 初始化鞋子
" _; i k+ _6 W5 Rdef init_shoe(decks=8):
/ A2 Z& \. y7 u9 w # 每副牌52张,8副共416张2 |2 ^" W) ^& y
shoe = []
/ L E0 H* C4 s7 `2 q, M for _ in range(decks):. `# I2 U" J# ^9 q" S
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4 d6 ?# S4 Q1 Y# F
random.shuffle(shoe)
3 q, Z( v! }/ y* _4 | return shoe% O9 I' M( K( F8 k+ B
# m! k( h2 Q3 m) A( ]* ^
# 发一手$ Q/ ^2 M! T! C
def deal_hand(shoe):' g5 A$ e3 m! h
if len(shoe) < 6:7 A9 @) e1 k6 Z c, p
shoe[:] = init_shoe()
2 n G: `3 i, b0 p return shoe.pop()
; X" m; N$ Z& s& ]* g
, i9 U6 T0 g2 p7 C! T, b# 模拟下注法 A& V9 o* _, f: d9 q) @# j
def simulate_strategy_A(num_shoes=1000, commission_on=True):
) m9 E/ ?5 O, m: i profit = 06 C* w$ f2 s* P6 {; [* Z0 }3 |
commission_paid = 0* c2 ?# i [1 y$ L
shoe = init_shoe()' r7 n+ z: L- q/ ?, H" J
6 D8 V3 g' ]5 L0 A$ P
# 策略参数
- m7 q8 E; J/ M. c! h- N( r; a sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
9 \6 A- C4 i# N2 V5 z: ^ stage = 0
$ F' r% Z: x: A" I) } target_side = "B" # 起手投注庄
1 L' @) B/ y' D1 A
8 F7 \& L" ?' K while num_shoes > 0:1 V/ @8 U& l* ]8 i3 |! s# p2 t
result = deal_hand(shoe), x- E+ d6 p) t" j" Q
* {4 T. u* P/ h9 E( b$ A. N5 `' N5 Q
if result == 'T':
, j ]3 L3 V7 r" M! K% m" c # 遇到和,不输不赢,重投
& C* c# p# B) M continue; g5 H* ^3 {3 Z( S7 `/ g) [ ^
: o4 z1 H$ U7 ~. J1 N/ Z bet = sequence[stage]
+ x$ h" L" W" e+ y+ w1 q0 a
, R7 v0 j9 }5 C if result == target_side:
0 x4 H' ~( W% V7 D$ Q # 赢) `: S7 B7 k/ {- M7 y( `
win_amount = bet0 a3 O; `- O1 V; H- d
if target_side == "B" and commission_on:
4 g8 P3 D- f9 d3 b. g win_amount *= 0.95 # 庄赢扣5%抽水
1 G' Y2 O3 U E+ y3 M commission_paid += bet * 0.05
7 o# M* M2 U" ~0 S' U profit += win_amount5 r3 z6 V( ^! @# \+ w
stage = 0 # reset
7 t2 f- i: e) R$ ? target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
5 M5 X# K: J) [3 w Q else:
! F8 i2 x) K$ M, U* e/ ^( S5 F # 输; ~- _) |5 K: {' r8 C/ O% p
profit -= bet
" p6 Y# T6 ]6 h6 C- ~4 q stage += 17 w. @# W7 s3 S8 U9 u7 E6 ]
if stage >= len(sequence):
6 G7 C/ e& A4 o% N, o6 P stage = 0 # 断缆reset
7 P7 Z- D5 i# ^2 U3 y8 v num_shoes -= 1! v- q1 j8 b! a
0 x/ B) w+ X4 Y8 J7 z4 l8 u
return profit, commission_paid7 }8 I7 N/ v1 X2 M8 t, \
5 l% G9 G [% C5 F, R% [0 o. y0 _# 设置命令行解析; ]9 ]2 H0 P4 E. ^4 h/ l
def main():
* I) i: c$ i% h" g; I parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
9 K$ T# q6 N4 p( R' B0 b! U parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
& V% e' }+ Q& x# c4 p parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate."): O% i+ Y0 [! I9 C2 y. o
) b0 r' ~1 k/ w0 F9 i2 W/ q
args = parser.parse_args()
B+ S- k& }- s " X; h6 }% |5 x9 S; m( O5 [/ h
# 抽水开关:开启或关闭* H0 O* ^ N! B- R; G% c, m1 f
commission_on = args.commission == 'on'
7 l+ b. r6 l$ m. ~( d: r8 H- o
+ L# S1 @7 l8 c- c" T( G1 \ result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)0 H1 B/ M) e A( b( F2 U7 F
print(f"最终盈利: {result:.2f}")
! X$ E' R- n' Y; | print(f"累计抽水: {commission:.2f}"), o o! i# d. ^, a! ]1 C
; I- x9 H, g1 c. E4 \$ Aif __name__ == "__main__":
% u& m4 u7 ?5 D! y, v1 `' \" x main()
: s2 F- A( E* C1 s3 n) F1 s2 ^6 k
& `' @* i+ E" v& K2 ]1 I% m2 ?! G6 w! O" t
步骤 2. 运行$ C$ N$ C- M4 n: J2 Q D
! C) `9 E* o7 }$ K# n% n* a6 Q在命令行里进入文件所在的文件夹,例如:8 |& ~5 F/ [3 M0 o& o
cd C:\Users\你的名字\Desktop
( k' a5 [% q6 ^python baccarat_sim.py
% g' K# G; H) _0 y' h; R+ z( C, `1 {$ C
输出会显示:, u5 @+ ~% m& p/ P* }1 g) [
1 _0 H7 `- d8 X% ?4 P& c) c7 |
累计盈亏: xxx
3 H" e. |; r4 @累计抽水: yyy4 b& B& C6 r7 o
-------------------------------------5 H/ y& [' b+ P/ o2 N" Q
实例:试跑3次,
Y- f) \( m5 E/ k& |" WC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py + {. l/ a, I( r S w1 l
最终盈利: -5360.35 - }, @% H) i$ e9 m" S' T# l
累计抽水: 5176.35 K- M* m& r6 U, c) E3 g% p
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 3 n9 y. ?8 }$ ^) ~( w/ w) c
最终盈利: -5661.65 0 p H8 W( z! e0 W
累计抽水: 5174.65 9 f) B: R$ R) W" Y$ a" x
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
4 l+ M l' E* @& i, ^# o: M2 ^3 c最终盈利: -4244.50
& L. x; q7 G# W; @累计抽水: 5176.50
+ A" a! y! T/ e7 {9 W: |! T) H7 G
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:8 ^5 [* J3 t* T
* p3 u( r* a6 X" [8 \9 d累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。+ {# o2 k! u9 }
' b( z/ S, g0 }& D
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
" G1 |0 X! o- ~/ I( U' N这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
6 i( }! {7 s1 p$ L人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。7 Y' E" Z2 ~7 L
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
8 N3 H* A$ D9 P5 s
+ w [( y6 x1 k0 d# C6 V# G7 Z, \启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|