[增强功能] 自动对平策略和账号仓位
This commit is contained in:
parent
c5e600ce25
commit
5580336f4b
@ -1230,6 +1230,7 @@ class CtaEngine(BaseEngine):
|
|||||||
self.write_log(f'{strategy_name}返回得K线切片数据为空')
|
self.write_log(f'{strategy_name}返回得K线切片数据为空')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.engine_config.get('snapshot2file', False):
|
||||||
# 剩下工作:保存本地文件/数据库
|
# 剩下工作:保存本地文件/数据库
|
||||||
snapshot_folder = get_folder_path(f'data/snapshots/{strategy_name}')
|
snapshot_folder = get_folder_path(f'data/snapshots/{strategy_name}')
|
||||||
snapshot_file = snapshot_folder.joinpath('{}.pkb2'.format(datetime.now().strftime('%Y%m%d_%H%M%S')))
|
snapshot_file = snapshot_folder.joinpath('{}.pkb2'.format(datetime.now().strftime('%Y%m%d_%H%M%S')))
|
||||||
@ -1469,7 +1470,7 @@ class CtaEngine(BaseEngine):
|
|||||||
value = getattr(strategy, parameter, None)
|
value = getattr(strategy, parameter, None)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def compare_pos(self, strategy_pos_list=[]):
|
def compare_pos(self, strategy_pos_list=[], auto_balance=False):
|
||||||
"""
|
"""
|
||||||
对比账号&策略的持仓,不同的话则发出微信提醒
|
对比账号&策略的持仓,不同的话则发出微信提醒
|
||||||
:return:
|
:return:
|
||||||
@ -1556,10 +1557,40 @@ class CtaEngine(BaseEngine):
|
|||||||
compare_info += msg
|
compare_info += msg
|
||||||
else:
|
else:
|
||||||
pos_compare_result += '\n{}: {}'.format(vt_symbol, json.dumps(symbol_pos, indent=2, ensure_ascii=False))
|
pos_compare_result += '\n{}: {}'.format(vt_symbol, json.dumps(symbol_pos, indent=2, ensure_ascii=False))
|
||||||
|
|
||||||
self.write_error(u'{}不一致:{}'.format(vt_symbol, json.dumps(symbol_pos, indent=2, ensure_ascii=False)))
|
self.write_error(u'{}不一致:{}'.format(vt_symbol, json.dumps(symbol_pos, indent=2, ensure_ascii=False)))
|
||||||
compare_info += u'{}不一致:{}\n'.format(vt_symbol, json.dumps(symbol_pos, indent=2, ensure_ascii=False))
|
compare_info += u'{}不一致:{}\n'.format(vt_symbol, json.dumps(symbol_pos, indent=2, ensure_ascii=False))
|
||||||
|
|
||||||
|
diff_volume = round(symbol_pos['账号净仓'], 7) - net_symbol_pos
|
||||||
|
# 账号仓位> 策略仓位, sell
|
||||||
|
if diff_volume > 0 and auto_balance:
|
||||||
|
contract = self.main_engine.get_contract(vt_symbol)
|
||||||
|
req = OrderRequest(
|
||||||
|
symbol=contract.symbol,
|
||||||
|
exchange=contract.exchange,
|
||||||
|
direction=Direction.SHORT,
|
||||||
|
offset=Offset.CLOSE,
|
||||||
|
type=OrderType.MARKET,
|
||||||
|
price=0,
|
||||||
|
volume=round(diff_volume,7)
|
||||||
|
)
|
||||||
|
self.write_log(f'卖出{vt_symbol} {req.volume},平衡仓位')
|
||||||
|
self.main_engine.send_order(req, contract.gateway_name)
|
||||||
|
|
||||||
|
# 账号仓位 < 策略仓位 ,buy
|
||||||
|
elif diff_volume < 0 and auto_balance:
|
||||||
|
contract = self.main_engine.get_contract(vt_symbol)
|
||||||
|
req = OrderRequest(
|
||||||
|
symbol=contract.symbol,
|
||||||
|
exchange=contract.exchange,
|
||||||
|
direction=Direction.LONG,
|
||||||
|
offset=Offset.OPEN,
|
||||||
|
type=OrderType.MARKET,
|
||||||
|
price=0,
|
||||||
|
volume=round(-diff_volume, 7)
|
||||||
|
)
|
||||||
|
self.write_log(f'买入{vt_symbol} {req.volume},平衡仓位')
|
||||||
|
self.main_engine.send_order(req, contract.gateway_name)
|
||||||
|
|
||||||
# 不匹配,输入到stdErr通道
|
# 不匹配,输入到stdErr通道
|
||||||
if pos_compare_result != '':
|
if pos_compare_result != '':
|
||||||
msg = u'账户{}持仓不匹配: {}' \
|
msg = u'账户{}持仓不匹配: {}' \
|
||||||
|
Loading…
Reference in New Issue
Block a user