开拓者期货期权程序化系统交易论坛

标题: 回测问题 [打印本页]

作者: sss1983320    时间: 2016-2-26 10:33:42     标题: 回测问题

回测问题:
想实现以某价格吊买,但回测发现,如果早期数据比目前定价高,只要不空仓,价格高于定价,早期就总是以K线的最低价买进,比如铁矿早期价格900块,目前360块,我设定吊买价350块,回测时却发现早期以900块的价格买入,止损,再买入,再止损……与目的不符:

Params

    Numeric Price(350);//买入价格
    Numeric lots(1);//买入数量
        Numeric zhisun(2);//止损范围

Vars

        Numeric MinPoint;
       
Begin
   
    MinPoint = MinMove*PriceScale;        //一跳
       
        If(high>=Price && CurrentContracts<=lots)Buy(lots,Price);   //如果价格大于等于Price,以Price买入。
       
        If(MarketPosition==1 && Close<=AvgEntryPrice-zhisun*MinPoint)Sell(lots,AvgEntryPrice-zhisun*MinPoint);   //如果价格低于买入价-止损幅度,止损平仓。

End

回测时怎么写代码才能实现完美吊买?


       
作者: 小米    时间: 2016-2-26 11:06:43

本帖最后由 小米 于 2016-2-26 11:15 编辑

您的入场公式写是high>price,当price设置为350,早期的价格900时,是满足900>350 即high>price的,条件满足,自然可出信号。
想要回测可兼容所有的行情价格,那么这个price为变量,随不同时间而变化的动态价格方为合理吧。
作者: sss1983320    时间: 2016-2-26 11:11:20

但我要求系统以350买入,不是以900买入啊
作者: 小米    时间: 2016-2-26 11:16:03

sss1983320 发表于 2016-2-26 11:11
但我要求系统以350买入,不是以900买入啊

那您可以写为high == price呀。。。不要使用>
作者: sss1983320    时间: 2016-2-26 11:21:29

小米 发表于 2016-2-26 11:16
那您可以写为high == price呀。。。不要使用>

也就是说,如果写了high>=price,无论后面Buy的买入价格设置为多少,都会以当前高价开仓买入?有点不合理哦……
作者: 小米    时间: 2016-2-26 11:25:21

本帖最后由 小米 于 2016-2-26 11:26 编辑
sss1983320 发表于 2016-2-26 11:21
也就是说,如果写了high>=price,无论后面Buy的买入价格设置为多少,都会以当前高价开仓买入?有点不合理 ...


这个>=这个判断式的基本逻辑就是只要high>=price就满足了呀。。
如果这个不是您想要的结果,你就得改这个判断式,不能使用>=...
不然策略是不可能知道您到底想要什么的。
合理与否取决于代码 ,取决于代码的最终表现与您的需求是否吻合。
作者: sss1983320    时间: 2016-2-26 11:35:12

小米 发表于 2016-2-26 11:25
这个>=这个判断式的基本逻辑就是只要high>=price就满足了呀。。
如果这个不是您想要的结果,你就得改这个 ...

感谢小米大师的及时回复,可我还是没搞清楚,如果BUY函数设定的买入价格(350)低于当前价,当触发了这个BUY函数后,系统是以350挂单对吧,不到350,这个单就一直挂着?还是说只要触发了BUY函数,BUY函数就无视这个350,直接买入?
作者: sss1983320    时间: 2016-2-26 11:55:23

本帖最后由 sss1983320 于 2016-2-26 11:58 编辑
小米 发表于 2016-2-26 11:16
那您可以写为high == price呀。。。不要使用>


当我改成high == price 之后,回测时发现,当价格从低位涨过350以之后,K线没有给出任何信号,不知道怎么回事……

作者: 小米    时间: 2016-2-26 13:13:34

sss1983320 发表于 2016-2-26 11:55
当我改成high == price 之后,回测时发现,当价格从低位涨过350以之后,K线没有给出任何信号,不知道怎么 ...

呃。。。。建议您还是先系统地学习一下公式吧,以及一些逻辑式的表达。
high==price那就是说是最高价一定要等于350时才会发信号,超过了自然不行。。
你前面说的是一定要350,不要高于350的其它价格哟。
作者: 小米    时间: 2016-2-26 13:13:58

sss1983320 发表于 2016-2-26 11:55
当我改成high == price 之后,回测时发现,当价格从低位涨过350以之后,K线没有给出任何信号,不知道怎么 ...

呃。。。。建议您还是先系统地学习一下公式吧,以及一些逻辑式的表达。
high==price那就是说是最高价一定要等于350时才会发信号,超过了自然不行。。
你前面说的是一定要350,不要高于350的其它价格哟。
作者: bahuang    时间: 2016-2-26 13:17:34

周期换小点,并且不要在开仓bar平仓
boolseries buyCon(false);
if(high>=price)  buyCon=true;

if(buyCon[1] && buyCon && low<=price)
{
buy(0,price);
buyCon=false;
}




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2