请教斑竹,用全局变量避免重复开仓的写法。。。
我编的一个日内的系统,使用了全局变量记录开仓信息。整个系统没有使用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); //将全局变量归零,记录账户持仓为零
} entrycon与exitcon的判断条件决定信号是否会易消失.如果是一个易消失的信号.也会造成反复开仓,这里用到的全局变量不能杜绝因信号消失造成的反复开仓. [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] 首先,不会因为是marketposition的返回时间原因而造成反复开仓. 造成反复开仓的绝大部分是判断条件的原因而造成信号的忽闪.
以上你的写法对于entrycon的原因造成信号忽闪从而反复开仓是记不住的.
你可以试一下这段代码:
if(ishaveposition==1) //判断是否空仓
{
buy(1,close);
}else if(entrycon && ishaveposition==0) //满足开仓条件
{
buy(1,close);
ishaveposition=1; //以最新价开仓
setgloblevar(1,1); //记录开多仓,开空仓记录为-1
} :) ,谢谢指教
回复 1# uuvvqq 的帖子
学习了,好东西多多益善 [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结束才处理
多谢 TB是怎么保证用HIGH和LOW进行条件判断时的重复开仓问题的?直接忽略掉后续TICK的high和low同样满足开仓条件?
如果是这样的化,用当前的close进行开仓条件判断?若该close满足开仓条件,是否可在对应的TICK直接开仓;同时忽略后续close,不管是否满足触发条件。
请问到底是什么机制导致的close判断必须重复开仓,而high/low则只需开一次
如果将close的值赋给一个全局变量,由全局变量代替close进行条件判断
TB是否还会考虑所谓的信号消失问题?
多谢 按照常见问题Q&A中的解决办法,其实就是等bar结束后,close值不再变化了,再进行判断
bar结束后的close值,其实也不过是bar所遍历的价格中的一个,后面还会有无数个close。
换个角度看,bar中间的close也可看作当前bar的某一子周期bar的收盘close吧。比如5分钟bar中的某1分钟bar收盘close。
实在看不出解决办法的优势所在,能否解释一二
多谢
页:
[1]
