优化杠杆下涨停处理和换仓逻辑 (#1)

This commit is contained in:
binz 2024-05-26 22:57:38 +08:00
parent 767ee1c503
commit de6953c0d7
1 changed files with 10 additions and 4 deletions

View File

@ -368,7 +368,7 @@ class Trader(Account):
continue
else:
sell_list.append(stock)
if len(sell_list) >= int(max_trade_num * margin_ratio) + 1:
if len(sell_list) >= int(max_sell_num * margin_ratio) + 1:
break
next_margin_list = list(set(last_margin_list) - set(sell_list))
# 更新非融资融券池
@ -384,27 +384,31 @@ class Trader(Account):
continue
else:
sell_list.append(stock)
if len(sell_list) >= max_trade_num:
if len(sell_list) >= max_sell_num:
break
next_normal_list = list(set(last_normal_list) - set(sell_list))
# ----- 买入 -----
# 卖出后持仓列表
after_sell_list = set(last_position.index) - set(sell_list)
max_trade_num = min(max_trade_num, self.num-len(last_position)+len(sell_list))
cant_buy_list = [] # 涨停股记录
# 融资融券池的和非融资融券池的分开更新
# 更新融资融券池
for stock in margin_list:
if stock in after_sell_list:
continue
else:
if stock_status.loc[stock] in [4,6]:
cant_buy_list.append(stock)
next_margin_list.append(stock)
if len(next_margin_list) == margin_needed:
if len(next_margin_list) >= margin_needed:
break
# 更新非融资融券池
for stock in normal_list:
if stock in after_sell_list:
continue
else:
if stock_status.loc[stock] in [4,6]:
cant_buy_list.append(stock)
next_normal_list.append(stock)
if len(next_normal_list) >= self.num - margin_needed:
break
@ -417,6 +421,8 @@ class Trader(Account):
next_position = next_position.set_index(['stock_code'])
next_position.loc[next_margin_list, 'margin_trade'] = 1
next_position = next_position.reset_index()
# 剔除无法买入的涨停股,这部分仓位空出
next_position = next_position[~next_position['stock_code'].isin(cant_buy_list)]
# 检测当前持仓是否可以交易
frozen_list = []
if len(self.position) > 0: