|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
2 P+ K; q8 m& B- J2 b# z0 Y& f. |1 c$ s Q- w( _0 J+ e) b
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
: e) Y% F9 F1 V% G- r1 {Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。2 R2 ] @, G. ?( H
! J8 ^* X; E+ ?) w3 F! A! Z在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
! Q0 ?* Z/ c& U6 P/ v假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
( H9 x* l) L% G先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
- @3 C/ _ f& Z2 W" ]6 ]& Q/ p U3 k: J8 u" h
步骤 1. 新建一个 Python 文件" \& |) [- O x) c& \. A
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
: w; t: V" L% c0 N& x. b/ u) X3 y3 ]把下面的代码复制进去。
1 O$ ^: K3 W- R8 t c保存成 baccarat_sim.py (注意后缀是 .py)。- Y P) m* z0 m/ X! E9 L1 F5 W
) C( G4 y4 M& b7 L+ @import random
X) O4 g9 E2 d$ }- j) T" Y' `8 rimport argparse. P! I; Y. f9 h. ?; O+ ^
& P L4 @$ n9 I
# 初始化鞋子) ~$ d* Q2 E: d! V' @
def init_shoe(decks=8):
5 s; S# r; o0 e* s( d/ ^ # 每副牌52张,8副共416张3 A$ x8 e* I- q' A$ M" `- g
shoe = []
* y- _! P* h' A2 ~4 u for _ in range(decks):( h: _/ t' n2 ]3 m8 _" z* p
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4. b, ?7 W0 [4 ^
random.shuffle(shoe)
$ t/ ~6 z, ~% V+ r& ^8 k( G return shoe
) t% [, L7 I8 {' `* y: ]$ F+ _ f' o3 Y& A1 c$ s: H7 ^+ k
# 发一手
) B2 K! o1 i h3 n* sdef deal_hand(shoe):
$ d, a( _' x# {9 [7 T9 i if len(shoe) < 6:3 `) y0 i5 I# `2 o
shoe[:] = init_shoe()* `! ]9 Z5 N! k! |/ {
return shoe.pop()0 P1 T+ T8 u3 S5 @" H3 }
% A E1 s) K+ R6 s4 w' Y/ N; \# B
# 模拟下注法 A9 E0 l( Z @: |. ^, m) ^( P2 p
def simulate_strategy_A(num_shoes=1000, commission_on=True):
/ `- p. n7 a9 W* s/ ~) d' { profit = 0
: l$ {( a4 n4 w5 H commission_paid = 06 _# z/ z. Q+ K( D0 G, K* ? k6 v. l# z6 q
shoe = init_shoe()
7 j9 {$ x$ }/ J
7 B! ?1 z8 b' u& r- F* D, k2 V. J # 策略参数4 z0 J+ U! b- r8 |7 c# z
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
+ j% s: i: |0 K. s- N8 \ stage = 0
. l3 {1 ^2 \$ D* `" I7 }. Z# H9 k target_side = "B" # 起手投注庄, v* L& {- i2 e$ Y
$ x k/ p+ Y3 M4 ? while num_shoes > 0:
' w: Y# E( v, S5 A0 k; o& y result = deal_hand(shoe)
, |0 y3 F* z& @5 m, }8 I" p0 C( `( A2 w& i X" }4 Y
if result == 'T': K. n y8 j+ j3 W0 j! F
# 遇到和,不输不赢,重投
. h# @" s6 n1 I continue
; ?9 u/ z5 R; l% Z. i6 G
; N) m/ I4 y: j0 ^4 R bet = sequence[stage]$ g3 E+ h' ~' P |; ~, z) `0 N
) m$ Z: d; ~) G" P; ~5 Z if result == target_side:: Y7 v+ y) r* o& K& D& j
# 赢
4 M* L; I7 y& \ win_amount = bet
+ J7 |% P& r! G: t" M) y if target_side == "B" and commission_on:# ?& a4 @1 m" K* L* J
win_amount *= 0.95 # 庄赢扣5%抽水% e! P. L( t; Q1 G# _$ V# a
commission_paid += bet * 0.059 h3 J; i8 m# z3 E3 j
profit += win_amount
; C2 t' W" f' g& Q8 h stage = 0 # reset2 u' A- o# [# F- }/ A% T; @
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
! P f& _# H/ C7 A n) W9 L else:
. U% R1 z ]$ o$ z6 y # 输) y7 I$ G$ G0 P3 x" J
profit -= bet0 |; P; h) X' m+ v# S& }
stage += 1! @ I0 I: R) K2 u
if stage >= len(sequence):; y- N) V/ o: v9 V# C, D9 d, y: q% a
stage = 0 # 断缆reset2 S3 K+ q* ~8 m; [% {* w. f& {* u$ c
num_shoes -= 1
: y0 s& S% R1 m# x& e/ `5 k9 I2 d7 u4 E( j
return profit, commission_paid! C/ E* H/ N: R1 o- N
. L6 @$ E" W6 C& a6 t: k# 设置命令行解析5 C( X( x' h! E# c- V
def main():
6 v; ^9 h2 z7 T parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")" S2 l& v6 z" P
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")! {0 x2 J8 i. h, T( \' Y
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate."), V) G! p w/ K( K1 |) |" w3 G
8 k5 y& Q9 H! P2 y args = parser.parse_args()
! o$ A! E# O: C5 H$ a, v
" {+ P* C4 P: [7 `4 M4 K # 抽水开关:开启或关闭7 p0 [$ d2 C u* l' B
commission_on = args.commission == 'on'
) t5 ]9 E: m5 s3 P i/ t8 t * N+ p8 {0 e4 U. B* k9 D' D8 A. ~# Z5 [
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on); f; G7 v3 A( G A; w7 [) H& t
print(f"最终盈利: {result:.2f}")$ a; v% Z8 U- j) B* u5 R2 X" b' x
print(f"累计抽水: {commission:.2f}")
6 m H8 U' O) B# q
( ]8 ?- Z$ X5 t# z7 ?if __name__ == "__main__":2 O2 f# m0 n6 z
main()) J: p5 N7 r, `% p! Z/ G$ r
3 @! y% X2 Q# O/ S% T( T( t: s
) v% A! D" D& r- I" g5 U) S步骤 2. 运行! c; h- S0 r0 H# O( J+ I& y& ^, s- d
" A* I' x+ y/ J
在命令行里进入文件所在的文件夹,例如:
. I, g' w+ d7 ^% o1 ]1 q) Ncd C:\Users\你的名字\Desktop
3 p5 w7 R; q6 W7 k5 |; Upython baccarat_sim.py
8 D9 i: g6 U! Z& o; o. o5 H' V
0 y9 i! P$ I3 I D7 t输出会显示:+ X) v! u# W8 g# P
# x) o% v: t! }: D; i0 B0 ^
累计盈亏: xxx
9 V8 _/ F) p) k累计抽水: yyy
4 q9 [+ U& H; z1 b8 [6 t, O: |-------------------------------------* Z y1 p; ~5 o) {1 u* x# p ]
实例:试跑3次,
2 ~ V; P$ y8 j q6 M) XC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
' Z4 ^* M. a" d" ~. D) z. |. r最终盈利: -5360.35
" J+ S, p2 p- z0 v! I8 Z) }% D累计抽水: 5176.35
' R6 N# K) X9 B" g+ SC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
: h" F0 h6 L/ ?1 |+ Q# _最终盈利: -5661.65
F9 P6 ?+ C% ]( W7 z累计抽水: 5174.65 7 _0 v8 F+ ?( z" ]
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py % Y' t+ m8 A7 s- T+ `
最终盈利: -4244.50
6 d6 x% I6 i5 W# Q1 q累计抽水: 5176.50
# H/ H! ~8 B* d# B0 H4 m+ ~6 `0 Y6 D; V
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
3 z) U F; R B4 F [# X) J; Y. `% z3 N0 r
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。6 b6 j M$ \4 T4 X# K/ j
; @; `. I" A0 Y8 k2 Q! S/ b
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。" C& n" j4 p) w! k1 _, L
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。* E4 ]! S5 h- n9 }$ v0 C
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。) ]- d2 b; R9 Z8 G
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
) [: ]4 w; p0 x6 G0 X! _8 l( b3 r1 j. p5 I4 |+ T# ^
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|