|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
6 B6 Q9 m7 T0 K& W9 G6 A( P
# s2 Q0 p7 s, ?0 V9 o可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。6 V5 O5 {4 g# n
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。6 m. r; {$ n4 V5 Q
: g5 A4 h9 K6 U
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
, ?( V. m1 l; w+ k" O* j% T9 _假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
5 z5 H1 J+ W/ u+ `3 j先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
" ~4 R$ w6 X3 S4 ]' h! v8 N& ]8 _; l* ~; x- t1 b( U
步骤 1. 新建一个 Python 文件
" a" O2 T2 X2 x打开记事本(或 VSCode、Notepad++ 都行,我用记事本)+ @% ^( R. T ~9 x) i
把下面的代码复制进去。
5 k, |; W* k+ O+ X7 T7 z保存成 baccarat_sim.py (注意后缀是 .py)。/ R8 R+ O4 b6 X+ b7 ~* x& s7 `
6 k& z. b' M2 t( Cimport random
$ Y' U, O( u5 ~. \' D* U9 Nimport argparse
: E: t- R9 W! X& j" t" }. V0 `$ ?! O/ `
# 初始化鞋子" |( N+ I c% L5 _1 v2 B9 M% ~
def init_shoe(decks=8):
: n0 m" m: b+ W5 t9 c% u7 M4 A0 r # 每副牌52张,8副共416张
( h) }, k8 v+ c# h% s" [ shoe = []
' A& P$ f8 @4 g+ H for _ in range(decks):% `3 W! P9 k2 u9 K! M+ h g1 w
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
- ~/ G' h% a; K/ m) R random.shuffle(shoe)
) [3 n8 U1 A z4 p* y J return shoe
* |. |2 S. \1 J2 c5 G/ l0 ?; b9 w! F% E3 a1 p. k
# 发一手7 j0 o3 u6 L6 H3 L
def deal_hand(shoe):3 k* s( B. G, S$ a8 Y' n
if len(shoe) < 6:3 x4 c2 K# b7 G3 a: x8 `; [" v9 C
shoe[:] = init_shoe()' J0 r1 c9 K' C* l! t( g1 F
return shoe.pop()! o. m) E9 ~3 ?6 K. Q5 n7 r# n1 x
/ k9 }. m- ?9 i' w% g
# 模拟下注法 A
* R; Q$ x2 q; w ?1 v+ T, Bdef simulate_strategy_A(num_shoes=1000, commission_on=True):6 ^- k/ D0 F, e- ~/ j3 F4 ^
profit = 0, t8 K: u8 n( O9 O- j
commission_paid = 0) w w* p4 M5 |
shoe = init_shoe()! l- z9 G6 D( O2 U/ G
( \1 u4 D$ I5 u* \" S% ]. q # 策略参数
, R5 ^7 b1 B3 w6 h6 R9 V+ a sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级2 Y" o- _$ w! l7 U: u. c( O+ v! p
stage = 0
; d1 o) }2 P& J target_side = "B" # 起手投注庄: p: `1 c1 D: J$ n: U# d
. Y1 r3 {; {8 ]/ f! `4 I while num_shoes > 0:
- D/ b4 f% ~0 b# s1 E2 _ result = deal_hand(shoe)
3 u& J! }6 H. C. v- i1 Q w- I4 Z' w6 c
if result == 'T': " c" P9 A- |* n- w# c8 ^
# 遇到和,不输不赢,重投, e# T+ C0 C1 m- v& o7 E3 R
continue
& ]2 E" }0 y: k; v3 V! x5 {8 \4 _% e
bet = sequence[stage]
4 y# c$ ~0 V4 w$ e/ G0 S2 b
% x2 I4 e- F9 d( y if result == target_side:/ d% s( g- h7 w9 M( Q$ P
# 赢- g: C. t8 ~0 z# C
win_amount = bet
" u( t) h0 U* j/ O# V if target_side == "B" and commission_on:2 ~ ]+ a9 S$ R6 A( V# c
win_amount *= 0.95 # 庄赢扣5%抽水5 z d6 C2 D4 V
commission_paid += bet * 0.05
: E: O7 J) a5 Q profit += win_amount/ m# d2 ]* A0 F7 o; U1 l
stage = 0 # reset
5 ~- L( x6 Q. H- ]! g+ G& k target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)+ C5 n, W9 P4 R* \- u- Z/ g6 z
else:
8 F% k: I, C+ n3 | # 输" J+ ]; n7 ?. \/ f; {
profit -= bet
! x U8 S2 w+ l" Q- o stage += 1- o: B7 F) V5 {$ z q5 F$ I
if stage >= len(sequence):
0 _' P2 ~: u" } stage = 0 # 断缆reset. {' y* }( R% [* r" |
num_shoes -= 1( I" H" p; ^' L _- Y1 Z2 b
, {3 B8 y9 C$ t# N( k0 {0 C- Z
return profit, commission_paid% A% b1 M7 f6 d0 R$ n& S* ^; q
4 w T3 Y# @' I' e# 设置命令行解析- o( D( e& W% M" o0 [# D
def main():7 i7 r/ Z4 P& r9 V0 p- A4 w
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")5 G2 T/ J% E" F6 M! c
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")1 @9 B" V0 X M& A
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")7 C$ a/ n- Y& t* V* R9 {4 [- `
# v% s6 D; B. k5 m( L args = parser.parse_args()' U+ G: V( i8 p- X1 Y/ d
/ f+ t8 s9 L( n4 Y, q # 抽水开关:开启或关闭
0 q: z4 g/ t+ u commission_on = args.commission == 'on'
" R& w s6 d1 U3 ?+ W3 }( l
3 _" c- `% {# f D; K$ V5 t result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)# J( ?- i. I, Q
print(f"最终盈利: {result:.2f}"), p% P( {. l0 e O- Y. u( d
print(f"累计抽水: {commission:.2f}")* H4 \. v& Q: j1 G% g
' @( i% I8 A9 _if __name__ == "__main__": H9 ?" g7 f4 ~6 ~2 j {1 i" K
main()) H* F R* A: [* }% N6 a; m0 c. Q
+ h( \$ f1 h$ t+ o; `
$ x; w2 Q4 T. U6 _% t
步骤 2. 运行7 P" w D. ?! R5 ]1 `; G ~
e6 a# N1 l% i8 H
在命令行里进入文件所在的文件夹,例如:9 L U- ]! ^( |: s+ v/ {; |
cd C:\Users\你的名字\Desktop
- u- d" H/ T) b& t z; tpython baccarat_sim.py1 q' {2 l& m5 z9 |
8 T. f; i' |/ A9 Q0 A: y
输出会显示:
( z) b' }& d) r" ~2 n0 B) ^
% l: C! Y2 Y% {1 y2 R, g# x' \! X" ?累计盈亏: xxx
$ m2 m" e, G5 Q累计抽水: yyy
! C& S9 c' Q5 Z- x! n-------------------------------------
# g9 x. `8 W# S, Y实例:试跑3次,
0 u- o# I' K. ~! z2 cC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
" d" ?$ _2 \/ X9 B8 Q7 t0 N" f, T最终盈利: -5360.35
, ?7 K. S: n1 c X$ A累计抽水: 5176.35 , ?7 t; p0 S. w* [
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
H" _1 Y# C4 [9 f4 C$ f2 n最终盈利: -5661.65 % A0 a; D9 K5 r9 ~- S' i) f
累计抽水: 5174.65
+ }) D* s' |- Z) MC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
) _+ l1 w" c \! o' w# x. u& j/ S. ^最终盈利: -4244.50 6 G; V! M; X/ \2 ]6 s( _* b
累计抽水: 5176.50; b. W, s0 w7 C$ V* @8 ~
9 q2 R# o' f1 ^9 E. t- A8 O
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:7 L# ~6 z2 [0 d
: W1 r' d% h' d# S4 ]$ k/ ~
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
6 d9 ^9 ^, w- C$ \. ?+ |' F6 d
8 [3 w9 k. y, K$ M5 c: |0 a$ b' c最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
; n, }; [, h8 p这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
. a o" u' Q0 X+ _3 |人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。$ y) d$ C3 v) Z0 e6 x# I! B
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
8 d: y' ], v% Y2 N
' [# ]9 |6 i( `0 g0 {, O启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|