@0xtao 我修复了4点:
1.买入持仓计算逻辑有问题,实盘偶尔会出BUG;
2.14点20分和14点55分两次买入会触发ERROR;
3.使用context.portfolio.ponsition[stock]查询,如果股票空仓会触发WRANING;
4.各股断板离场、个股止损后没有加入缓冲池,容易短期快速二次买入利润回吐;
● ---
1. 买入金额计算逻辑
V22:
def buy_security(context,target_list,cash=0,buy_number=0):
target_num = g.stock_num
if cash == 0:
cash = context.portfolio.total_value # 用总资产
if buy_number == 0:
buy_number = target_num
V23:
def buy_security(context,target_list,cash=0,buy_number=0):
target_num = g.stock_num
if cash == 0:
cash = context.portfolio.available_cash # 改用可用资金
if buy_number == 0:
buy_number = target_num - len(context.portfolio.positions) # 动态计算
---
2. 14:20/14:55 两次买入防ERROR
V22:
for stock in g.yesterday_HL_list:
if context.portfolio.positions[stock].closeable_amount > -100:
current_data = get_price(...)
V23:
for stock in g.yesterday_HL_list:
if stock in context.portfolio.positions: # 先检查持仓是否存在
if context.portfolio.positions[stock].closeable_amount > -100:
current_data = get_price(...)
---
3. 空仓查询加防护
V22:
for stock in g.hold_list:
if (stock not in target_list) and ...:
position = context.portfolio.positions[stock]
close_position(position)
V23:
for stock in g.hold_list:
if stock in target_list:
continue
if stock in context.portfolio.positions: # 先检查持仓
position = context.portfolio.positions[stock]
close_position(position)
---
4. 断板/止损加入缓冲池
V22:
close_position(position)
log.info("[%s]涨停打开,卖出" % (stock))
g.reason_to_sell = 'limitup'
V23:
close_position(position)
g.loss_black[stock] = context.current_dt # 新加入缓冲池
log.info("[%s]涨停打开,卖出" % (stock))
g.reason_to_sell = 'limitup'
止损逻辑同样新增了这行代码。
2026-03-03