欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件交易策略发布专区 → 【高频策略】利用挂单价差实现高频交易的策略

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有23628人关注过本帖树形打印复制链接

主题:【高频策略】利用挂单价差实现高频交易的策略

帅哥哟,离线,有人找我吗?
大侠鸟
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:28 积分:115 威望:0 精华:0 注册:2012/12/31 16:47:14
【高频策略】利用挂单价差实现高频交易的策略  发帖心情 Post By:2015/9/24 23:03:22 [显示全部帖子]

策略原理:

高频交易的种类很多,比如我们常见的跨期套利,通过一个合约的2个相近的月份2个合约,通过价差波动的相关性进行套利,实现稳定盈利的目的。

本文通过另外一种高频交易模式,即同一个品种的买卖价差来实现盈利。    

以IC00为例,我们通过一个简单公式在分笔周期上就能出买一和卖一价差每天都会有大量的价差波动,并且从分析上讲机会很多,例如:

 测试公式如下:

挂单价差:BIDPRICE - ASKPRICE; 

 

效果图


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150924223702.jpg
图片点击可在新窗口打开查看

 

通过上面的效果图不难看出,只要我们在点差较大时能同时持有多空双方的2个头寸,就会像套利一样锁定了利润空间,待价差缩小后就可以实现平仓盈利。

 

利用VBA制作的模型源码如下:

 

'订阅数据,这里范例订阅IC00合约
Sub APPLICATION_VBAStart()
 marketdata.RegReportNotify "IC00", "ZJ"
 call application.SetTimer(1,500)
End Sub

BuyOrder = 0
SellOrder = 0
HoldOk = 1
ModeStatus = 0 '0无持仓 1持仓状态

Sub MARKETDATA_ReportNotify(ReportData)
 '计算挂单价差
 Diff = ReportData.SellPrice1 - ReportData.BuyPrice1
 If ModeStatus =0 And HoldOk = 1 Then
     if Diff >= 5 Then
        '当价差达到5个价位时,触发交易
        'application.MsgOut "diff"&diff
         HoldOk = 0
         ModeStatus = 1
         '使用钓鱼方式挂单,比现有价格优惠一个变动价位,然后等待市场客户卖出给你
   BuyOrder = Order.Buy(0,1,ReportData.BuyPrice1+0.2,0,"IC00","ZJ","",0)
   SellOrder = Order.BuyShort(0,1,ReportData.SellPrice1-0.2,0,"IC00","ZJ","",0)
  End If
 End If
 
 If ModeStatus = 1 And HoldOk = 1 Then
     If Diff <= 0.4 Then
      '当价差缩回去时,市价平掉仓位
      'application.MsgOut "diff2"&diff
         HoldOk = 0
      ModeStatus = 0
   BuyOrder = Order.Sell(1,1,0,0,"IC00","ZJ","",0)
   SellOrder = Order.SellShort(1,1,0,0,"IC00","ZJ","",0)
  End If
 End If
End Sub

 

'收到成交回报后对标志位进行处理
Sub ORDER_OrderStatusEx2(OrderID, Status, Filled, Remaining, Price, Code, Market, OrderType, Aspect, Kaiping, Account, AccountType)
 OkThis = 0
 If Status = "Tradeing" Then
 If OrderID = BuyOrder Then
     OkThis = 1
     BuyOrder = 0
 End If
 
 If OrderID = SellOrder Then
    OkThis = 1
    SellOrder = 0
 End If
 
 If BuyOrder = 0 And SellOrder = 0 And OkThis = 1 Then
  HoldOk = 1
  
 End If
 End If
 
 '下面的是不成交的追单处理模式
    if status="Cancelled" and  remaining>0  and Holdok=0 then
              if aspect=0 then       
              if kaiping=0 then                 
                 BuyOrder = order.Buy(1,remaining,0,0,Code,market,Account,0)              
               else                  
                SellOrder = order.sellshort(1,remaining,0,0,code,market,Account,0)
              end if
           end if
              if aspect=1 then
              if kaiping=0 then
                 SellOrder = order.Buyshort(1,remaining,0,0,code,market,Account,0)
               else                 
                  BuyOrder = order.sell(1,remaining,0,0,code,market,Account,0)
               end if
           end if
     end if
 End Sub

 

'定时器,用于处理挂单的不成交追单,这里不考虑价格是否合适,使用时还请用户自己更改算法
sub application_timer(id)
    IF ID =1 THEN
    for i=0 to order.OrderNum2-1
    call order.OrderInfo2(i, OrderID, ConSign, Filled, Remaining, Action, OrderType, LmtPrice, Account, Kaiping, Code, Market)
          OrdTime=right(Order.OrderInfoTime2(i),8) 
               aa=Datediff("s",OrdTime,Cdate(time))
              'application.MsgOut "ordtime="&aa
              'application.MsgOut "cdsj="&cdsj
          if aa-2>=0 then
             '超过间隔指定的秒数,
           Call Order.CancelOrder(OrderID,account)
          end if
     next
     end if
END SUB


 

该高频的模型目前还仅在雏形阶段,需要解决如下几个问题:

1,测试时是根据中金所IC品种的常规手续费进行的,如今平今手续费奇高,所以对IC品种已经不适合,用户需要找其他交易所的合适品种,适合该高频模式的品种需要比较大的合约价格,因为只有合约比较大了后才会出现较大挂单价差,另外一个就是该合约的交易量即不是很大也不是很小,很大的交易量势必导致套利空间缩小,较小的流通性又会导致频繁的开仓单腿问题存在。

2,由于是钓鱼方式开仓挂单,容易出现单腿情况,因此范例代码未考虑如何去解决单腿问题及单腿后的更多问题,本文仅起到抛砖引玉的作用,需要用户自行去完善了

 


 回到顶部