|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 , v+ J% ?" z4 j7 H
4 a S1 f. r' T$ R1 N可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
7 u. F$ b6 S% N; i1 RExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
/ r; B7 s* C( G
! k* M2 G9 r8 Y& h# k在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
3 L$ B6 ~3 } \1 ~# _1 G+ N% \0 p假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。- }- q2 c# z. g/ R& L6 t5 [7 T) ?% p- E
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
. a* E! O$ }! _' M$ q
2 J- Y* n8 O! e" `0 K' I3 A! _$ q步骤 1. 新建一个 Python 文件
: X: Y" u) {# w+ ?+ X2 v* L% k) e打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
* T" J# o. u3 v* l+ u% M* q, A把下面的代码复制进去。 s6 H' Y. S$ f) ~2 D6 y
保存成 baccarat_sim.py (注意后缀是 .py)。
2 ]4 T1 r! f- [
/ l" V" ?8 ^) e5 X' z( B) H9 ^* y/ cimport random
' h+ x' e* y% Eimport argparse9 n$ }6 b) x( E: @. W( j
$ C& n7 g/ p, g8 X% q
# 初始化鞋子+ a& C9 y0 q' {: _2 g* s% r2 _3 d
def init_shoe(decks=8):
/ }& `- X' A, c& a; y # 每副牌52张,8副共416张) ^ m ?; z1 t% C3 u- f
shoe = []
2 i5 }, v1 B( `6 l2 { for _ in range(decks):
2 W' ~+ i/ T. z shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
9 v, R! S6 O, v1 ~- V$ P random.shuffle(shoe)
7 ]; x8 X) M7 P/ y( Y0 g/ p return shoe8 w, b: q. e- I. M+ W! r1 _6 U, w* V
# t$ e! Z, t8 G! s7 N
# 发一手
% b$ D, [7 I) d% ydef deal_hand(shoe):
, W$ l) @6 s. o+ R. ? if len(shoe) < 6:
! _/ e* d. O- R7 r6 ]" ]$ N: t shoe[:] = init_shoe()
" A5 ]1 e+ ^. L! E) \( O6 \ return shoe.pop()' N o7 E, G' a4 v
; T2 ^4 V$ S: R7 m$ } e# 模拟下注法 A
- o) X! e2 ^/ _4 A% Y0 |2 Vdef simulate_strategy_A(num_shoes=1000, commission_on=True):
3 i: V0 a2 m$ E profit = 0
x: O6 G s8 q b1 e commission_paid = 0
9 C% J0 i( o/ H, r, U shoe = init_shoe()% \) S7 ]8 I M
- ?9 t1 z# r* y1 r4 W( R7 v# y # 策略参数
3 P' ^. L: o3 ?: N0 w" u+ _ sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级 j2 E6 V, W9 l& I& k! M
stage = 01 s3 R$ ~: ^2 p
target_side = "B" # 起手投注庄$ @' _* S) W% B4 j+ ~4 K
# o C# N* X( I6 R
while num_shoes > 0:
) z6 y$ F2 g% q4 n* l% ~ result = deal_hand(shoe)1 |$ K! u7 G1 w; M3 {' ~
9 L/ D4 }4 n L1 D& Z g* p Y
if result == 'T':
6 n; U2 @/ D6 Z" H, b # 遇到和,不输不赢,重投
$ M0 A" G: i( {$ `) z7 t/ W) g continue
& y* L! r9 a# Z- A4 ]$ F3 g* H1 B% d# X" E# P7 ] ` }
bet = sequence[stage]1 \ m. {! \* j! O# [" t
2 @0 F/ {$ ]9 A p if result == target_side:
2 K, i) f& n# V5 ]+ z1 u* [( K # 赢3 U+ ~$ R6 G: G6 j# `
win_amount = bet% c ] L& R) o0 R$ K4 y1 p6 b& w
if target_side == "B" and commission_on:
1 S& ]# d0 o8 n0 _+ `6 B win_amount *= 0.95 # 庄赢扣5%抽水' x0 i& ]% g) n# m9 Z
commission_paid += bet * 0.05
0 j- ~1 |' @; _! I7 ^. C profit += win_amount
/ |2 f' u7 U0 u* l/ k stage = 0 # reset E( f. F, G) Y$ [
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定), f) Y' |7 a( d2 J/ j
else:0 Y! r; e# P" t3 b+ F
# 输, N& N+ h- q2 ~
profit -= bet8 {& U |" j% t
stage += 1
' Z# ~. x7 f5 l' s& t if stage >= len(sequence):
( T; C e: d3 T stage = 0 # 断缆reset
( D$ ^8 H% {, T num_shoes -= 1% o+ @3 M0 J& \- q2 l
& M4 L" [1 ` A* ? return profit, commission_paid
" a, X7 I* Z8 z9 I& k! d
3 S/ L. ^/ i) z5 e* w2 Z6 D% x& [' e# 设置命令行解析% \+ P6 j, W9 `' g) {4 I
def main():
5 F- c5 s8 W a# G( U& |9 ] parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
) A u$ R8 b3 @0 q' M# m. _* \( Q parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
. j- m3 x; L2 W3 q9 E( S$ A+ V parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
9 b( P5 [' b, o0 i% G( p
3 y& s& n5 A% c! S6 Q args = parser.parse_args(). {* W/ L8 a/ g/ g9 C6 c O: ?. v
1 t4 {; A( B% l1 F1 r: i& I. T
# 抽水开关:开启或关闭! R3 l2 ]* q, y8 E) x, |
commission_on = args.commission == 'on'
- A0 h' I: v2 K) W0 P 7 |) I7 p# r# V* Q7 a6 y
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
* P' f T* H7 M( X3 Y# \ print(f"最终盈利: {result:.2f}"). q1 J4 W* |7 I3 D4 ?+ |
print(f"累计抽水: {commission:.2f}")
3 E7 f) W& f5 z" ~3 ?( o1 }
9 Q3 _$ U0 T m- h! @" F# aif __name__ == "__main__":
' U; T* {0 T7 ~/ d: z6 ?3 n$ f! h main()
. P* B5 [- @. u/ C
! t# [. T4 {3 [" T' `, Z
2 f0 V; Z5 J4 r6 R步骤 2. 运行, ^* n! v! t5 \) Y# S# G
& ^+ p0 o% c- y在命令行里进入文件所在的文件夹,例如:2 _) @0 h3 z- {8 y
cd C:\Users\你的名字\Desktop
2 w8 k; U* M+ V- k8 R% Y4 G9 C% lpython baccarat_sim.py
$ j( o" Z n2 g
Z, `1 d$ ?& m6 n# A8 `) o! A输出会显示:
+ Q8 t+ k R2 t; F6 ?& d
4 L+ ~- n2 {# v: @$ q; i7 [, e M累计盈亏: xxx( @1 c0 c& ^5 ~8 I* B& X3 j. r
累计抽水: yyy
5 U( B: P$ ]" `3 x7 J7 J6 Z# |------------------------------------- U/ Q) v) X. J2 D% B# E
实例:试跑3次, 2 D3 x+ c3 m8 A; v; |: G
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
5 y& Y$ d% I6 v最终盈利: -5360.35
3 T6 a# C" K: s! n4 Z累计抽水: 5176.35
2 D, t/ f6 F7 @9 R" E. W3 ?' `C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py : W, y) N' g- p! b3 {
最终盈利: -5661.65 " K% q" a; ?3 A7 G6 G0 k+ E- [
累计抽水: 5174.65
+ Q4 W( ^5 [& i1 hC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 1 \: z5 V1 d- S5 M& \# l) w
最终盈利: -4244.50 0 { E5 @) _( |) m+ {2 u) Z
累计抽水: 5176.50
& X1 ?' n7 i p; e
) K, I& j4 z/ @% F9 H0 o7 C1 p说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
: n# f/ M- j, G, F) E
* p9 i) ~: Q: M4 a0 U! x; _累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。 \" o$ b* y6 x
" R$ M% W9 h' i% W1 H8 |& _
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。2 [* Y* M* @8 {# A
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。! J$ ]4 z4 F6 n# U" Q
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。. z* N( r( v5 q
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。1 W& s+ d6 I( E' I2 M- `
5 Z m1 Y7 \' t+ P$ H7 M启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|