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