|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 " J4 ~+ d! K6 ]8 g7 I) b
/ {% P5 |. i6 I. m" T
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
; S+ L, q( C+ u: s4 l5 LExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。% t1 K9 J, g* R- O2 m1 `8 }
6 N# D/ u" \! B( Q. Q
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
; @/ r/ j" n4 W1 Y: ~) q5 n假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
5 J& N: f6 ^ Q1 F. @9 }: g先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
" p) Y$ u+ a1 R$ F- b0 p: N
; B: c" O7 w" k步骤 1. 新建一个 Python 文件
6 {* d: p7 c) D打开记事本(或 VSCode、Notepad++ 都行,我用记事本), j& X1 k W7 v+ @" _
把下面的代码复制进去。
! n* @/ v- A* J. C& F保存成 baccarat_sim.py (注意后缀是 .py)。
8 R) i1 {, F1 s) f9 ^5 P" j/ X9 m& X& u1 Q( {
import random
6 R8 i$ Y: g2 x6 Himport argparse
9 z+ ]! Q, A* `7 j. O5 |5 F# g
- q7 [/ e& m2 o/ i' g! U# 初始化鞋子3 F, \9 r% _* Y: {: q, L+ {6 p+ T- {' O
def init_shoe(decks=8):+ ]1 R) r/ O. n/ D9 n4 y* _
# 每副牌52张,8副共416张
4 }( @9 x) t+ t; ]9 ? shoe = []
0 Y& A+ @) y; F7 M* ^4 C5 G for _ in range(decks):
; d$ o8 J! ]. C' c, F9 b shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
* T3 v5 H; W0 q* D* Q0 }: f random.shuffle(shoe)
4 B a; c- L8 A8 V m/ } return shoe' {' h2 [0 W- \# s+ S) {9 a
7 x: M! I; k2 w }, W, v# p. k# 发一手. B/ x* o( ?. q' k& U
def deal_hand(shoe):0 ~ D& C8 N, Y% M( x9 K$ H
if len(shoe) < 6:. `8 U& S* }2 b# C, H+ q/ b" c0 ?/ N
shoe[:] = init_shoe()' y/ f. G, Y2 v6 ~& r: ?' R
return shoe.pop(), [9 c' h, ~$ C" ` f1 R
$ E$ m: ?+ H0 Z- x2 y# 模拟下注法 A
/ y% ?- ^. ?& q2 d0 Cdef simulate_strategy_A(num_shoes=1000, commission_on=True):& b* Q; H/ v, M# Q+ @! `4 v1 ?, D
profit = 0
, t7 A# T1 K% \! L) {) Z commission_paid = 0* @9 D h/ ?- {: K
shoe = init_shoe()/ z Z8 A- }$ T: `' N
' `5 ?7 C) v6 c# P$ n # 策略参数/ n# B# ]5 h8 K
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级8 A; b4 ~, J* ~. l
stage = 0% G w/ ]( v! r/ K- [
target_side = "B" # 起手投注庄
$ r: N2 I8 Z, m2 B8 w: i; N9 z. ]! Y0 i) m( D; q% d* n
while num_shoes > 0:
' ?+ J3 n- `; P- f9 I4 Z/ d result = deal_hand(shoe)+ `0 R4 i5 r( h- T7 K7 e
% @5 }. _1 z& z' B8 J0 o9 b if result == 'T':
3 g7 Y, H9 z# a2 T8 j9 t: h$ L # 遇到和,不输不赢,重投8 ~; a/ K1 d6 C# m2 ?7 L; f* I
continue
/ u, T7 T) _8 o' M8 V" k2 p& {! U
bet = sequence[stage]
& Q3 k( I/ A4 I1 @" p( } h
- `6 T d+ v2 U! m7 J: w- M if result == target_side:! a/ `- X ~" g
# 赢
% R, e% j, v& f9 h# V win_amount = bet
7 |7 G9 D" i: f2 _ if target_side == "B" and commission_on:6 ^& x" P% Y( o' `. E
win_amount *= 0.95 # 庄赢扣5%抽水
9 p$ e) v9 X; L commission_paid += bet * 0.05
' n2 \) e" V D0 R1 Z/ ` profit += win_amount' j+ ^8 z4 b9 L. x
stage = 0 # reset8 a- y4 S% D/ A! u# W7 [+ R
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
+ `6 J, i0 @$ f! S else:6 V& c8 P9 g4 f* X
# 输' @5 V( t" h5 G) {' o8 b
profit -= bet
, q: g2 K7 d- O* O3 c; S" q5 f& n) W stage += 1
. F$ I! z- b' R* w+ u2 z% U3 ] if stage >= len(sequence):
% [2 {/ I% r% x [/ F& p stage = 0 # 断缆reset
* \; I8 D. p# l9 O: j& p6 ?7 q: q num_shoes -= 1) ^$ h$ [, y0 l" I: _: F e7 i) \9 Q
4 ]; I! c# O& ~! v; m
return profit, commission_paid1 x. Y' y5 R t* l
+ q* d& X" x" x W2 x! ` x
# 设置命令行解析' x+ u, i, T( _0 t/ x, e1 e
def main():: P3 z! r( d0 _4 l" r1 C
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")5 z& n3 _8 P& q" N, }
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
* n% y1 M* I! X1 R) D$ F+ u$ ^ parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
, H6 ]' `* H* t& f8 w& S4 E + w& M. |$ q! S0 p; ~
args = parser.parse_args()$ U9 ?2 P; ~) a
9 x3 y8 k5 k2 L) F # 抽水开关:开启或关闭
- V# \8 {2 o9 s5 n% v! W; _ commission_on = args.commission == 'on'* c4 ]% i6 f5 C
3 g$ @. j: E/ N( s' A: h- {
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
/ v- w" H9 P/ D* A6 b! y* f print(f"最终盈利: {result:.2f}")) w7 |: V6 _5 l1 O7 h
print(f"累计抽水: {commission:.2f}")
; m) X+ Z$ F' Z7 c {) J
4 {/ R2 s) ]% L2 m' ~5 S' fif __name__ == "__main__":
" w. ~* ~! \1 F6 b main()3 E$ `& p2 l6 M7 M0 b; l/ z ]
. F7 [. X( d/ h1 T& p9 i; c1 Q; a0 M+ E$ {6 C2 j' y7 p
步骤 2. 运行+ h9 b7 y, n4 Z7 v' U4 u( T
4 I$ c$ j( l( Q% \在命令行里进入文件所在的文件夹,例如:- A$ I0 O) n2 ~. @8 C
cd C:\Users\你的名字\Desktop7 g- R) ^( ]- ^' `3 ]! l; e" }
python baccarat_sim.py" ]- \& T: Z4 D. S* c4 J
% V; j& k- A3 b6 u8 x输出会显示:
( [8 C; V2 M0 s8 P& y0 x6 B9 M/ z$ a- I/ o1 X, H
累计盈亏: xxx
`. z* O- j) I% B' F累计抽水: yyy* ^& i q9 q1 ~/ l) u' l
-------------------------------------
! i& ?% k5 S3 ]7 `+ ?实例:试跑3次, / @7 d% H& ]/ o8 M0 o; B( ?. a
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
* [( m& L+ U* I$ ?( f- `最终盈利: -5360.35
$ ] |& c! ?( e; x7 f5 l1 r. W& [& E累计抽水: 5176.35 $ H# F+ a* x6 v+ B, G
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 4 L; _1 F1 @7 p! A4 t2 c
最终盈利: -5661.65 " G3 z# v% ?9 X4 X
累计抽水: 5174.65 3 C5 B2 f! M5 W0 w" M3 D5 y
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py " [: S5 C2 \( t5 B( }& j
最终盈利: -4244.50
6 X+ k' X) e' }- N6 G. Z) q累计抽水: 5176.50: o: ^4 l8 u! ~3 y/ R# w6 K
: u5 d! a) I8 N5 g- v
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:3 J9 T: c; t: W) \
2 ~4 {4 }% e. {) M. n' B累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
) _" G. v/ N( R& ~5 |1 k0 I
) e6 I0 e V9 K1 }0 k# q最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
f" j4 O; D* ?/ y1 N9 f, N! [9 @这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
- ^2 r0 ?# O+ F! r* R人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
4 T) [$ \1 z/ x& r6 d) }但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
- d; S5 j# v( [% u4 l$ u( K+ i `
) g& ~# E$ [5 _$ ^& z5 }+ X启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|