量化策略开发,高质量社群,交易思路分享等相关内容
『正文』
ˇ
大家好,我们在6月29日发布了盘口策略| 回测版,今天我们做好了CTP的实盘版本供俱乐部会员使用和玩耍,今天主要说明一下如何使用CTP实盘版本。
先回顾一下策略逻辑和模块:
策略逻辑
1.开仓条件:多头堆积次数大于X做多,空头堆积次数大于X做空.互为正反手。
2.固定止损:以开仓价格的百分比计算止损价。
3.跟踪止盈:以吊灯方法跟踪价格计算出场线。
策略逻辑非常简单,没有那么多弯弯绕。这也是我非常喜欢它的地方,不用动脑子。订单流策略不同于传统技术指标策略,它无法预测信号。如果是MACD或者KDJ,你甚至可以预判到是否会交叉,但是订单流不行。它是基于最小颗粒度计算的主动买卖力量,只能等到它出现你才知道。
策略模块
-
通过tick(或逐笔)数据计算of数据
-
基于of数据计算堆积信号或其他指标
-
合成堆积信号为bar数据进行回测
-
基于CTP实时生成OF数据及信号(实盘版)
回测报告
条件设置是:堆积大于5次,正反手,固定止损0.005,固定止盈0.01
回测已经调整好了手续费和滑点,具体品种要针对设置,这也是BackTrader麻烦的地方。为了避免偷价,我们用上一个Bar固定的信号判断,用本根bar的开盘价进行交易。这个回测是沪镍1分钟,回测的时间是2023年1月-6月。
可以点击《盘口策略 | 交易中最重要的是什么?》了解详情
实盘版
实盘版本与回测版的区别在于实时数据传过来时针对数据录入,周期聚合,指标计算,保存读取等模块进行了修改,同时也做了部分优化。交易模块的条件,参数与回测版一致。
模块介绍
该程序的主要目的是处理Tick数据并生成交易信号。代码中定义了一个tickcome函数,它接收到Tick数据后会进行一系列的处理,包括构建Tick字典、更新上一个Tick的成交量、保存Tick数据、生成K线数据等。其中涉及到的一些函数有:
1.on_tick(tick): 处理单个Tick数据,根据Tick数据生成K线数据。
2.tickdata(df, symbol): 处理Tick数据,生成K线数据。
3.orderflow_df_new(df_tick, df_min, symbol): 处理Tick和K线数据,生成订单流数据。
4.GetOrderFlow_dj(kData): 计算订单流的信号指标。
除此之外,代码中还定义了一个MyTrader类,继承自TraderApiBase,用于实现交易相关的功能。
交易函数解释
#下单函数
| insert_order(self, exchange_id, instrument_id, order_price, order_vol, direction, offset_flag)
| 录入报单请求。将订单结构体参数传递给父类方法ReqOrderInsert执行。
| :param exchange_id:交易所ID。
| :param instrument_id:合约ID。
| :param order_price:报单价格。
| :param order_vol:报单手数。
| :param direction:买卖方向。
| (‘买 : 0’,)
| (‘卖 : 1’,)
| :param offset_flag:开平标志,只有SHFE和INE区分平今、平昨。
| (‘开仓 : 0’,)
| (‘平仓 : 1’,)
| (‘强平 : 2’,)
| (‘平今 : 3’,)
| (‘平昨 : 4’,)
| (‘强减 : 5’,)
| (‘本地强平 : 6’,)
| :return:
开多
|self.insert_order(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'],1,b'0',b'0')
开空
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['BidPrice1'],1,b'1',b'0')
卖平-平多
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['BidPrice1'],1,b'1',b'3')
买平-平空
self.insert_order(data['ExchangeID'], data['InstrumentID'], data['AskPrice1'],1,b'0',b'3')
运行步骤
1.在future_account填写你的模拟账号:
future_account = get_simulate_account(
investor_id='', # 账户
password='', # 密码
server_name='电信1', # 电信1、电信2、移动、TEST、N视界
subscribe_list=[b'ni2308'], # 合约列表
)
如果是穿透好的实盘账号,用下面这个完整的future_account :
future_account = FutureAccount(
broker_id='', # 期货公司BrokerID
server_dict={'TDServer': "ip:port", 'MDServer': 'ip:port'}, # TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port。"
reserve_server_dict={}, # 备用服务器地址
investor_id='', # 账户
password='', # 密码
app_id='simnow_client_test', # 认证使用AppID
auth_code='0000000000000000', # 认证使用授权码
subscribe_list=[], # 订阅合约列表
md_flow_path='./log', # MdApi流文件存储地址,默认MD_LOCATION
td_flow_path='./log', # TraderApi流文件存储地址,默认TD_LOCATION
)
默认的品种是'ni2308'
2.class MyTrader是交易策略,可以修改相关的交易设定。默认的跟踪出场参数0.01,固定出场参数是0.005,开仓堆积默认是5(具体品种具体调整)。
3.调整交易周期是在def tickdata函数里的bardata变量的rule参数,默认是1T(1分钟),可以自行调整交易周期,代码里已经做了聚合处理。
4.运行程序,交易开始:
注:SIMNOW的模拟数据并不适合跑tick数据策略,它的价格没什么我问他,但是成交量有问题。比对之后发现,模拟的量数据比较稀薄。因此不建议用SIMNOW测试,可以尝试接真实的行情,交易用SIMNOW模拟双进程做,但是模拟的交易结果可能存在延迟,所以我打算小资金实盘测试了。
松鼠Quant日内图表
盘口策略是按照Bar线走完交易,很多人误解为是逐tick的高频策略,其实不是。专享06主要是用盘口数据计算出主动强弱的分歧指标,然后去抓一个波段的小周期趋势。它也不是传统意义上的CTA策略,其信号的出现并没有固定规律和特点。订单流策略不同于传统技术指标策略,它无法预测信号。如果是MACD或者KDJ,你甚至可以预判到是否会交叉,但是订单流不行。它是基于最小颗粒度计算的主动买卖力量,只能等到它出现你才知道。
专享06是2023年俱乐部最重要的一个策略,这个月我的小账户做好穿透后会在群内实盘测试,把最新的测试结果分享给大家,共同迭代。
本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。