|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
$ A& g9 j" j" s7 e' e2 }; p
G2 }% [5 v) x) m可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。6 g6 f7 O g! @7 b8 M, }5 G% E
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
8 K- |: A6 y6 n: j
) T6 [5 i8 O T* |" G7 M在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装). P5 ~" R, [7 k1 o+ R0 u6 C% y& a) S
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
5 Y, Y3 m1 h* I7 Y3 r, @先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。0 e9 V* v& n% p% \' x% M9 k0 ~; o
5 X1 C u5 m1 v) T! Z
步骤 1. 新建一个 Python 文件9 l6 ]' ^5 d( D% a: p) l! K* t
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)- z1 ^, e9 A0 @9 P4 S% S( r
把下面的代码复制进去。
" B1 z7 |2 O ?( y保存成 baccarat_sim.py (注意后缀是 .py)。3 R* w. C" V. D" X$ p$ @: d+ m6 c
* U1 n& P; J& W$ Q! ]$ Cimport random: A& q) e3 n+ l- Z9 K
import argparse
7 \. w8 e9 p4 Z; `, F( D0 Z1 u" e
6 z+ s4 L( A, q3 S# 初始化鞋子
* }# C5 P! \+ J7 ~def init_shoe(decks=8):
4 w0 |( `5 {0 r: v7 e # 每副牌52张,8副共416张* n: B) o4 b1 a# i2 A2 H
shoe = [], s! X% X( C) H }1 c% _
for _ in range(decks):: W& O& h: G( [
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
2 q" t' T1 Y4 r, b" K random.shuffle(shoe)
" K) h g8 f, R& d return shoe3 L& q! ?4 V4 V& k( g* q" O
# J+ K: d1 ~( q, o
# 发一手
5 y4 q& x- K5 D4 zdef deal_hand(shoe):! G. W7 y( }& U" [
if len(shoe) < 6:% y6 y4 y, N* [) e, V; {
shoe[:] = init_shoe() W( ^1 ]* N3 U# G U/ U* B8 l
return shoe.pop(); }! d: _; Q0 g
. R4 \8 l, N, ^8 j$ Y
# 模拟下注法 A
; R0 j/ r& j' {5 G- k5 e3 |# zdef simulate_strategy_A(num_shoes=1000, commission_on=True):3 ]- w( D L/ M1 v+ ^, H
profit = 0
6 |/ C# b5 B8 U; Y) N commission_paid = 03 }1 I) K, _# E, z: j
shoe = init_shoe()
$ z6 D( a: f, p( w
: H# G5 i& e; T- ? # 策略参数
) N4 G# C/ {1 W" d- V sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
6 M0 S* z: C6 \$ s+ S2 K% R; j M stage = 08 Q$ t# }0 B% T$ Q" g
target_side = "B" # 起手投注庄
2 C2 S8 I5 i8 z& j" P
V" ~$ [$ f. }7 j' Y while num_shoes > 0:
9 z# O# @' r. M Z( c result = deal_hand(shoe)
( L6 v% \% J( O9 H# I9 e9 K0 c! _7 Z: A; u" o/ e
if result == 'T': ( T" t, t4 R9 i& s8 I( [' [. f
# 遇到和,不输不赢,重投+ C( u# p$ L2 Z1 a0 {2 P1 k
continue
) z# B9 ?2 E2 U2 @) m
) b7 I+ W/ U' M bet = sequence[stage]- P/ `& y2 I. m
+ J S( g* y1 y if result == target_side:
0 E/ n, {" i* f7 i8 w, Y9 E* t # 赢
8 j1 G$ X7 i- F' _5 s win_amount = bet
" ^/ X, ~8 @# {. l" c7 _ if target_side == "B" and commission_on:& V5 L N6 w% z; u* Y* y
win_amount *= 0.95 # 庄赢扣5%抽水
% D/ [. d. _$ W/ D; _' l( R commission_paid += bet * 0.05$ R& i7 [7 R2 V A' P2 Y
profit += win_amount [$ U0 P' p$ J9 M+ U* W
stage = 0 # reset
; s4 C' {, L0 B, N target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
/ K( l% D( Z% ^, e1 h( F else:
- c6 u: x. T" _9 r0 \: r5 _ # 输) i" q+ q; i. R0 T
profit -= bet8 [- M" K' o2 ^7 c! Z
stage += 1
0 O0 Q. s* P' S. W4 t if stage >= len(sequence):" Y( Z( B( M( c3 f9 L' |2 F4 P
stage = 0 # 断缆reset
L4 _ b: m. T" J. P2 { _# w num_shoes -= 1
2 M* Q/ ^4 B& n# T/ D. U" X+ D5 `1 v) Z) |' u; ?
return profit, commission_paid
! ^) n2 Y+ U% u0 Y1 Z) d5 J
) H) e8 V* R; o# 设置命令行解析
2 N! x8 Z' Q# H9 g' rdef main():
! Z8 j1 C6 `4 a: B parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
2 N+ R$ b9 [* C, j' ~) l1 y* { parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")' d/ I7 T2 s5 `+ w
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")6 G# r6 R* C: p: g3 |! J0 }+ M" W
! a# @. g; V( W! S
args = parser.parse_args()1 M& u7 b' p7 N4 W0 `8 \2 g$ Q
! y/ j' ^. M$ u& \4 `
# 抽水开关:开启或关闭( n2 L$ g( U* w# k4 n# ?& w
commission_on = args.commission == 'on'
$ a1 e" ~$ J4 J, W8 ^7 J$ E; F$ J4 g
3 i8 ]0 d: p" w p2 V k result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)$ ^1 e5 ^: ~- E' P% R
print(f"最终盈利: {result:.2f}")( }# V: V1 a& @ X1 O
print(f"累计抽水: {commission:.2f}")
( G! [' x% U; {: Q" A0 {7 X) n
+ F0 i8 _% a3 Y, vif __name__ == "__main__":8 N$ V- u! ~& R* ^ q) C7 o
main()" p$ {- G$ h! w
" A4 K7 ]/ r% e% o
5 u8 E4 ?* q- h步骤 2. 运行
6 [ x* W' Q4 C/ Q& ]2 a9 Z/ A; H+ T( p
在命令行里进入文件所在的文件夹,例如:$ B. ]5 Z, }2 e0 u
cd C:\Users\你的名字\Desktop
& j+ }+ G1 r' B0 vpython baccarat_sim.py: \& h! R& s) g* B6 t5 h
( n4 T! H- a, L7 G- J! D
输出会显示:
* j6 j' g/ u# P/ D! B
, T q: a1 \3 w' ?累计盈亏: xxx
6 L1 d& b1 o& i; d) u# k2 _/ Z累计抽水: yyy
+ T4 S* `$ G& R: _$ R8 \-------------------------------------1 B& A( i" T0 m2 ]# J; d/ Y, ?
实例:试跑3次, $ y0 p7 i! X8 A# i- Y4 g( Z1 B- N
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py $ W( t5 L% q% P) d0 z( G3 N+ C; H
最终盈利: -5360.35 * L! A4 A. A$ s1 h5 | o# a
累计抽水: 5176.35
4 J9 D: D+ y" |+ ~C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py 6 v/ Q2 j" r! e
最终盈利: -5661.65
1 y# H% l+ O+ s7 f; C6 x累计抽水: 5174.65 + r" X. ^1 s; K) \# }$ Q6 M' l, B; \
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
: {7 ?/ e6 a4 P) S: p1 ?$ ?最终盈利: -4244.50 8 ? L( f! v8 R# v: h: \
累计抽水: 5176.50( B' I% x4 f% B ^% |" H# C; G
4 ]; Z1 M" R/ @9 Z x
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:# b7 J3 l2 M0 u
8 {4 Z3 T1 B# x5 N8 I5 f
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
. i# }; _+ Y7 q- q9 K. x# c8 r( `/ }: ]5 J
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
# {' {5 g" U. P( Z( C这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。) P8 x8 X. x" ~
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
& O v. U2 m2 O5 H/ G; E! r# w% r但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
: w" B( i1 W% _# ?6 f' I( B& M
' G; q" w: f6 h8 u9 ~6 L) Z0 R# ~启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|