|
|
楼主 |
发表于 2025-10-31 11:15
|
显示全部楼层
本帖最后由 Banker 于 2025-10-31 11:17 编辑
( z2 Z6 s7 l: z- k6 I) j# f- q3 o) `# h) J/ ?
可用Excel,逐手模拟过程(但 Excel 跑不了 100000 靴,会非常卡)。
1 S7 [ k' {$ z/ \( Q( XExcel 更适合 直观小样本测试,Python 才能跑大样本,Python 可以试试N万-1亿靴,10亿靴,有没有没必要?你高兴就好。& Z; I- }8 N6 d5 i9 P2 M9 T
$ a- C4 w/ v+ A# }在你电脑上运行 Python 模拟器 (版本3.0以上,若没有,在Python官网下载安装)
' g: ^; S y# J8 U7 Y假设你已经安装了 Python 3.x(在命令行里输入 python --version 或 py --version 看看有没有)。
; \/ N3 F& S' ? {9 |先写一个最基础的 百家乐投注策略模拟器(自己定义的规则)。
. i' V+ [" J0 o! |' K& a
; t; v2 n3 ^& I {3 j) F& ^( W7 G步骤 1. 新建一个 Python 文件
1 ?6 u5 S0 a/ H% B( e打开记事本(或 VSCode、Notepad++ 都行,我用记事本)
' L/ |6 y3 I3 X4 D7 A* k# S/ y+ _把下面的代码复制进去。
) |' J+ q7 {! F; \+ l保存成 baccarat_sim.py (注意后缀是 .py)。
) @) m0 @! C4 U& s, {) u/ D6 M+ O1 l6 D( h# r9 f8 c# A
import random/ @$ a* A3 a- a* Z/ W
import argparse+ p6 G& ?7 s; @) s
: B1 ~5 x1 a) \4 N, w, i
# 初始化鞋子3 p- c0 R- Q7 S$ B8 J9 E
def init_shoe(decks=8):
; l2 F* S! D; e8 d D& n F: } p1 i # 每副牌52张,8副共416张8 ]3 G' P: O4 @$ z) m% D M
shoe = []) C1 w& G) J- ^5 D P
for _ in range(decks):3 y$ y+ U% F! y
shoe += ['P'] * 24 + ['B'] * 24 + ['T'] * 4 # 简化:庄24, 闲24, 和4, Z- M- G9 J' u9 x" k. I9 c
random.shuffle(shoe)/ I0 C3 D& q G- ~/ l. e6 [
return shoe& E8 e9 J2 Z) O( s4 \/ W
1 r' U/ v& Q9 Y2 z# I- q# 发一手* M8 M2 u0 P2 F" ^/ O
def deal_hand(shoe):
& p1 O" c# Z0 s9 G1 ^+ E0 L if len(shoe) < 6:0 L0 ` `4 u1 n, F$ M$ j
shoe[:] = init_shoe()1 E2 H: r) f+ w7 j9 {
return shoe.pop()3 ]3 l4 n9 u: a; ^' g
3 d& C3 ^% ]( g/ x) X# }# 模拟下注法 A
, r0 V" |6 p- g0 r! n4 bdef simulate_strategy_A(num_shoes=1000, commission_on=True):: Y7 v+ Q8 R/ Z- f, D
profit = 0
) t. e# X' z2 B$ f" l; {( a commission_paid = 0 y% o/ @1 p7 g; R- d
shoe = init_shoe()
$ d# Z4 [$ S8 ~8 M9 M 6 f( F% g0 `& Y
# 策略参数
! N+ z9 i J+ [ sequence = [1, 2, 3, 5, 8, 13, 21] # 示例进级+ v4 } B( m0 }0 b9 L7 e) i( f
stage = 0
3 d. n$ J. v6 T4 a target_side = "B" # 起手投注庄
! c9 Y. {$ p) r! e. q1 g4 Y$ L% u E; K& c
while num_shoes > 0:& t$ u5 U, T8 P% i+ c, w
result = deal_hand(shoe)/ {, c0 Y) U5 u' e. J
8 Z R- {. L; t6 Q3 j6 \1 V
if result == 'T': 2 C* P# ?- i% x
# 遇到和,不输不赢,重投
8 H$ e* Y: W9 ?5 |2 u: P continue2 o6 Q6 W( ^+ l' D4 ?
& Z8 m+ f6 U/ `
bet = sequence[stage]: Y4 ?7 }# A, B! ~0 d( [, X
# s+ {1 o m9 ] if result == target_side:
8 e5 T Q" h% {2 e # 赢
7 f# N& v- T$ e4 J win_amount = bet
, {+ Q6 Q. c/ _7 F0 S" d if target_side == "B" and commission_on:
% w' Z' a" w% K$ r win_amount *= 0.95 # 庄赢扣5%抽水
; z9 F" Y0 d" v; ~ commission_paid += bet * 0.054 _, W& m& K- S4 e; X4 _
profit += win_amount y! i+ i! U# E& N6 k- E. r
stage = 0 # reset% r7 ?4 B( G3 N% y3 ]6 Y
target_side = "B" if target_side == "B" else "B" # 固定庄(A策略固定); h) R9 n! S5 U% O
else:
& T6 h$ ^: O$ ?! \+ |) t+ J' h # 输
2 w* ^; Q; T7 {. |5 F profit -= bet
8 M4 q- O' W& X! H stage += 1& J0 u/ g" C" d! I
if stage >= len(sequence):" Q8 N6 R7 D. i+ _
stage = 0 # 断缆reset% k5 [* w: C8 w7 V6 |& e
num_shoes -= 1
7 s2 ~+ f7 T# y, B: C5 c
/ _& X+ k0 }7 h5 d, c+ i return profit, commission_paid
7 ~" H% }" t% x7 F5 @. d
}' r9 n2 Y) z5 O( N# 设置命令行解析* i6 |5 v" b! R2 y
def main():9 ]( @. Q5 e" |0 N7 M
parser = argparse.ArgumentParser(description="Simulate Baccarat strategy with commission on/off.")- }/ Y+ ?3 A" H C) E0 Y
parser.add_argument('--commission', choices=['on', 'off'], default='on', help="Enable or disable commission on banker wins.")0 x5 J. a' t! ]% g4 j
parser.add_argument('--shoes', type=int, default=1000, help="Number of shoes to simulate.")' p1 P4 b( L; y' |" y6 P9 m/ k) ?
; [2 l+ [1 I2 m! x/ r y args = parser.parse_args()' B* f* w' {. h6 B; y% s. _
{6 } p6 x* j4 q y- H* i+ d9 s # 抽水开关:开启或关闭
2 f) ]; S1 K: G; ?2 I2 [ commission_on = args.commission == 'on'3 V- X7 F( C4 E* _+ p5 p. [
" H# { M' [. g* E0 W- s result, commission = simulate_strategy_A(num_shoes=args.shoes, commission_on=commission_on)7 D' W. R- W" p, w, w+ h
print(f"最终盈利: {result:.2f}"), E6 o( J% M* c
print(f"累计抽水: {commission:.2f}")
3 f3 P7 n# g/ K# M7 K+ k& n5 [! F% y7 @) ^0 M" V
if __name__ == "__main__":0 e. ]6 y) F) A& l6 Q$ w3 V% x
main()7 \. W- X0 `, w
3 X; m8 \8 |( c7 R* R& h" q$ B: ^ T
' J3 B r/ l% ^) u. |步骤 2. 运行, N/ s/ m: y6 S* _: O! Q: S% {, F& b
* X; [1 {! f. s+ b' a1 k
在命令行里进入文件所在的文件夹,例如:6 I, s% M+ U+ _+ i: U
cd C:\Users\你的名字\Desktop E! T# K- @% S, }1 x
python baccarat_sim.py$ S5 D* D" d! T4 b& Q
5 r v7 Y1 L! D; k输出会显示:, R) H5 @. V/ ?: ]3 W& a* Y
. h5 h2 h$ l; a; d累计盈亏: xxx
" M' \2 g$ u5 T累计抽水: yyy; K! {# p! P) W2 p# R6 {
-------------------------------------
% |. r5 k3 Y4 f% ]! g实例:试跑3次,
! D4 T' O3 }+ w: W3 CC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
2 |/ u) M/ N- W# W' h5 _最终盈利: -5360.35 9 [% z1 m0 H+ m% h. m3 C9 w
累计抽水: 5176.35
# U1 I0 g5 F {" w' _# cC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
2 g* z' ?4 g) x* m最终盈利: -5661.65 " P9 J" t `% m( }
累计抽水: 5174.65
5 l+ C5 |- _) R" F& TC:\Users\Shenhua\Desktop>F:\胜者为王\66-58研发\baccarat_sim.py
, W/ ?4 h3 b6 o8 V# x/ k3 F0 a最终盈利: -4244.50 ( A5 m6 ^) X5 c- K
累计抽水: 5176.50
# f4 a) C5 H2 r- K
J7 f8 A- I9 r# `4 u9 q# u7 U+ [说明你的 Python 已经能正常跑模拟了。结果也很有参考性:
9 v1 X6 u7 K6 f; `; u0 W1 X+ g* Y
$ L- ?/ t3 P6 y, D7 A' }8 k& [累计抽水固定在 ~5175 左右 → 这和你设置的「抽水开关 ON」一致,因为你每手下注金额相同(例如 8 单位),程序是按 Banker 抽 5% 计算的,所以长期下来,抽水会稳定在一个范围。# Q! m& h- v# O6 |* u8 y
6 o) J1 x3 e+ K8 r最终盈利为负数(-5360、-5661、-4244)→ 这说明在 100,000 局的模拟中,哪怕加上和局不计,下注方向固定,数学期望依然是亏损。
: c: ~6 N% B. T. Q8 n这条缆不能直接用,用了会输。必须改缆法,或改缆法并且改下注规则。6 c0 [+ b. B2 T5 r. A
人们喜欢举例盈利,有吸引或牛逼的效果。。。用亏损的例子,可以真实告诉你,道阻且长不容易。
5 U# R0 i) Z- h" L- R% ^# Y但是别沮丧,办法总比困难多。只是,你自己悟的,是最好的。3 N: R9 {/ z0 h% |. A
" J- X5 E4 j+ t- @: n启发,,,可以变更缆法,改变庄闲比例,指定胜负路。。。。(待续) |
|