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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → TestReport 在日线以下周期交易时间的疑问

   

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


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

主题:TestReport 在日线以下周期交易时间的疑问

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


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2014/1/29 15:08:45
TestReport 在日线以下周期交易时间的疑问  发帖心情 Post By:2015/2/15 6:35:16 [只看该作者]

能否帮忙看看下面的代码中在窗体中输出的K线周期是否符合实际的交易日期?其他品种包括橡胶之类的我也有同样的疑问.谢谢!




PEL公式
ma5 := ma(c,5);
ma10 := ma(c,10);
ma20 := ma(c,20); 
StopLossValue : ma20;     //,nodraw;


KD:= cross(ma5,ma10) and ma5>=ma20;          //开多条件
PD:= cross(ma10,ma5);                              //平多条件
KK:= cross(ma10,ma5) and ma5<=ma20;          //开空条件
PK:= cross(ma5,ma10);                           //平空条件

开多条件: KD,nodraw;
开空条件: KK,nodraw;
平空条件:PK AND holding<>0,nodraw;
平多条件:PD AND holding<>0,nodraw;

平空:SELLSHORT(PK,1,THISCLOSE);                  //平空信号
开多:BUY(KD AND HOLDING=0,1,THISCLOSE);          //开多信号
平多:SELL(PD,1,THISCLOSE);                       //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE);     //开空信号

持仓:holding,linethick0;
资产:asset,noaxis;
可用现金:cash(0),linethick0;


Flag:holding,linethick0;//表示当前账户持仓量
FlagPrice:enterprice,linethick0;//开仓成交价
Bars:if (type(1)=1 or type(1)=3,enterbars,exitbars),nodraw; //type(1)为 1 或者 3为开多或者开空

{
信号语句排列规则——先平后开
“费率设置”按钮——用于合理设置模型“费率”,以便在图形上正确输出如下帐户信息:

持仓:holding,linethick0;
资产:asset,noaxis;
可用现金:cash(0),linethick0;

您可以在查看菜单->交易系统模板 中设置自己需要的模板
}





VBS公式 


'===============================
'使用PLE语言做为信号,VBA进行测评
'===============================

sub VbaTest
     '输入选项
     InitalCapital=15          '起始资金XX万
     startdate="2014-1-1"     '测试起始日期
     finishdate="2015-1-1"     '测试结束日期
    
    
     '以下开始正式测试,不需要修改
     Testreport.StartAndInit '开始测评系统的准备工作
     Testreport.InitCash=InitalCapital*10000 '初始资金由万转为元
    
     Set Formula = marketdata.STKINDI("CU13","SQ","MA交易范例()",0,4) '调用上期所CU13合约的60min线自定义指标
     'Set Formula = marketdata.STKINDI("CU13","SQ","MA交易范例()",0,3) '调用上期所CU13合约的30min线自定义指标
     'Set Formula = marketdata.STKINDI("CU13","SQ","MA交易范例()",0,2) '调用上期所CU3合约的15min线自定义指标
    
     Set HistroyData = Formula.ParentGrid.GetHistoryData '直接得到公式区的数据对象,提高运行效率
    
    
     for i = 0 to 4     '将msgout与之前的数据隔开,便于观察
          application.MsgOut "     "   
     next
     application.MsgOut "HistoryData:"&cstr(HistroyData.count)
     application.MsgOut "Formula.DataSize:"&Formula.DataSize
     application.MsgOut "Formula.GetBufDateData(0):"&Formula.GetBufDateData(0)
     application.MsgOut "Formula.GetBufDateData(Formula.DataSize-1):"&Formula.GetBufDateData(Formula.DataSize-1)
    
    
     'tempvar= cdate(startdate)
     'application.MsgOut "Start date:"&tempvar&" HistoryData起始日期:"&Formula.GetBufDateData(0)     '看看是否是转换成为了日期格式
    
     '查找在Formula中的起始日期序列号
    
     '判断测试起始日期是否正确
     if Formula.GetBufDateData(Formula.DataSize-1)< cdate(startdate) then
         MsgBox "起始日期不正确"
     end if
    
     '判断测试结束日期是否正确
     if Formula.GetBufDateData(0)> cdate(finishdate) then
         MsgBox "结束日期不正确"
     end if
    
     '确定起始日期在数组中的序列号
     if Formula.GetBufDateData(0)> cdate(startdate) then          '如果数据列的起始日期晚于我设定的开始日期,则说明数据不足,从已有数据序列的第一个值开始测试
          application.MsgOut"测试数据不足,请检查起始日期或者更改'工具>选项>维护>内存保留'"
          BeginDataNum=0
     else     '如果我设定的开始数据晚于数据起始日期,则需要查找从何时开始测试
          i = 0
          while (i<= HistroyData.Count-1) and (Formula.GetBufDateData(i) < cdate(startdate))
               i = i+1
          wend   
          BeginDataNum=i
     end if
     application.MsgOut "BeginDataNum:"&BeginDataNum   
     application.MsgOut "Formula.GetBufDateData(BeginDataNum):"&Formula.GetBufDateData(BeginDataNum)     '看看哪一天是起始日期
    
     '确定结束日期在数组中的序列号
     if Formula.GetBufDateData(Formula.DataSize-1)< cdate(finishdate) then          '如果数据列的结束日期早于我设定的结束日期,则说明数据不足,设定数据序列的最后一个值为结束日期
          application.MsgOut"测试数据不足,请检查结束日期是否正确"
          FinishDataNum=Formula.DataSize-1
     else     '如果我设定的结束数据早于数据序列结束日期,则需要查找从何时结束测试
          i = 0
          while (i<= HistroyData.Count-1) and (Formula.GetBufDateData(i) < cdate(finishdate))
               i = i+1
          wend   
          FinishDataNum=i-1
     end if
     application.MsgOut "FinishDataNum:"&FinishDataNum   
     application.MsgOut "Formula.GetBufDateData(FinishDataNum):"&Formula.GetBufDateData(FinishDataNum)     '看看哪一天是结束日期
    
     If TestReport.AddTestStock(HistroyData,"RU13","SQ",0) < 1 Then '向测试报告系统添加一个新测试品种
         MsgBox "请正确添加品种"
     End if
    
     '下面的代码控制循环测试
     '使用PEL策略的信号进行交易
     For i = 0 to FinishDataNum
          application.MsgOut "K线时间:" & Formula.GetBufDateData(i)
    
    
          if i >= BeginDataNum Then
     '          if i= BeginDataNum then
     '               application.MsgOut "(i=BeginDataNum):     "&Formula.GetBufDateData(i)   
     '          end if
     '        
     '          if i= FinishDataNum then
     '               application.MsgOut "(i=FinishDataNum ):     "&Formula.GetBufDateData(i)   
     '          end if   
             
              if Formula.GetBufData("开多条件",i) = 1 Then '开多
                   '开仓计算公式  总资本*风险资金百分比/(本周期收盘价-本周期止损价)
                   StopLossValue=Formula.GetBufData("StopLossValue",i)
                  
                  TestReport.Buy 1, HistroyData.Close(i)
              End if
        
              if Formula.GetBufData("平多条件",i) = 1 And TestReport.Holding > 0 Then '平多
                  TestReport.Sell 0, HistroyData.Close(i)
              End if
        
              if Formula.GetBufData("开空条件",i) = 1 Then '开多
                  TestReport.Buyshort 1, HistroyData.Close(i)
              End if
        
              if Formula.GetBufData("平空条件",i) = 1 And TestReport.Holding < 0 Then '平多
                  TestReport.Sellshort 0, HistroyData.Close(i)
              End if
        
               '显示测试时当前的资产
               'Application.msgout TestReport.ASSET
          end if
        
        
         '测试完毕强平持仓
         If i = FinishDataNum Then
             If TestReport.Holding < 0 Then
                 TestReport.SellShort 0,HistroyData.Close(i)
             End IF
             If TestReport.Holding > 0 Then
                 TestReport.Sell 0, HistroyData.Close(i)
             End If
         End If
    
               '为步进下一个数据做准备
               TestReport.StepIt i
     Next
    
     '在此添加新的证券代码
    
     '测试完毕显示测试报告
     Testreport.ShowReport

end sub

Sub APPLICATION_VBAStart()
call VbaTest

End Sub


Sub APPLICATION_VBAEnd()

End Sub

'获取最大手数
Function TP_GetMaxVol(sCode,nNewPrice)'获取在test report状态下的最大手数
     iQuanYi=TestReport.ASSET                    '得到测试模式下当前的净自有资产, 算法:可用现金+占用保证金-融资(现金+品种市值-融资)
     iCash=Testreport.Cash                         '账户现金
     '接下去在ini文件中查询保证金比例
     GetPrivateProfileFloat
     iBzj=0.15                                        '保证金的比例
     iCangWei=0.8                                   '仓位为总仓位的80%
     set Report1=marketdata.GetReportData(sCode,sMarket)
     nNewPrice=report.NewPrice                    '获得合约最新价格
     iHandBzj=nNewPrice*iMultipliter*iBzj/100          '计算每手保证金     计算方法为  最新价格*合约乘数*保证金比例/100  ?有疑问 为何要除以100?
     if iHandBzj>0 then
          iMaxVol=int((iQuanYi*iCangWei/100)/iHandBzj)     '此也有问题应该是icash?
     else   
          iMaxVol=1
     end if
     GetMaxVol=iMaxVol
end Function

 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2015/2/15 10:56:25 [只看该作者]

请问上述代码你具体遇到了什么问题?

能否详细描述一下便于我们进行有针对性的解答?



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
chacterchen
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2014/1/29 15:08:45
  发帖心情 Post By:2015/2/15 11:36:22 [只看该作者]

你好! 
我使用
Set Formula = marketdata.STKINDI("CU13","SQ","MA交易范例()",0,4) '调用上期所RU13合约的60min线自定义指标
获得PEL公式交易数据

我截取一段消息窗口中输出的某天交易时间,

我的问题是

1 感觉金字塔输出的交易时间与实际交易时间有不符合的情况.为何在2013年的时候一天只有两小时的交易时间?现在的交易时间也似乎与实际交易时间对不上?

2 另外我已经从百度云盘中下载了所有的5分钟数据,并且导入到金字塔中去,为何下面缺失2013/12/17-2014/11/15之间的数据?






K线时间:2013/12/11 14:00:00
K线时间:2013/12/11 15:00:00
K线时间:2013/12/12 14:00:00
K线时间:2013/12/12 15:00:00
K线时间:2013/12/13 14:00:00
K线时间:2013/12/13 15:00:00
K线时间:2013/12/16 14:00:00
K线时间:2013/12/16 15:00:00
K线时间:2013/12/17 14:00:00
K线时间:2013/12/17 15:00:00
K线时间:2014/11/4 19:00:00
K线时间:2014/11/5 2:00:00
K线时间:2014/11/5 3:00:00
K线时间:2014/11/5 4:00:00
K线时间:2014/11/5 5:00:00
K线时间:2014/11/5 14:00:00
K线时间:2014/11/5 15:00:00
K线时间:2014/11/5 18:00:00
K线时间:2014/11/5 19:00:00
K线时间:2014/11/6 2:00:00
K线时间:2014/11/6 3:00:00
K线时间:2014/11/6 4:00:00
K线时间:2014/11/6 5:00:00
K线时间:2014/11/6 14:00:00
K线时间:2014/11/6 15:00:00
K线时间:2014/11/6 18:00:00
K线时间:2014/11/6 19:00:00

网上我查到的数据是
上海期货交易所的沪铜期货交易时间:09:00-10:15;10:30-11:30为上午交易时段,13:30-15:00为下午交易时段。夜间为21:00-02:30.

[此贴子已经被作者于2015/2/15 11:38:19编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chacterchen
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:93 积分:0 威望:0 精华:0 注册:2014/1/29 15:08:45
  发帖心情 Post By:2015/2/15 13:25:30 [只看该作者]

重新下载了数据,问题2 数据不完整的情况解决了.

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2015/2/15 13:41:58 [只看该作者]

网盘上历史数据还没做更替还是老的数据格式,你通过工具-数据补充来补充历史的这段数据。

[此贴子已经被作者于2015/2/15 13:42:56编辑过]

 回到顶部