量化策略开发,高质量社群,交易思路分享等相关内容
『正文』
ˇ
大家好,我是乌克兰剑圣。
在7月份的时候我们发布了第一版盘口策略专享策略06 | 盘口策略CTP实盘版,这个策略写了订单流的核心算法及最基础的交易规则,加入了固定与移动的止损止盈。
今日发布的日内版本在前版基础之上加入了夜盘白盘的收盘清仓、修改了开仓条件,跟踪止损改为跟踪止盈、定时启动程序。同时提供了回测,模拟,实盘三个版本源码。
OK,下面我们来说说修改的部分。
def 收盘清仓(data):
# 获取当前时间
current_time = datetime.now().time()
# 设置清仓操作的时间范围1:14:55到15:00
clearing_time1_start = s_time(14, 55)
clearing_time1_end = s_time(15, 0)
# 设置清仓操作的时间范围2:22:55到23:00
clearing_time2_start = s_time(22, 55)
clearing_time2_end = s_time(23, 0)
# 创建一个标志变量,用于记录是否已经执行过清仓操作
clearing_executed = False
# 检查当前时间是否在第一个清仓操作的时间范围内,并且清仓操作未执行过
if clearing_time1_start <= current_time <= clearing_time1_end and not clearing_executed :
if self.pos>0:
#平多
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['BidPrice1'],1,b'1',b'3')
self.pos=0
print("多头清仓操作")
pass
elif self.pos<0:
#平空
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'],1,b'0',b'3')
self.pos=0
print("空头清仓操作")
pass
clearing_executed = True # 设置标志变量为已执行
# 检查当前时间是否在第二个清仓操作的时间范围内,并且清仓操作未执行过
elif clearing_time2_start <= current_time <= clearing_time2_end and not clearing_executed :
if self.pos>0:
#平多
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['BidPrice1'],1,b'1',b'3')
self.pos=0
print("多头清仓操作")
pass
elif self.pos<0:
#平空
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'],1,b'0',b'3')
self.pos=0
print("空头清仓操作")
pass
clearing_executed = True # 设置标志变量为已执行
# 如果不在任何清仓操作的时间范围内,可以执行其他操作或不执行任何操作
else:
clearing_executed = False
pass
#print("不在清仓操作时间范围内")
回测版本的收盘清仓写法不一,这里是实盘平仓的代码。
#开仓
#多头开仓条件
if self.pos!=1:
if self.pos==-1 and trader_df['dj'].iloc[-1]>self.dj_X :
#self.buy_close(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'],1,True)
print('平空:','ExchangeID: ',data['ExchangeID'],'InstrumentID',data['InstrumentID'],'AskPrice1',data['AskPrice1'])
#平空
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'],1,b'0',b'3')
print('datetime+sig: ', trader_df['datetime'].iloc[-1], '反手平空:', '平仓价格:', data['AskPrice1'],'堆积数:', trader_df['dj'].iloc[-1])
if trader_df['dj'].iloc[-1]>self.dj_X and trader_df['close'].iloc[-1] > rinei_ma and trader_df['close'].iloc[-1]>trader_df['open'].iloc[-1] :
print('开多:','ExchangeID: ',data['ExchangeID'],'InstrumentID',data['InstrumentID'],'AskPrice1',data['AskPrice1'])
#self.buy_open(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'], 1)
#开多
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'],1,b'0',b'0')
print('datetime+sig: ', trader_df['datetime'].iloc[-1], '多头开仓', '开仓价格:', data['AskPrice1'],'堆积数:', trader_df['dj'].iloc[-1])
self.pos=1
self.long_trailing_stop_price=data['AskPrice1']
self.sl_long_price=data['AskPrice1']
#空头开仓条件省略
满足堆积条件后,需要日内均线判断顺势开仓,同时信号BAR必须是同向(多头堆积必须是阳线)。
仅满足堆积条件同时持有反向的持仓,执行反手平仓。
将跟踪出场改为跟踪止盈,只有盈利的情况下触发。
为了保证策略每日变量重置,我们写了一个辅助脚本来全天后自动运行。
回测报告分为隔夜和日内两个模式:
测试参数:
2023年1月1日-6月1日,6个月内(TICK数据合成1M)。
手续费均为实盘费率。
没有优化参数。
尿素(隔夜):
尿素(日内):
白糖(隔夜):
白糖(日内):
纯碱(隔夜):
纯碱(日内):
菜粕(隔夜):
菜粕(日内):
螺纹(隔夜):
螺纹(日内):
花生(隔夜):
花生(日内):
篇幅有限,还有更多的品种小伙伴们下载后自己回测研究吧。隔夜的代码版本是前版,日内的代码就是今天发布的这版,回测用的行情数据在俱乐部后台下载。
PS:9月12日起,松鼠将实盘测试7天订单流日内策略代码,用一个小账户挂在七禾网跑,观看地址在俱乐部发布供学员跟踪研究,最终交付无BUG源码给到俱乐部小伙伴。
同义词 亚努斯(古罗马神话人物)一般指雅努斯
Janus,雅努斯(Janus [1] )是罗马人的门神,也是罗马人的保护神。具有前后两个面孔或四方四个面孔,象征开始。最古老的信息告诉人们,雅努斯是起源神,执掌着开始和入门,也执掌着出口和结束,同时他又被称为“门户总管”,他永远都象征着世界上矛盾的万事万物,所以,他的肖像被画成两张脸,有“双头雅努斯“的说法。
传说中,雅努斯有两副面孔:一副看着过去,一副看着未来。
亚努斯量化-交易图表的主旨是辅助交易者分析行情,把握买卖点,总览市场强弱变化。
目前亚努斯量化交易图表处于内测阶段,俱乐部内部试用。预计10月份正式上线,同时松鼠沙盘订单流图表将合并到亚努斯量化图表里。
本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。