2025-06-11 14:40:22
胜率设置:35.0%
胜利赔率:2.5倍
最大下注比例:50.0%
下注降低比例:70.0%
下注增长比例:1.3倍
最小下注金额:1
马丁格尔策略:
平均最终资金: 0.00
最高最终资金: 0.00
最低最终资金: 0.00
爆仓次数: 100 次,爆仓率: 100.00%
反马丁格尔策略:
平均最终资金: 3137.26
最高最终资金: 3904.19
最低最终资金: 2352.77
爆仓次数: 0 次,爆仓率: 0.00%
"""
"""
马丁格尔策略 vs 反马丁格尔策略模拟程序
需求说明:
1. 模拟两种博彩策略的效果对比
- 马丁格尔策略:输了就加倍下注,赢了降低下注(而不是重置为初始赌注)
- 反马丁格尔策略:赢了就加倍下注,输了降低下注(而不是重置为初始赌注)
2. 核心参数:
- 初始资金:100
- 初始赌注:1
- 每线程游戏次数:10000次
- 线程数量:100个
- 胜率:可调整(默认40%)
- 赔率:可调整(默认1.5倍)
- 最大下注比例:资金的20%
- 降低下注比例:示例降低50%
- 加倍下注比例:示例2倍
- 最小下注金额:0.1
3. 风险控制:
- 单次下注不超过当前资金的指定比例
- 资金为0时停止游戏并记录为爆仓
4. 统计输出:
- 平均最终资金
- 最高/最低最终资金
- 爆仓次数和爆仓率
- 支持多线程并发模拟
"""
import threading
import random
# 参数配置
INITIAL_CAPITAL = 100 # 初始资金
INITIAL_BET = 1 # 初始赌注
COIN_FLIP_TIMES = 10000 # 每线程抛硬币次数
THREAD_COUNT = 100 # 线程数量
WIN_PROB = 0.35 # 胜率,示例40%
WIN_ODDS = 2.5 # 胜利赔率,示例1.5倍
MAX_BET_RATIO = 0.5 # 最大下注比例,示例20%
BET_REDUCTION_RATIO = 0.7 # 降低下注比例,示例降低30%
BET_INCREASE_RATIO = 1.3 # 加倍下注比例,示例1.3倍
MIN_BET = 1 # 最小下注金额
# 结果存储
results_martingale = []
results_anti_martingale = []
martingale_busts = 0
anti_martingale_busts = 0
lock = threading.Lock() # 多线程锁,保护共享变量
def simulate(strategy_type):
global martingale_busts, anti_martingale_busts
capital = INITIAL_CAPITAL
bet = INITIAL_BET
for _ in range(COIN_FLIP_TIMES):
# 检查是否有足够资金继续游戏
if capital < MIN_BET:
with lock:
if strategy_type == 'martingale':
martingale_busts += 1
else:
anti_martingale_busts += 1
capital = 0
break
# 应用最大下注比例限制
max_bet = capital * MAX_BET_RATIO
bet = min(bet, max_bet)
# 确保下注不超过当前资金
actual_bet = min(bet, capital)
win = random.random() < WIN_PROB
if win:
capital += actual_bet * WIN_ODDS
if strategy_type == 'anti_martingale':
bet *= BET_INCREASE_RATIO
else: # martingale策略
bet = max(bet * BET_REDUCTION_RATIO, MIN_BET)
else:
capital -= actual_bet
if strategy_type == 'martingale':
bet *= BET_INCREASE_RATIO
else: # anti_martingale策略
bet = max(bet * BET_REDUCTION_RATIO, MIN_BET)
# 无论是否爆仓,都记录最终资金
with lock:
if strategy_type == 'martingale':
results_martingale.append(capital)
else:
results_anti_martingale.append(capital)
threads = []
for _ in range(THREAD_COUNT):
t1 = threading.Thread(target=simulate, args=('martingale',))
t2 = threading.Thread(target=simulate, args=('anti_martingale',))
threads.extend([t1, t2])
for t in threads:
t.start()
for t in threads:
t.join()
print(f"胜率设置:{WIN_PROB*100:.1f}%")
print(f"胜利赔率:{WIN_ODDS}倍")
print(f"最大下注比例:{MAX_BET_RATIO*100:.1f}%")
print(f"下注降低比例:{BET_REDUCTION_RATIO*100:.1f}%")
print(f"下注增长比例:{BET_INCREASE_RATIO}倍")
print(f"最小下注金额:{MIN_BET}\n")
print("马丁格尔策略:")
if results_martingale:
print(f"平均最终资金: {sum(results_martingale) / THREAD_COUNT:.2f}")
print(f"最高最终资金: {max(results_martingale):.2f}")
print(f"最低最终资金: {min(results_martingale):.2f}")
else:
print("无数据")
print(f"爆仓次数: {martingale_busts} 次,爆仓率: {martingale_busts / THREAD_COUNT * 100:.2f}%")
print("\n反马丁格尔策略:")
if results_anti_martingale:
print(f"平均最终资金: {sum(results_anti_martingale) / THREAD_COUNT:.2f}")
print(f"最高最终资金: {max(results_anti_martingale):.2f}")
print(f"最低最终资金: {min(results_anti_martingale):.2f}")
else:
print("无数据")
print(f"爆仓次数: {anti_martingale_busts} 次,爆仓率: {anti_martingale_busts / THREAD_COUNT * 100:.2f}%")
2025-04-01 10:51:58
SELECT
pid,
usename,
application_name,
client_addr,
query_start,
state,
query
FROM
pg_stat_activity
WHERE
state = 'active' -- 只查询正在执行的查询
AND query_start < NOW() - INTERVAL '5 minutes' -- 筛选出执行时间超过5分钟的查询
ORDER BY
query_start;
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE
state = 'active'
AND query_start < NOW() - INTERVAL '5 minutes';
2025-01-09 18:48:54
echo 'export PYTHON_BUILD_MIRROR_URL=https://registry.npmmirror.com/-/binary/python' >> ~/.bashrc
source ~/.bashrc
rye可以自定义源,自定义源有限官方源,参考:https://rye.astral.sh/guide/sources,所以:
code ~/.rye/config.toml
[[sources]]
name = "aliyun"
url = "https://mirrors.aliyun.com/pypi/simple"
2024-07-11 12:06:04
首先,你得理解为什么浏览器要限制跨域:
所以,浏览器限制了跨域请求。
问:那么,我们开发时,想要访问线上接口怎么办?
答:我们可以用 vite 之类 nodejs 的代理功能,通过代理访问线上接口,代理一词的意思是我们访问本地的接口,代理服务器通过本地程序(非浏览器)转发到线上接口。
问:如果我们确实有线上项目的跨域请求的需求怎么办?
答:我们可以在服务器设置 Access-Control-Allow-Origin ,将我们自己人加入白名单。
2024-06-21 10:24:40
最近反思自己为什么老亏?以下为反思内容:
为什么大家在下跌的时候会焦虑,而有些人反而开心?根本可能在于自己的投资是否建立在安全边际之内。
如何通过资金管理建立安全边际?
举一个例子,假设投资以上证指数为参照,上证的筑底点位为 2400-3600 点,我们可以在 3000 点建立 70%,如果下降到 2400 时逐步升级到 90%,如果下降到 2400 以下的时候观望等待复苏,始终保持 10%的现金。如果逐步上升到 3600 点时降低到 50%仓位。股市到 3600 点以上时,我们逐步抛出剩余 50%。这样我们至少有 50%的仓位是能获取 600 点的收益的。
安全边际还有很多,比如现金流,股息,国资,垄断,品牌,创始人等等。
结论:我们大部分的投资都应该构建在安全边际之内。
群友问:
“如果你买的是个股,大部分人大盘 3000 到 2400 时亏的不止 600 点,大盘 2400 回到 3000 赚不到 600 点,所以“至少有 50%的仓位是能获取 600 点的收益”这个概率得降低。”
答:
所以需要结合其他几条,选择有安全边际的位置和投资标的。思路差不多。
比如我通过技术分析,发现化工行业可能已经达到筑底区域,那么我接下来继续重点选择化工行业的股票,为了提高安全边际,那么我选择股息率大于 3%(不涨就继续持有吃股息),近三年 roe 都大于 8%(保证有钱能吃股息),最好是国资(老板卖公司概率降低),现金流充沛(能持续发展,发股息),行业趋向回暖(比如煤炭石油降价受益标的),然后首先投入 50%的资金,等待发展下跌持续加仓,这时候越跌你是越开心的,因为可以吃到更多的低位筹码了。最后,能不能赚钱,就靠老天爷赏口饭吃了。。。
以上只是思考的思路,未经验证。请勿作为投资依据。
2024-04-05 13:57:15
小时候最有意思的事情莫过于跟着堂哥抓鱼捉兔,堂哥是我们那一片丘陵中这个领域数一数二的好手,每次跟他出去都能有收获,哪怕我这完全啥都不懂的小白,也能跟着涨点见识,吃点荤。
农忙过后的秋天是狩猎野兔的好时机,我和堂哥会翻过一座由一座丘陵的山,寻找兔子踪迹。
在山谷的池塘边的山路上,听堂哥分析野兔的脚印应该是几天内还是几天前留下的;
在一片被啃过的菜地边,听堂哥分析野兔的家在哪里,通过哪里来到这里,是不是经常来;
在一堆沙土上,看着一堆圆圆的粪便,我们猜测这个兔子是今年的头窝,还是一条可能有四五斤的老兔子,年轻的往往往大说,年长的只是笑笑,可能还会偶尔用特殊的音调回一句“还不止”。。。
而这些分析完后,剩下的就简单了,我们就会在野兔的必经之路上,装上手工打造的套子或则买来的夹子,装好后做一些掩盖,然后奔赴下一个可能的山谷。。。
========故事结束============
“但凡经过,必留下痕迹”
这是我当前总结的量化的基础原理,个人没有强大的计算资源,无法像气象台预测天气一样预测经济,也没有精力通过高频交易加以对冲,我们只能通过那些小兔子留下来的痕迹,抓些倒霉的小兔子。
我们可以选择在气象台警告台风即将降临时不出海,
我们可以选择在禁渔期过后立马跑出去捞第一网,
我们可以选择只在我们熟习的海域撒网;
我们可以选择寻找一片还没有人到达的海域。。。
“市场和狩猎不同的是,这里我们即是猎人,更可能是小野兔子。”
"我们也不能守株待兔,历史往往不是简单的重复。"