以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  套利价差错位  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=151853)

--  作者:林华强
--  发布时间:2017/4/19 10:01:04
--  套利价差错位
我做套利,经常会遇到两个品种由于行情推送速度不同导致了计算价差的异常,因为我用的是上一根K收盘价,请问一下怎样才能在两个品种下一根K线都出来时才计算上一根K线的价差?举例:
CU: 前两根K线9:00:59:999  价格46000    上一根K线9:01:59:999  价格46000       当前K线(下一根)K线9:02:00:010   
                                                                                                                 (速度快的,下一根K线第一笔数据先于NI推送过来)

NI: 前两根K线9:00:59:999  价格80500     上一根K线9:01:59:999  价格80000                    当前K线(下一根)9:02:00:500  
                                                                                                                             (速度慢的,下一根K线第一笔数据后于CU推送过来)
此时我计算价差就会出现错误:当CU下一根K线第一笔数据推送过来时由于NI下一根K线第一笔数据还没推送过来,程序运行就导致NI的上一根K线价格80000其实还没走完,那么计算价差就不是46000与80000相减,而是46000-80500,产生错位了!

--  作者:王锋
--  发布时间:2017/4/19 10:25:17
--  

建议告知你是通过什么方式计算的?

PEL后台?VBA?


--  作者:林华强
--  发布时间:2017/4/19 10:27:03
--  
VBA的,有什么可行的解决办法吗?
--  作者:王锋
--  发布时间:2017/4/19 11:01:41
--  

不是很明白你的意思,你是想只计算2个品种的上一根K线的价差?


--  作者:林华强
--  发布时间:2017/4/19 11:18:21
--  
嗯嗯我要计算的价差是两个品种上一根K线的收盘价相减,但是由于有时候有个品种行情数据推送速度不一样,下一根K线出现有先后,会出现品种1的上一根K线减品种2上上根K线的这种错位情况!
--  作者:王锋
--  发布时间:2017/4/19 11:22:47
--  
最简单的方法就是你记住上根K线上的DATE时间日期,然后实时进行对比,只有当2个日期时间都变化了,说明都产生了新K线。然后再进行计算,计算完毕后再保存最新的DATE变量,进行下一轮比对
--  作者:林华强
--  发布时间:2017/4/20 9:45:09
--  
老师你好,我把两个品种的行情数据推送速度不同的这个问题处理完后,发现避免了这个问题仍然会有价差计算异常的问题。最后发现金字塔在获取历史数据时也存在问题!
2017/4/20  9:32:00这一秒内的两笔数据不一样,正确的应该是第二笔78810,获取到的上一根收盘价,但是第一笔数据却是78840,这是上上根的收盘价。我获取的是行情时间2017/4/20  9:32:00,就是说下一根K线出来了,这两笔应该是一样的。请问这是什么原因呢?而且出现的概率不低,都是在00秒,这样也会带来价差计算的异常!
图片点击可在新窗口打开查看此主题相关图片如下:历史数据.png
图片点击可在新窗口打开查看
private HistoryData1, HistoryData2,diff
Sub TLStart()
    \'"""注册品种"""
  call marketdata.RegReportNotify("NI09","SQ")
    call marketdata.RegReportNotify("AL06","SQ")
End Sub
\'\'###########################################################################     
Sub MARKETDATA_ReportNotify(ReportData)
  \'"""处理行情推送"""
Set Report_NI = marketdata.GetReportData("NI09","SQ")
Set Report_AL = marketdata.GetReportData("AL06","SQ")
if ReportData.Label="NI09" then

    marketdata.HistoryDataMode = 1 \'不同品种为独立的缓冲区
    set HistoryData1 = marketdata.GetHistoryData("NI09","SQ",0,50)
    set HistoryData2 = marketdata.GetHistoryData("AL06","SQ",0,50)
    diff = HistoryData1.close(HistoryData1.Count-2) - HistoryData2.Close(HistoryData2.Count-2)
    application.MsgOut Report_NI.date&"   "&HistoryData1.Close(HistoryData1.Count-2)&"   "&Report_AL.date&"   "&HistoryData2.Close(HistoryData2.Count-2)&"   "&diff
    
    
end if
end sub 

--  作者:王锋
--  发布时间:2017/4/20 9:57:51
--  
请使用 HistoryData1 对象里的日期数组,也建议你在K线图上用十字光标,移动时看一下K线上的对应的时间,了解金字塔的K线时间划分规则