|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 - z# T0 W: D2 p6 ~9 {9 A- [6 ~
6 l4 o1 U4 O; v& I! \可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。/ f. m5 F& i: c5 Z8 {
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。8 `, w% {( |5 j% Z T$ q8 ^. T
, K6 A! _% T" w8 s- e在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
7 K) I: f' O! v6 n* n! U2 c假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
: n- f9 i- p, ?7 v先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。( o# v0 G% b" l7 p; Y* x+ D
1 r. w, A* u) J# X7 H# m* n
步骤 1. 新建一个 Python 文件1 A: B; m5 A# B9 j9 g) v
打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
6 Z J6 Z% h5 v把下面的代码复制进去。* ]7 F. S+ E9 L& C) O
保存成 baccarat_sim.py (注意后缀是 .py)。
8 X0 z! |& M+ _8 P3 Y7 y8 x' g9 B, C( S3 @8 i
import random
9 c! K- ]3 E' h; F9 Vimport argparse
/ E. [# X+ r$ ~; U9 [
: s9 S! v% F6 V n8 R( I/ f# 初始化鞋子
! X/ `0 n8 W0 }* ?9 N ~def init_shoe(decks=8):
# {& H! d, E' N( K9 n # 每副牌52张,8副共416张8 ~* x, `& u9 q* Z) V& x6 y
shoe = []
. r' S: X" A% c, m- q. d' a for _ in range(decks):
, b" B$ n) i t4 J9 X6 f shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
$ m4 j3 X2 x4 [. J random.shuffle(shoe)# T% z O M3 A" b! {- l+ _
return shoe( v$ ~9 H, ~2 \1 v2 H0 l
5 {' R: Z% d; s- V# 发一手* \; r8 M, }! f
def deal_hand(shoe):: V" }+ o8 l; \( {$ p1 l( ], r7 j
if len(shoe) < 6:1 z$ e$ y. ~- I+ K
shoe[:] = init_shoe()
@: p3 P# W3 Y' C) s) e2 X return shoe.pop()
5 X$ J3 S% K7 P6 X- Y
8 n. B1 L! `5 D: R$ n# 模拟下注法 A' i$ o+ D3 N* n; S* q8 [3 J
def simulate_strategy_A(num_shoes=1000, commission_on=True):6 m6 L) x, _; o+ K8 h
profit = 02 _" h+ K' H6 T/ I$ ^
commission_paid = 0# z# G% I0 ?! p; `0 r
shoe = init_shoe()
) Z: s3 @+ H) j g; e
3 q0 j. b' D' x) t3 d, u% b) Y/ ]8 y& P, x # 策略参数
! Y" q/ _9 K1 U2 I ? sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级% A5 o4 _( X& `0 V( m+ v8 w
stage = 0& Y6 F; C- E; U; x
target_side = "B" # 起手投注庄
- q1 u4 J5 A8 @6 [* U* Z9 N5 B4 \
+ O! X2 V2 O4 ^. O! P0 ~ while num_shoes > 0:3 y- \0 v( z7 V+ Q; l# c |
result = deal_hand(shoe)
& ~6 x. c/ g1 @3 y3 D
! _1 Y$ V4 i% C if result == 'T':
/ F! `! k! h( G: U! t # 遇到和,不输不赢,重投
* l. t ?2 R z: m! e6 }% Z# ? continue+ ]# b8 s% I2 W& T) N
7 |0 a. |6 D6 n$ `
bet = sequence[stage]
" U+ u- q7 a/ _" ~: ` }
7 f: I2 p& j7 j% B if result == target_side:
% s7 P( ]/ ]$ |4 i. ~% g/ m2 Y. }; R # 赢
9 l: j- o" R) v" x win_amount = bet
- ]6 Z0 D. J+ ]. q8 y if target_side == "B" and commission_on: p- m, z: a: j& X+ q. x
win_amount *= 0.95 # 庄赢扣5%抽水5 t% R$ B8 B' R) _0 W; x+ ?. u8 l
commission_paid += bet * 0.05
2 k" k1 v- \/ b* K u9 |/ G profit += win_amount# l* p# ?8 M' i5 M0 _, { |6 D
stage = 0 # reset
. N/ P. k& R {, V3 w9 U/ e target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定); f' p0 }# O- S+ F
else:1 w5 ]$ x$ W; z8 C5 z9 D6 n+ F
# 输
7 Z* F$ o) d, u; B6 _- { profit -= bet
$ P/ l0 J1 O' }2 h. B' I4 P* h$ N stage += 1; i1 Q3 \9 z, e. Y% h3 p0 d
if stage >= len(sequence):( K0 R$ l. j& G
stage = 0 # 断缆reset& ]. m; \6 Z+ [9 n' w
num_shoes -= 1- `& ~- O! a {1 v# n
, i" n/ V: h7 S# B/ ` \ return profit, commission_paid- O% t. M/ N4 k! |: e; D w
1 B+ Q0 J6 ^ b1 Q# 设置命令行解析5 ?& M0 g4 y) X, f! C$ V9 ?
def main():
. _6 u; p' n' ^2 e parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
p8 B6 G; l2 T3 k parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")
# `. i- h4 V& }0 o parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")
9 n/ g+ E- H8 O5 Y% r* J. e ' ]0 l( K8 p# [: Q4 l0 w* z8 f
args = parser.parse_args(); m3 f# L* q* d) Q- k- X9 }
$ d9 \& {1 G6 c. Q" R # 抽水开关:开启或关闭/ V! e G& d7 h2 @
commission_on = args.commission == 'on'5 M* ]/ [' O: j6 O; \* D. i* u
: { V7 B" W8 J" f2 ]
result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
+ P7 @7 I! S8 k" h print(f"最终盈利: {result:.2f}")
6 J; b* W$ w4 O/ l i `1 p* z+ J print(f"累计抽水: {commission:.2f}")
+ |$ h" Y7 N) l+ G, a! d+ E3 C
" a$ A5 A, w. t8 E$ g; v/ t1 \if __name__ == "__main__":
9 W5 K% S+ `# R& X main()
- x% k" i: k( T2 K0 w& s" c! c
/ z' ~$ H- M- E- m8 P
7 g, y( W% W" O* ~- [1 M步骤 2. 运行9 U% B% u, n7 u& F& h- M
2 }( C' v5 R: U
在命令行里进入文件所在的文件夹,例如:. f2 u$ U2 D; ^( b' u
cd C:\Users\你的名字\Desktop) j5 f6 S2 B& J6 m
python baccarat_sim.py
& s( U; l5 E% X# W% R
* X' _ S( S+ @输出会显示:
. w$ T5 O2 F/ b5 P7 S8 D3 I9 L' M( m7 _5 R }' e0 f6 i2 p
累计盈亏: xxx9 e! P: l* f: z4 S
累计抽水: yyy. ~% R [* L6 ^/ A# T/ o
-------------------------------------
" Y" j% n1 R2 E- l. N1 t4 A4 Y实例:试跑3次,
# F. W& [5 h4 VC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ' Q6 y* B, e" D3 X9 L/ d' V) O
最终盈利: -5360.35 / p; ~9 u& p% c4 w
累计抽水: 5176.35 Q' p, z+ x4 f/ @ [
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py ; W- R5 d! Q2 T+ M
最终盈利: -5661.65
* H! Z" X$ |7 B* y& S1 V累计抽水: 5174.65 * n+ \6 \, C: H: I' ~' ]
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
- P) Y1 i* M/ z. V4 F最终盈利: -4244.50 1 B, \2 J. v+ ]! p
累计抽水: 5176.50. v% l2 u( O5 `9 v
' r" ^# [9 d( X6 h3 ^说明你的 Python 已经能正常跑模拟了。结果也很有参考性:6 m9 W+ l6 h- X# d: Q$ _ \. b6 K7 e5 Y; S
. O7 ~. J6 D! Z& Z8 d
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
% C) K* B) O Q1 Z3 @7 F$ O4 t9 y! Z! Y- P- o/ t/ c
最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
4 @$ ~/ ^) c3 x5 }这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。! r; h# ?- U8 t* S, T2 j
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
5 u" K4 r5 s" r) T4 M0 r. G但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。4 S' d0 S2 D$ f" O( ]9 z& ^2 P% @( F: {
% z- P$ T& E o: H启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|