以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- TestReport 在日线以下周期交易时间的疑问 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=75664) |
-- 作者:chacterchen -- 发布时间:2015/2/15 6:35:16 -- TestReport 在日线以下周期交易时间的疑问 能否帮忙看看下面的代码中在窗体中输出的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 |
-- 作者:王锋 -- 发布时间:2015/2/15 10:56:25 -- 请问上述代码你具体遇到了什么问题? 能否详细描述一下便于我们进行有针对性的解答? |
-- 作者:chacterchen -- 发布时间: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 -- 发布时间:2015/2/15 13:25:30 -- 重新下载了数据,问题2 数据不完整的情况解决了. |
-- 作者:yukizzc -- 发布时间:2015/2/15 13:41:58 -- 网盘上历史数据还没做更替还是老的数据格式,你通过工具-数据补充来补充历史的这段数据。 [此贴子已经被作者于2015/2/15 13:42:56编辑过]
|