|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 ' K' @- n9 O7 Y
9 z8 f# u7 b3 o! s可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。; T3 s- K. t" [
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。8 ]9 Z& k6 L' R1 u8 |" Y
% A& ?$ B& Z0 @
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)* X8 y$ X& r& X, L3 J8 y" g. ?
假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
/ ^8 {$ ^! t# G先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。( P; F' P# b' k( c
6 I$ U9 ^" r/ e3 w# S! o
步骤 1. 新建一个 Python 文件
' \4 s! W2 V6 Y' E, F. P打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
% l2 ?7 U8 o& Z( _3 X1 O+ |把下面的代码复制进去。
. u% _6 L$ H8 o8 \& Z保存成 baccarat_sim.py (注意后缀是 .py)。% g! X0 N% i! ]3 j9 Q3 H# p
" ?. F6 r% \8 F: K+ O; ~
import random- d, w8 m! @3 `4 z. C2 {
import argparse6 Z- Y# G6 S; f2 i3 w m( |
( q( C: ^, A w' e( x" |" N! D6 }. T# 初始化鞋子
% y# ?6 t: t' edef init_shoe(decks=8): v2 q( \. M" y
# 每副牌52张,8副共416张1 W. n/ f1 I! W. J. _5 \8 U3 \" m
shoe = []
% L" o5 d) o, c6 a) R: w( c for _ in range(decks):
4 M$ o" r* ]& j. _" t/ w shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
. f& j1 Q( Z$ X3 v3 P' l( O% S* } o random.shuffle(shoe)/ p- c5 H/ u3 M2 Q! j2 E! ^
return shoe
& t7 ] u) g5 |# {5 P# G( N$ ? ]9 R* F8 l2 U/ M6 X6 n
# 发一手1 s1 h4 d: M- N- R
def deal_hand(shoe):
- p4 D2 R8 m2 l1 e$ i3 H- O$ [6 H- D if len(shoe) < 6:- Y1 }6 S+ n+ b+ X6 T6 t7 l" a9 G
shoe[:] = init_shoe()5 o: b9 u& x. u8 z0 m, m
return shoe.pop()
5 A% q% d0 w- V0 j6 C8 _
5 }3 O4 { i& l# 模拟下注法 A
: a2 M9 q$ g7 G9 R& ^, H8 u- u6 Kdef simulate_strategy_A(num_shoes=1000, commission_on=True):
5 K6 T$ u+ i0 d profit = 0
! F' K$ q3 l* g8 p1 P% o commission_paid = 0, l, S5 [/ l5 o
shoe = init_shoe(); A- Y4 u. B. w6 y h+ L
! x* U0 D. `( ~4 p$ E # 策略参数! t# l: x- G- o$ b/ y
sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级
3 q8 k+ T; n- [ stage = 0* p1 M' p- x0 K) K! I% j
target_side = "B" # 起手投注庄
+ E7 D( D- f+ ~" B- n& s# q6 p$ L. q( |2 ~
while num_shoes > 0:
! T1 V# ?. b* M& |2 z( T/ Q$ |# k ? result = deal_hand(shoe)' x; ~' w" f7 n" c+ G- k- B; [
! e/ }- _; d. W8 P$ Q/ f) T if result == 'T': 1 U, z0 R1 d, R
# 遇到和,不输不赢,重投. E7 @1 z6 |6 K5 n3 J6 I
continue
6 d' h8 o/ ~" ]& S3 P$ D% [9 {9 F7 \, Q( v' @5 u
bet = sequence[stage]
9 t! Q7 c+ d" }3 N. k 3 ^6 s& E' S8 s" D5 z& s. E) E
if result == target_side:
( I$ t' q. d4 r* z" a # 赢5 d8 R- w g, o6 z1 N: I8 Q( d5 I
win_amount = bet
; \% R$ B* J& s8 d! _ if target_side == "B" and commission_on:" @) N' \, ]4 D* j* P
win_amount *= 0.95 # 庄赢扣5%抽水2 p& |% @7 n3 b. m& V. O6 f5 t# K
commission_paid += bet * 0.05
5 V) @ D! n& K8 ^! w profit += win_amount
2 W J4 L6 C: ~; O* @5 l stage = 0 # reset
, L3 K* |4 M( W/ S target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)' u) h! A F% H O* p; n
else:/ Y a3 a1 l1 ]: I$ C
# 输 F+ I" ~) e. |
profit -= bet; P9 o( R& f: W+ A1 a
stage += 1& ?, V, A# o! G5 V. ] t
if stage >= len(sequence):6 n) o2 j. S2 Y
stage = 0 # 断缆reset+ {& }+ {9 L" ?$ ?; j
num_shoes -= 1
# r8 L5 v; n5 \$ d, S" ^ C
% b% P" K; b2 c; @ return profit, commission_paid
3 P7 b' r8 P" x% W& b" [, w* }! h5 K, N+ k0 [5 y# o0 Q
# 设置命令行解析
: l+ B, {3 w pdef main():
' H, O+ U6 j( T8 t7 O! n parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
; @( @. N1 B& i) ?1 L; u/ R parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")2 V; D W& E8 d' s. m
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
9 h* R( I2 \( o# L4 [/ m, v
0 }% {; @# C* P. K( q args = parser.parse_args()
; a/ w! [, o, w6 Q+ q: ^0 @2 B2 B
0 H+ T. [& p b1 G( }. I # 抽水开关:开启或关闭' v+ M% y; j$ f" {9 t# o# E
commission_on = args.commission == 'on'
* C( N' c" v( l9 k! B8 A( ^" E8 J/ x ) D& D& X% F6 O4 B9 O
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)7 h: M. f+ V' ^7 i: w" z
print(f"最终盈利: {result:.2f}") i+ L* G3 i$ j& u2 w' |
print(f"累计抽水: {commission:.2f}"): F0 X( s. M l: s0 k& T
' j$ Y$ a" w& e" Nif __name__ == "__main__":
- Z* g$ b/ ], H( p2 G& z* C& ~# M. c main()/ v8 j& [: m2 I2 a" P0 `4 D
( [8 V+ j7 q, J
$ v {7 c3 y9 @2 ?, ~! J步骤 2. 运行
7 m+ I6 T5 k4 y6 o: b2 I* n+ h) P% V( g, S6 Y% D4 \; R- e
在命令行里进入文件所在的文件夹,例如:+ D# Y9 _( w+ M0 R& D N! Q+ P
cd C:\Users\你的名字\Desktop! T1 s* ~, R$ x! W7 F% P
python baccarat_sim.py! [: O3 f2 D3 }& l& e
( `7 F" a2 @/ m6 k输出会显示:5 q# i+ {2 z0 w! R/ t
& i4 a5 G5 u. T) A" T% K8 }
累计盈亏: xxx
3 Y. f9 W* V! ?, p* p累计抽水: yyy( x! A- u0 y( F' N( L o8 ?& H% i. E7 t: |
-------------------------------------
: c0 A& [: @/ V& x0 T5 E4 T% l实例:试跑3次,
- x7 X- T& |' |8 ^2 q% c+ |) |C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
2 P% i9 p) o. ]6 _5 v最终盈利: -5360.35 ' @) u# ^6 \2 ]+ d/ n0 i" G
累计抽水: 5176.35
$ {/ W6 b1 ]! C$ p" `& {4 F3 L! nC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py : V) c8 H a* A8 t9 H
最终盈利: -5661.65 / x; U9 f# t& `: b
累计抽水: 5174.65
4 V7 `) {# C& a2 a% ` [C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ' a7 p1 b8 q$ y' Z, C; o
最终盈利: -4244.50
]3 I1 ^5 C# m1 z! _ ~! B累计抽水: 5176.50
+ }& {6 i/ e4 p: _# r6 T
7 M( Y \' [$ i$ m( h" p说明你的 Python 已经能正常跑模拟了。结果也很有参考性:" h% v+ [' g6 b, A
/ h. i' q0 L/ b
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。. n, f( J" o0 d& p
( f' X' W5 G2 s4 s/ l% ?, e
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
+ l, n1 ]; R+ s7 c这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。
4 F5 n/ _7 b% o( f# c3 t) M人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
# i& q! b) S, N6 [+ N1 {但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。3 `, ]; c/ T+ s6 U: C; M
0 U% m$ u( }3 q启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|