|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 6 s' Y. q1 P, @4 k0 j) R& R9 w
* ]4 Y9 x1 Z7 X- |+ n \
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。# ^) V, I6 h. F6 y. A; q0 E- m
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。. A9 z$ _4 y& \1 U6 [- b
8 [, }% b: p$ B9 v; |7 \9 K
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
: T2 |9 k- H. P* e2 g假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
/ w4 Y$ J- o0 s先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。9 ~9 k% r+ j* r6 x/ x' {
. ?* x: _5 ]* G: {0 X; r
步骤 1. 新建一个 Python 文件
" G* D/ E/ ]5 L \打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
, \, [8 K, @! p+ }) c' H/ d把下面的代码复制进去。. }3 ?: u6 f `& A! V* } e5 h
保存成 baccarat_sim.py (注意后缀是 .py)。
8 ?4 h; l/ J) c; h. Q
, r; T- c! q0 X! Oimport random: m* e1 j; U; i5 ^0 u
import argparse
8 E+ r0 |4 j9 H: h: R- ^& g, {: M, q$ H5 K& @+ W# [0 j1 A3 C
# 初始化鞋子
6 }; F! Z+ G0 U0 d- mdef init_shoe(decks=8):
, o* I8 F1 k9 E$ A! \ # 每副牌52张,8副共416张
. X, ?0 G8 s, }7 q* d+ c% Z shoe = []
" D% O3 K; d) U# `6 i for _ in range(decks):
+ a' ^8 O( E4 p7 \; t- s1 p shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
& r; F( I b4 @3 X random.shuffle(shoe)
( S. Y8 o! E0 I- W7 b7 e return shoe
' D" p+ Z; _6 n0 `4 W. D% d& C- ]4 o# v l9 X4 _; |
# 发一手
/ p: ~" |6 ^6 G+ Y/ Zdef deal_hand(shoe):
# H( j" o$ ?% W ~/ G4 ] if len(shoe) < 6: `( `; w( k5 ~/ c8 {/ d. v$ E* u, R
shoe[:] = init_shoe(). ~2 s) @, M' ]" g2 }. k. v6 ~
return shoe.pop()" \$ q$ {( E$ b
2 N4 k0 r9 N1 c# 模拟下注法 A
4 Y& R: g7 [& L& ?: @- c! r! _& Mdef simulate_strategy_A(num_shoes=1000, commission_on=True):
# ?) ~4 [& G6 q ^# R profit = 0
) f+ k- i/ B- R L) o9 p commission_paid = 0
2 k7 C/ V4 `8 t1 [+ ~2 A7 N5 r" d3 [ shoe = init_shoe()
6 d \" M. _7 i& Z5 W 4 e4 R- q' f& F8 M* c1 r& g
# 策略参数- C3 A7 y# i1 D2 @9 P: Q; \7 |
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
1 \9 H9 k* x0 `# J: c stage = 0! W) J3 d& H& D* N. h
target_side = "B" # 起手投注庄; o( D5 k4 q1 ~2 o% \/ j
+ K4 E4 F' l0 o- _; { while num_shoes > 0:9 j) M, ^2 S* J5 U8 J0 |
result = deal_hand(shoe)0 A5 e' |6 A5 l0 t0 V& y2 O' r) G! x L
: Q1 U/ W7 C) W- r+ u
if result == 'T':
) S8 V: ]; H: H # 遇到和,不输不赢,重投
$ t: @; f6 z d continue2 P% Q/ o9 {! l! q7 J1 S
A, V p! `/ M) K# {3 q" _" Y) Z) v
bet = sequence[stage]5 y- W B8 b K q6 K# L) P, Z' D$ d
8 }$ A9 L M& I; r! i! I
if result == target_side:+ g! t" F% k. V9 {9 u0 L
# 赢
: ~- z/ C: O- I O0 X. c+ z win_amount = bet( z6 q S$ f* }0 e2 @# z* j
if target_side == "B" and commission_on:+ `) [( J a$ ]2 n4 ]5 s4 r
win_amount *= 0.95 # 庄赢扣5%抽水
; n( f( z3 w' E0 G* c commission_paid += bet * 0.05: a( l- p Z0 p, Y) ]3 h
profit += win_amount/ _3 ^8 x4 F! A
stage = 0 # reset
* W- c( [5 b8 L! t/ w2 N! q! z target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
' P" q* [4 m# ?6 c else:
M( b: O* m. _7 V+ j# l) [ # 输* P" ] M" D1 `& `
profit -= bet
* T0 Q7 g& r5 w* R4 w stage += 1
, O9 ~2 S2 f( U if stage >= len(sequence):1 R2 j& R- J% x M: S/ E. \- Y o
stage = 0 # 断缆reset. D* m4 \0 \: r( I; I
num_shoes -= 10 ^3 j+ q1 S4 `) l
) f$ E% i8 h( x) U return profit, commission_paid
; u" q- e, a3 }0 z3 W& p0 z! K! h7 o. G: L7 N
# 设置命令行解析
, H& W E) C) n6 @8 Adef main():
& g9 g- k& q' f parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
& @1 L+ }4 g( n! {; x parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")# _' y- U6 l0 J( @' ]) K( t+ U
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
/ ~, Z' D3 @+ K+ m5 k4 Y$ P $ [. i a1 U) w- _
args = parser.parse_args()
/ [ m6 X" d; ^* f 6 n- C2 V3 u9 h& r/ Z
# 抽水开关:开启或关闭 M% y# d. T5 w+ C
commission_on = args.commission == 'on'2 H; Z- ~9 M( M0 S, n
6 |7 X- G N! U1 A- q7 w result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on). D- D% T @$ E' `0 [( r' C
print(f"最终盈利: {result:.2f}")3 Q( r: k6 A. s
print(f"累计抽水: {commission:.2f}")7 }% t, T: ^0 H6 x
9 W0 |3 w9 n; ^5 t j, h
if __name__ == "__main__":
V1 i( H# Z5 S main()
. H7 T1 o; S2 O6 Y7 P- F \& F# I, }/ B
4 w* l. ^+ a* y/ p
步骤 2. 运行
4 q+ ], \* C; o9 ^# \ f" B
3 C) P) P1 v6 k5 C' t t在命令行里进入文件所在的文件夹,例如:
/ O$ C5 D9 i3 Y, h/ zcd C:\Users\你的名字\Desktop: `7 H. {" w3 z' g
python baccarat_sim.py3 T1 W- z% D/ k+ q; T: B
8 U+ @5 C ?9 X' W* }6 g输出会显示:
* F0 e' x- l* ?2 A8 C
4 l, m1 y- J3 V3 e累计盈亏: xxx
/ {/ }3 N6 E. u) k) R ]累计抽水: yyy
* S# t, B# f$ Y" g) l0 }-------------------------------------
/ z" d+ W7 Z" Y A7 d2 d, f实例:试跑3次, * i4 j2 d6 R5 E2 t- O5 L; a
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
* ~4 x! K4 Y9 n% _ [0 W$ ^& M: `8 i最终盈利: -5360.35 4 W4 x! E: t7 ?) R, L& |9 [
累计抽水: 5176.35
9 B8 n5 J3 {' A( ]C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py / l2 c+ i: X- @ @# @4 i
最终盈利: -5661.65
& y! {# C) B3 t* j( K累计抽水: 5174.65 # O& D: K9 F6 \3 U" \1 ?, T9 q1 h
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ( `6 F, ]4 q8 w( Q) i
最终盈利: -4244.50 $ X3 Y$ s8 a4 i* h/ [- o% }8 X
累计抽水: 5176.50
. \8 h; v5 q$ F; M* y r o* o
2 ~6 z& a2 F6 @7 D' I说明你的 Python 已经能正常跑模拟了。结果也很有参考性:2 j. [3 B4 i" B- b0 X1 W
* `( q* r7 v) M! S9 e
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。' A4 n; e5 n8 v# t6 W
5 L0 A, y) R( z# u
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。% T6 k e8 n' [3 h" s8 {/ U4 \% I
这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
4 S$ `7 n4 w: g人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
( E; ?) G3 x0 i+ W但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。- J' s- n8 e" J. n9 J
8 M& t5 ?: \) X$ ]# R7 E
启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|