专享策略06 | 盘口策略CTP实盘版

 量化策略开发,高质量社群,交易思路分享等相关内容

『正文』

ˇ

大家好,我们在6月29日发布了盘口策略| 回测版,今天我们做好了CTP的实盘版本供俱乐部会员使用和玩耍,今天主要说明一下如何使用CTP实盘版本。

先回顾一下策略逻辑和模块:

策略逻辑

1.开仓条件:多头堆积次数大于X做多,空头堆积次数大于X做空.互为正反手。

2.固定止损:以开仓价格的百分比计算止损价。

3.跟踪止盈:以吊灯方法跟踪价格计算出场线。

策略逻辑非常简单,没有那么多弯弯绕。这也是我非常喜欢它的地方,不用动脑子。订单流策略不同于传统技术指标策略,它无法预测信号。如果是MACD或者KDJ,你甚至可以预判到是否会交叉,但是订单流不行。它是基于最小颗粒度计算的主动买卖力量,只能等到它出现你才知道。

策略模块

  1. 通过tick(或逐笔)数据计算of数据

  2. 基于of数据计算堆积信号或其他指标

  3. 合成堆积信号为bar数据进行回测

  4. 基于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年俱乐部最重要的一个策略,这个月我的小账户做好穿透后会在群内实盘测试,把最新的测试结果分享给大家,共同迭代。

本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。

猜你喜欢

转载自blog.csdn.net/m0_56236921/article/details/131653456