系统交易论坛 - 开拓者期货自动交易平台's Archiver

uuvvqq 发表于 2009-9-23 14:17

请教斑竹,用全局变量避免重复开仓的写法。。。

我编的一个日内的系统,使用了全局变量记录开仓信息。整个系统没有使用marketposition函数,不加仓。开仓价格也使用全局变量记录。同时使用交易助手保证成交。
[size=4]请教版主这样的写法可以避免反复开仓不?图表上是否有信号?
有没有什么问题?
[/size]
entrypri=getgloblevar(0);            //取记录开仓价格的全局变量值
ishaveposition=getgloblevar(1);  //取记录持仓的全局变量值
if(ishaveposition==0)                  //判断是否空仓
{
if(entrycon)                                 //满足开仓条件
{
buy(1,close);                             //以最新价开仓
setgloblevar(1,1);                    //记录开多仓,开空仓记录为-1
setgloblevar(0,close);              //记录开仓价格
}
if(ishavepositiion==1)             //判断是否有多仓
{
if(exitcon)                             //满足平仓条件
{
sell(1,close);                       //以最新价平仓
setgloblevar(1,0);              //将全局变量归零,记录账户持仓为零
}

小米 发表于 2009-9-23 15:04

entrycon与exitcon的判断条件决定信号是否会易消失.如果是一个易消失的信号.也会造成反复开仓,这里用到的全局变量不能杜绝因信号消失造成的反复开仓.

uuvvqq 发表于 2009-9-23 15:55

[quote]原帖由 [i]小米[/i] 于 2009-9-23 15:04 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=36159&ptid=5596][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
entrycon与exitcon的判断条件决定信号是否会易消失.如果是一个易消失的信号.也会造成反复开仓,这里用到的全局变量不能杜绝因信号消失造成的反复开仓. [/quote]

[size=5]我以为全局变量在开仓后变为1或-1,不能满足第一个的判断语句"if(ishaveposition==0)",所以后边的判断开仓条件“entrycon"都不会被执行,因此不会重新开仓。[/size]
[size=5][/size]

[size=5]我的理解是如果使用“marketposition"函数进行第一个判断的话,由于“marketposition"函数需要一个返回时间,在此期间,如果有一个能满足的tick进来,由于”marketposition"函数的值还没有改变,导致开仓条件被执行,又会产生一个开仓信号。[/size]
[size=5][/size]
[size=5]而使用全局变量时,开仓后全局变量的值立即改变,下一个tick进来后不会再执行“entrycon",因此不会产生开仓信号。直到平仓后,全局变量重新归零。[/size]

小米 发表于 2009-9-23 17:12

首先,不会因为是marketposition的返回时间原因而造成反复开仓. 造成反复开仓的绝大部分是判断条件的原因而造成信号的忽闪.
以上你的写法对于entrycon的原因造成信号忽闪从而反复开仓是记不住的.
你可以试一下这段代码:
if(ishaveposition==1)                  //判断是否空仓
{
buy(1,close);
}else if(entrycon && ishaveposition==0)                                 //满足开仓条件
{
buy(1,close);  
ishaveposition=1;                           //以最新价开仓
setgloblevar(1,1);                    //记录开多仓,开空仓记录为-1
}

uuvvqq 发表于 2009-9-23 19:13

:) ,谢谢指教

TBlzx 发表于 2010-3-7 00:15

回复 1# uuvvqq 的帖子

学习了,好东西多多益善

poleax 发表于 2010-9-7 18:07

[quote]首先,不会因为是marketposition的返回时间原因而造成反复开仓. 造成反复开仓的绝大部分是判断条件的原因而造成信号的忽闪.
以上你的写法对于entrycon的原因造成信号忽闪从而反复开仓是记不住的.
你可以试一下这段代 ...
[size=2][color=#999999]小米 发表于 2009-9-23 17:12[/color] [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=36171&ptid=5596][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url][/size][/quote]
============================================================
请问上面两段代码,TB处理起来的差别?
用close变量做条件判断,TB是否要求等到BAR结束才处理

多谢

poleax 发表于 2010-9-7 18:51

TB是怎么保证用HIGH和LOW进行条件判断时的重复开仓问题的?直接忽略掉后续TICK的high和low同样满足开仓条件?
如果是这样的化,用当前的close进行开仓条件判断?若该close满足开仓条件,是否可在对应的TICK直接开仓;同时忽略后续close,不管是否满足触发条件。
请问到底是什么机制导致的close判断必须重复开仓,而high/low则只需开一次
如果将close的值赋给一个全局变量,由全局变量代替close进行条件判断
TB是否还会考虑所谓的信号消失问题?
多谢

poleax 发表于 2010-9-7 18:59

按照常见问题Q&A中的解决办法,其实就是等bar结束后,close值不再变化了,再进行判断
bar结束后的close值,其实也不过是bar所遍历的价格中的一个,后面还会有无数个close。
换个角度看,bar中间的close也可看作当前bar的某一子周期bar的收盘close吧。比如5分钟bar中的某1分钟bar收盘close。
实在看不出解决办法的优势所在,能否解释一二
多谢

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.