|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
( P# b7 I+ s. C& Q% C2 \* x7 M% ]; X3 a2 d
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
3 m* A8 [3 G) U. z$ t% ]Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
8 y+ {$ d- J( S, f6 E/ @. `* N s8 X5 z, V; ^& N
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
0 F2 t y, h9 u4 G( x假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
5 O0 u% U( s- m4 x# g' O& v G先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
6 V" q" ^; q+ H( I6 y1 `
" I5 v9 Q. w, _4 g; b步骤 1. 新建一个 Python 文件
3 U9 e2 C$ i1 l+ P9 n# Q* N打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
/ f, I& A7 ^1 ~: p) Q# d/ A把下面的代码复制进去。
* J4 K( g& e& o0 J% j6 Q& _保存成 baccarat_sim.py (注意后缀是 .py)。
- @* G: E! ?: u4 ~, t+ u' o9 L) a; [
import random
/ V' f9 L8 g8 a4 ^( W A4 P. fimport argparse
" R2 Y3 [! m A' x, f- _/ u) R3 N! F6 F+ k0 W" T
# 初始化鞋子! u5 i3 m1 v6 D+ W$ B" f* P1 Z
def init_shoe(decks=8):6 X6 e" U0 F5 f* r- j7 m8 |
# 每副牌52张,8副共416张
5 l+ c9 y1 J0 T" _4 K# g9 m shoe = []
1 g3 G% C4 h2 K* A for _ in range(decks):
. M2 W: I/ R- W shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和41 O# i* o) m$ U4 R; o# ?
random.shuffle(shoe)
3 ?! G. x! L* h+ R" a. R return shoe
# L R- i* ]; p: w* K# r$ c, m# b
# 发一手# s% V- o2 ]# m# v7 A9 l
def deal_hand(shoe):# g0 S0 C" X% ~) Y; q. Z
if len(shoe) < 6:
0 c, k/ H4 y. n' W) T shoe[:] = init_shoe()
5 k6 H( H$ ^1 k return shoe.pop()- ]; O# q* [& f& X9 m
8 i& m5 I0 U& C# 模拟下注法 A% j% C, Q7 l7 q$ Z- a8 [( b- {$ _9 L! w" E
def simulate_strategy_A(num_shoes=1000, commission_on=True):
. K- W2 w+ K4 X2 l profit = 08 p, M6 x Y6 L/ w
commission_paid = 0
' g. j8 w& d2 N+ s( |5 K shoe = init_shoe()% ]8 W0 b2 N$ p5 h# @
7 P/ g& \+ q2 v
# 策略参数6 w* u$ Z4 f6 |& j5 L, X
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级3 T+ m1 L( [/ Q" z. [
stage = 0
3 z: ^: n* \! U! r8 } target_side = "B" # 起手投注庄
3 q/ m' t% Y7 n- X* e2 t
5 c7 H, e! W0 n: `: o) _7 L: [ while num_shoes > 0:
$ t5 l9 U* W5 ]$ o" } result = deal_hand(shoe)
$ R, \/ Y) V0 R) E
9 g' e' @) j$ u5 H+ ?$ M' Q if result == 'T': 4 A2 V# d+ b5 ]
# 遇到和,不输不赢,重投3 R: y+ v, X0 I4 }. R
continue
* I9 |# A, o6 n! m: L
/ h* m+ H A) P' C; H0 _& j bet = sequence[stage]
$ i) D& n# u6 E2 O" g' @# N , B, ~$ x1 }0 ]2 V; J4 q4 F* H
if result == target_side:
- `8 O8 A' t% `: d # 赢
% @* l0 j- ]: O: l v5 o win_amount = bet9 [9 n$ K1 w- q( I4 q9 ?
if target_side == "B" and commission_on:
$ r9 A. Z" X/ R9 i$ Y) a8 ]; Q win_amount *= 0.95 # 庄赢扣5%抽水: h% p2 y- n; k& \* [! M
commission_paid += bet * 0.05
1 y$ Z' u9 b2 R, L' A( I( q" J( \ profit += win_amount9 r+ F# U$ W1 K. k6 s9 O9 q: W" l
stage = 0 # reset
5 j' j/ d# `" I' M9 k target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定); q, t, t3 L6 x2 y% E) S9 ~7 N
else:. Y; U. u4 K9 N) }2 H7 i1 [. @
# 输
6 W/ Q3 b7 d+ {9 @! J. T- O profit -= bet, q% c, _9 E K% E. J3 x4 f; P
stage += 16 |: M& Y! H7 `1 s' t# \# L+ C
if stage >= len(sequence):$ @& S( T1 K+ |1 ^2 p: k) v
stage = 0 # 断缆reset
: z- F2 v) f3 E9 J% J7 J% N num_shoes -= 12 L" R8 t' v8 t2 o1 s; ~* P8 Z
) Y: ]/ O! R- o- E9 v* j8 \5 y$ x# | return profit, commission_paid
/ j1 q$ @9 Z& i& c& d6 U
6 n Z) ^' o* ]. T8 D# 设置命令行解析' m& ]' ^& y& t; `$ a! W
def main():
; T7 Y3 o# D' U# G! n- N c* T parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off."), M1 Q* L z @5 M) O4 X( ` P% c
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
& m; F# Y, m# r" ] parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
# x6 s7 ?: c& {0 ^ C; T# { . t% {+ R; A: }( b+ `
args = parser.parse_args()
1 G5 r1 I" a6 b1 o 9 j* ?4 K9 k5 V: Z5 W
# 抽水开关:开启或关闭$ X& u/ E) {0 o2 C$ v3 M* W
commission_on = args.commission == 'on'
; E8 Q( H) ?( F4 b7 o ) C) n9 Q! U7 Z2 s b |7 h
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
$ L1 b, q/ t3 Y6 R/ m* q& t* X; t print(f"最终盈利: {result:.2f}")! i( d$ I! m6 r& _7 v! j
print(f"累计抽水: {commission:.2f}")
; P" v# ]: H, ^/ _ @9 f3 l0 q
r& p" o4 r$ A4 p! {7 qif __name__ == "__main__":
2 ]: u, [/ P' R5 d2 t& N5 {$ Q main()+ y& h' U1 j5 B, O
/ ~% Q: f u5 t( {. }# p6 o8 h+ s
$ B6 y8 g3 l- B9 ]1 z: {8 j步骤 2. 运行$ ~. M# }3 f8 o
4 y7 t0 s5 l) _' ~# _% ~在命令行里进入文件所在的文件夹,例如:
L) i) G# f+ I1 L% fcd C:\Users\你的名字\Desktop
9 ]( D8 a9 U+ v% ?) Y) C8 _8 g/ ^python baccarat_sim.py8 f+ j U# `1 @! R6 \( U
0 g# f' v5 `- y. B; V6 A$ Q
输出会显示:$ q8 E, T6 ^* B1 j/ g
5 A0 o- [* _5 K
累计盈亏: xxx
# k7 l; S* W; [. S2 ^7 y累计抽水: yyy
; s. X# g0 J0 l! }( D-------------------------------------; S1 l& y3 |* R: `# X0 C
实例:试跑3次,
4 [# f% _* `, K @, Z1 dC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 0 A& @; L8 `. P! o
最终盈利: -5360.35
2 R8 s$ z/ l5 ~) I. r" [" M累计抽水: 5176.35 / o; `* b( k, o% X( h2 l
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 5 d3 v4 G+ ^3 K$ t* C( x: |& c
最终盈利: -5661.65 & r2 Z" a4 N/ j) o3 g5 y
累计抽水: 5174.65 + r1 _- |& C% t3 q/ p+ o
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
# I. V( A" O, l0 }% @7 {最终盈利: -4244.50
( V- X; u- a/ u w3 z, m% O# \累计抽水: 5176.50* q. ~: R4 y, Q
. n7 y2 Z: x V; a- J7 J6 X说明你的 Python 已经能正常跑模拟了。结果也很有参考性:/ `( X1 P; |" Y' w2 T) j- v5 |
) }, B; S( C1 w+ N' X
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。/ Q; V" K1 P+ G1 N; m+ W
0 C0 \* m% a; U7 m- R1 l; S" H
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
& M8 g* `7 h1 `2 d; w这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
' R+ Q# ]2 O7 _$ n" E3 n- Y$ }$ ?# W7 k) d人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。% g$ r3 D+ T% w9 `( K
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
: T2 ?; b. E, f
$ o0 r5 S! n9 Y& g启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|