- 精华
- 0
- 在线时间
- 0 小时
- UID
- 133615
- 积分
- 20
- 帖子
- 12
- 阅读权限
- 10
- 注册时间
- 2013-4-9
- 最后登录
- 2015-4-29
- 精华
- 0
- UID
- 133615
- 积分
- 20
- 帖子
- 12
- 主题
- 8
- 阅读权限
- 10
- 注册时间
- 2013-4-9
- 最后登录
- 2015-4-29
|
本帖最后由 gongzk 于 2015-2-25 14:50 编辑
内置的布林强盗的开仓用的是当前bar的high或者low,那么如果我没理解错的话,实盘中在达成条件的high和low出现前,marketposition一直是0吧?
那么下面这段代码(在开仓后面的),如果在前一个bar平仓然后当前bar又开仓的情况下,是否有可能造成实盘和回测结果不一致呢?- If(MarketPosition == 0)
- {
- liqDays = liqLength;
- }Else
- {
- liqDays = liqDays - 1;
- liqDays = Max(liqDays,10);
- }
- liqPoint = Average(Close,liqDays);
复制代码 实盘,开多,当前的high一直没达到那个条件,那么liqdays会被定义为liqlength;
如果下一个tick的high达到条件了,那么marketposition不是0了,liqdays是liqdays-1,
可是在当前bar上,liqdays之前是liqlength,所以实际是liqlength-1
回测的话,出现开仓条件的那个bar的markposition(在开仓后面)一直不是0
所以liqday一直是liqdays-1
而在我所标红的条件下,liqlength-1不等于 liqdays-1
那么实盘和回测就是否不一致了?
另外我不确定布林强盗原本是否考虑到了我标红的条件,因为在这个条件下,liqpoint并不会像普通开仓那样“初始化”。。
所以是否应该把这段代码放在开仓之前呢?因为在实盘中开仓条件出现的bar上,每一跳进来后执行buy操作前marketposition都被先设为0了;回测中在执行开仓语句前marketpostion也是0 |
|