能否帮忙看看下面的代码中在窗体中输出的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.ShowReportend subSub APPLICATION_VBAStart()call VbaTestEnd SubSub 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=iMaxVolend Function
你好! 我使用
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编辑过]
网盘上历史数据还没做更替还是老的数据格式,你通过工具-数据补充来补充历史的这段数据。
[此贴子已经被作者于2015/2/15 13:42:56编辑过]