以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://weistock.com/bbs/list.asp?boardid=2) ---- 使用SaveData产生新合约后,新合约的数据一直不正确 (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=88286) |
-- 作者:bage -- 发布时间:2015/12/10 13:41:57 -- 使用SaveData产生新合约后,新合约的数据一直不正确 代码如下: 功能就是读取旧合约RB00的白盘数据,保存到新合约RB15中。 但是现在出现了问题,就是新合约Rb15的K线的时间总是不正确。 现在怀疑historyData的saveData功能是否有问题,还请帮忙查看下。 \'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\' \'项目名称:白盘自定义合约 \'功能:自定义品种套利 \'开始时间:2015年12月9日 \'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\' private nInstDefineID,nInstDefineTime private dNewInsts,dNewInstsMarket,dOldInstsMarket,vOldInst,vNewInst Sub Application_VBAStart() nInstDefineID=3 \'自定义合约定时器ID nInstDefineTime=1 \'自定义合约定时器刷新时间 nCycle = 1 \'周期类型,0 1分钟 1 5分钟 2 15分钟 3 30分钟 4 60分钟 5日线 6周线 7月线 8年线 9多日线 10分笔成交 11多小时线 12多秒线 13多分钟线 14季度线 15半年线 16节气线 17 3分钟 18 10分钟 19 多笔线 \'定义新合约 Set dNewInsts = CreateObject("Scripting.Dictionary") Set dNewInstsMarket = CreateObject("Scripting.Dictionary") Set dOldInstsMarket = CreateObject("Scripting.Dictionary") \'dNewInsts.add "IF00","IF15" \'dNewInstsMarket.add "IF15","ZJ" \'dOldInstsMarket.add "IF00","ZJ" dNewInsts.add "RB00","RB15" dNewInstsMarket.add "RB15","SQ" dOldInstsMarket.add "RB00","SQ" vOldInsts=dNewInsts.keys vNewInsts=dNewInsts.Items \'设置历史数据共享内存模式。0:共享。1:独享 \'marketdata.HistoryDataMode=1 For j=0 To dNewInsts.Count-1 sOldInst = vOldInsts(j) sNewInst = vNewInsts(j) sOldInstMarket = dOldInstsMarket.Item(sOldInst) sNewInstMarket = dNewInstsMarket.Item(sNewInst) \'查看对应的新合约是否存在,如果不存在,则新创建合约 If marketdata.IsExistStock(sNewInst,sNewInstMarket)=0 Then call marketdata.AddStock(sNewInst,sNewInstMarket, sNewInst) End If Set HistoryNew = marketdata.GetHistoryData(sNewInst,sNewInstMarket,nCycle) \'清空新的合约数据 For i=0 to HistoryNew.Count-1 HistoryNew.RemoveAt(i) Next Call HistoryNew.SaveData(sNewInst,sNewInstMarket,2) application.MsgOut "--------" & HistoryNew.count \'循环老合约数据,发现是白盘的数据,则插入到新合约中 Set HistoryOld = marketdata.GetHistoryData(sOldInst,sOldInstMarket,nCycle) nBegin = 0 If HistoryOld.Count-300<0 Then nBegin = 0 Else nBegin = HistoryOld.Count-300 End If For i=nBegin to HistoryOld.Count-1 Step 1 sDate=HistoryOld.Date(i) \'2015/12/9 15:00:00 \'如果是白盘数据,则加入到新合约历史数据中 If IsBaiPan(sDate)=1 Then Call HistoryNew.InsertAt(HistoryNew.Count) \'用老合约的i行数据更新新合约的最新一条数据 UpdateByHistoryData HistoryNew,HistoryOld,i application.msgout "count=" & HistoryNew.Count & " date=" &HistoryNew.date(HistoryNew.Count-1) End If \'IsBaiPan(sDate)=1 Next \'i=nBegin to HistoryOld.Count-1 Step 1 Call HistoryNew.SaveData(sNewInst,sNewInstMarket,2) Next Set History11 = marketdata.GetHistoryData("RB15","SQ",1) application.msgout "---date=" &HistoryNew.date(HistoryNew.Count-1) application.msgout "---count=" &HistoryNew.Count-1 \'Call Application.SetTimer(nInstDefineID,nInstDefineTime*1000)
End Sub Sub Application_Timer(ID) \'application.msgout "===" If ID=nInstDefineID Then \'设置历史数据共享内存模式。0:共享。1:独享 \'marketdata.HistoryDataMode=0 vOldInsts=dNewInsts.keys vNewInsts=dNewInsts.Items For j=0 To dNewInsts.Count-1 sOldInst = vOldInsts(j) sNewInst = vNewInsts(j) sOldInstMarket = dOldInstsMarket.Item(sOldInst) sNewInstMarket = dNewInstsMarket.Item(sNewInst) Set HistoryNew = marketdata.GetHistoryData(sNewInst,sNewInstMarket,2) Set HistoryOld = marketdata.GetHistoryData(sOldInst,sOldInstMarket,2) \'对比新、老合约最后一条数据的时间是否一样,如果一样,则更新新合约的数据。否则,新增新合约一条数据 sDateOld = HistoryOld.Date(HistoryOld.Count-1) sDateNew = HistoryNew.Date(HistoryNew.Count-1) If sDateOld<>sDateNew Then Call HistoryNew.InsertAt(HistoryNew.Count) End If UpdateByHistoryData HistoryNew,HistoryOld,HistoryOld.Count-1 Call HistoryNew.SaveData(sNewInst,sNewInstMarket,2) Next End If End Sub Function IsBaiPan(sDate) \'2015/12/9 15:00:00 IsBaiPan = 0 iPos1 = InStr(1, sDate, " ", vbTextCompare) If iPos1=0 Then IsBaiPan = 0 Else vDate = Split(sDate," ") sTime = vDate(1) If CDate(sTime) >= CDate("09:00:00") and CDate(sTime) <= CDate("15:30:00") Then IsBaiPan = 1 \'application.msgout sDate End If End If End Function Sub UpdateByHistoryData(byref HistoryNew,byref HistoryOld,i) HistoryNew.Open(HistoryNew.Count-1) = HistoryOld.Open(i) HistoryNew.High(HistoryNew.Count-1) = HistoryOld.High(i) HistoryNew.Date(HistoryNew.Count-1) = HistoryOld.Date(i) HistoryNew.Low(HistoryNew.Count-1) = HistoryOld.Low(i) HistoryNew.Close(HistoryNew.Count-1) = HistoryOld.Close(i) HistoryNew.Volume(HistoryNew.Count-1) = HistoryOld.Volume(i) \'HistoryNew.Amount(HistoryNew.Count-1) = HistoryOld.Amount(i) \'HistoryNew.Advance(HistoryNew.Count-1) = HistoryOld.Advance(i) \'HistoryNew.Decline(HistoryNew.Count-1) = HistoryOld.Decline(i) HistoryNew.Qt(HistoryNew.Count-1) = HistoryOld.Qt(i) HistoryNew.Openint(HistoryNew.Count-1) = HistoryOld.Openint(i) \'HistoryNew.OpenV(HistoryNew.Count-1) = HistoryOld.OpenV(i) \'HistoryNew.OpenA(HistoryNew.Count-1) = HistoryOld.OpenA(i) HistoryNew.ASKPRICE(HistoryNew.Count-1) = HistoryOld.ASKPRICE(i) HistoryNew.ASKVOL(HistoryNew.Count-1) = HistoryOld.ASKVOL(i) HistoryNew.BIDPRICE(HistoryNew.Count-1) = HistoryOld.BIDPRICE(i) HistoryNew.BIDVOL(HistoryNew.Count-1) = HistoryOld.BIDVOL(i) End Sub |
-- 作者:yukizzc -- 发布时间:2015/12/10 14:29:22 -- 验证中 |
-- 作者:bage -- 发布时间:2015/12/10 16:17:39 -- 还有结果了吗?? |
-- 作者:yukizzc -- 发布时间:2015/12/10 17:03:03 -- 还没,代码比较多,还请客户耐心等待 |
-- 作者:yukizzc -- 发布时间:2015/12/10 17:32:36 -- 上期品种的行情时间是从1点到19点 您在金字塔时区下看下rb00的k时间就明白了 |
-- 作者:bage -- 发布时间:2015/12/11 8:48:51 -- 金字塔时间是没问题的,但是切换到北京时间,时间完全就不准 了。 而且我们交易都是用北京时间的。帮忙看下呢
|
-- 作者:yukizzc -- 发布时间:2015/12/11 10:12:53 -- 数据内部全是用的金字塔时区,你不要用北京时间去考虑内部数据处理这个细节 请用金字塔时区的思维去处理,北京时区只是在你前台看到的一个加壳后的效果 |