|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑 ( U! j# B$ s1 Y. f: Q
6 u7 q/ r5 f1 ]8 s
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。% d2 Q% j- f' j. Y- F* Y3 Z
Excel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。
) x5 w3 g5 c* c: w, h% Q9 @% |; n `4 p4 ]9 t
在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
4 a( ^4 D5 ^! g" {- o假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。. b# Q7 T* X, f* q- I, _
先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。4 ~9 P2 s) J5 {
8 W* k4 O! t/ u; U步骤 1. 新建一个 Python 文件
% m/ u0 h. r2 }& J5 ^/ Q: z! f打开记事本(或 VSCode、Notepad++ 都行,我用记事本)1 J2 b) s5 N2 w7 [
把下面的代码复制进去。
4 p; x" _" @% F! R7 K8 N保存成 baccarat_sim.py (注意后缀是 .py)。' o. Q ~7 ^0 i) ^1 k+ h$ T
7 E/ v' h8 b/ \
import random
, C$ C) R$ ^8 D8 d; f3 }8 G jimport argparse; b% Q$ p; L' c
$ k0 M* y$ \0 v( K
# 初始化鞋子
2 M. P: ~5 `& B. \4 j* Z8 b, [def init_shoe(decks=8):
2 ^* C+ u. R) K( u2 d9 o h% O2 Y # 每副牌52张,8副共416张* [* @" v' S6 D
shoe = []
7 _% i, F0 B7 y; U1 W for _ in range(decks):
u# n- u \# ]$ P' b4 n* h2 r* H shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4
f7 Y: \ d# } random.shuffle(shoe)
4 l6 A$ r8 K* I3 x- a1 U2 b) s/ M5 t return shoe- T$ X- q* c# Q D
/ d5 S5 j+ a; T( I
# 发一手
2 r# q- n* q* V7 C( C7 Rdef deal_hand(shoe):; o# K! z# g3 H* U/ C1 L
if len(shoe) < 6:+ L2 m9 A( x P
shoe[:] = init_shoe()
) j$ E8 S3 M3 a s return shoe.pop()
3 {) `' t6 F' E1 v6 v4 l# J7 I' R
X! }; a) s. G# 模拟下注法 A
3 {+ @$ r1 x9 K3 L' Y: F4 Sdef simulate_strategy_A(num_shoes=1000, commission_on=True):4 K0 s: u, m |& O% n
profit = 00 x3 A! p$ d, h: c8 u6 j3 }
commission_paid = 0
0 `- g8 o/ C4 c shoe = init_shoe()% K5 c- f- l4 }% Y
) Y5 g6 W5 e$ s- B # 策略参数
4 ~! F3 f# t; j0 z' m sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级5 p' w6 M# b2 j
stage = 00 [9 T/ t/ I% x$ g8 J/ _1 t
target_side = "B" # 起手投注庄1 _3 _! L4 p( ]' j: l
6 H- r% h0 J) w S+ Q& i while num_shoes > 0:
. t2 d* ~; g& S/ V result = deal_hand(shoe)
6 G5 @- V) i; {8 L' g! R5 U& v* I0 b" c' G: F- X, e9 m
if result == 'T':
9 p- x W t) V4 G5 x! r/ A+ | # 遇到和,不输不赢,重投
' M) C, n p! h, O) j2 |" E continue
# @) S5 z- _, h( ?$ ?. ]1 ~. P% f) Z5 V9 s* N `" R
bet = sequence[stage]) y r/ M, }. s" G
3 f+ d% Q. k/ }2 o
if result == target_side:% R6 g- U6 F6 O& R$ |/ A) M# {
# 赢
1 l1 J) {3 I; o* B& V win_amount = bet
+ }6 o' g5 h5 G7 } if target_side == "B" and commission_on:$ e* z! _8 F5 A0 a, B4 F$ F$ W
win_amount *= 0.95 # 庄赢扣5%抽水& s+ j5 m7 @3 M
commission_paid += bet * 0.05/ u2 \% T+ d" k \5 F' h
profit += win_amount. D# D) A" c' ]' d5 X" W
stage = 0 # reset3 O! ^/ X6 Z5 Y
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定)
- [; s' j8 c# v3 y! \# ]4 ? else:
4 h9 D5 J9 a* q # 输
$ m) Q3 I6 z3 \5 P3 l8 Y' N profit -= bet
# l, L# o. `! t9 J" b$ | stage += 18 }% m+ `: u7 Q& F! t1 \
if stage >= len(sequence):3 J! ]( i0 u( c% I8 u
stage = 0 # 断缆reset
. J: o9 |9 H# H. B: R) D num_shoes -= 1
j+ u5 I( r" ?# ~$ R* v: g# `( E* @* [2 p& w% q% J% m8 o" F! W
return profit, commission_paid
" n+ p0 Y6 m6 r! ^2 i1 l u. B" q
# 设置命令行解析) ?, c0 O2 `" W- n* z/ g
def main():9 r6 T x2 ~# }) i3 s
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")
: R ^* s. T# O- h parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")% y I% e; t% M. S3 \' I- Y9 `' Z
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")* s8 }/ n7 b0 g. V7 D. z: c7 W
2 s0 z9 [, q6 c* m5 e
args = parser.parse_args()
' r C6 | u2 a1 j* x. ]9 ^& i
5 n* g, K0 W p0 V# _ # 抽水开关:开启或关闭* Q3 _5 U7 E( \! F7 Q4 \9 Q& Z
commission_on = args.commission == 'on'5 z# `0 x: I. ?0 x a7 @5 L$ L
1 n% O# w3 w6 ?& J5 e: K result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)
' J7 U8 ]6 Y+ O% Y. R print(f"最终盈利: {result:.2f}")# t5 V$ M3 k* c! `$ f5 }! r8 F Y
print(f"累计抽水: {commission:.2f}"), o' s' a* G9 H, T5 V3 P
" l3 c, S7 W4 H. k s
if __name__ == "__main__":! j3 p4 |; u9 U
main()1 \& | W, d' Y: E1 _% _
! F! ~8 H! M3 S1 {) X
/ w$ e6 m* k0 k- C4 ^3 D' ~ N
步骤 2. 运行
}7 q. e& |, y, k$ N+ ]
; \+ {* d4 f8 H6 _ ]9 h' O0 }在命令行里进入文件所在的文件夹,例如:" f" _# N/ ~& w5 h# S
cd C:\Users\你的名字\Desktop
; Y s1 y4 {) \: M+ j/ h: Cpython baccarat_sim.py
8 a6 ]- ~0 t) F, w8 X. c- W; V
* W- Z) [+ j, @; i" p输出会显示:/ I4 Q- O0 T/ ~8 |" N
$ L5 K1 a4 u- F5 V& F) I! ?9 m
累计盈亏: xxx
! c O5 y0 e) W( i7 b累计抽水: yyy
, w: A$ C, U5 w7 b. G' U9 h-------------------------------------
+ U' f4 ]9 K, I4 g# M) R3 U* d; l实例:试跑3次,
- _+ |2 { Z$ A/ {8 \5 NC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
( [" x3 h7 F" L2 x- R最终盈利: -5360.35
2 K6 j0 W9 V) c2 N5 t/ N累计抽水: 5176.35 ( u5 [* x/ r+ Q0 J4 k
C:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
; f" L6 H: O1 Y0 A! t7 n/ r最终盈利: -5661.65 3 i8 @5 ~ _! I- D- I, C4 ~
累计抽水: 5174.65
- x4 s, {$ |6 H' b) KC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
7 |: F/ @, e6 k最终盈利: -4244.50
+ f/ R; j5 }3 A7 V: N& Y累计抽水: 5176.50
v1 d) L( V1 H, ?+ K. s* w# Y+ l( d$ }/ t: ~8 B$ x) ?
说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
8 |/ R; T/ h: m# ~+ I9 w% o, u/ C1 i
累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。
# A) w2 s) Z3 o# N6 a: J+ u& r0 v
0 ~6 P$ v1 H( R; {最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
5 `4 G: {8 J7 H% @这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。1 D. _5 H8 v' X$ D1 C7 G2 e7 c
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。* k) |4 ^' r4 Y6 p7 l+ e- F, v
但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。
% ]% Q$ H% d: |% D4 X6 q
$ f5 U! y1 Y9 a! W. ?启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|