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

标题: 请教斑竹,用全局变量避免重复开仓的写法。。。 [打印本页]

作者: uuvvqq    时间: 2009-9-23 14:17:08     标题: 请教斑竹,用全局变量避免重复开仓的写法。。。

我编的一个日内的系统,使用了全局变量记录开仓信息。整个系统没有使用marketposition函数,不加仓。开仓价格也使用全局变量记录。同时使用交易助手保证成交。
请教版主这样的写法可以避免反复开仓不?图表上是否有信号?
有没有什么问题?

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:09

entrycon与exitcon的判断条件决定信号是否会易消失.如果是一个易消失的信号.也会造成反复开仓,这里用到的全局变量不能杜绝因信号消失造成的反复开仓.
作者: uuvvqq    时间: 2009-9-23 15:55:44

原帖由 小米 于 2009-9-23 15:04 发表
entrycon与exitcon的判断条件决定信号是否会易消失.如果是一个易消失的信号.也会造成反复开仓,这里用到的全局变量不能杜绝因信号消失造成的反复开仓.


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


我的理解是如果使用“marketposition"函数进行第一个判断的话,由于“marketposition"函数需要一个返回时间,在此期间,如果有一个能满足的tick进来,由于”marketposition"函数的值还没有改变,导致开仓条件被执行,又会产生一个开仓信号。

而使用全局变量时,开仓后全局变量的值立即改变,下一个tick进来后不会再执行“entrycon",因此不会产生开仓信号。直到平仓后,全局变量重新归零。
作者: 小米    时间: 2009-9-23 17:12:51

首先,不会因为是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:56

,谢谢指教
作者: TBlzx    时间: 2010-3-7 00:15:31     标题: 回复 1# uuvvqq 的帖子

学习了,好东西多多益善
作者: poleax    时间: 2010-9-7 18:07:26

首先,不会因为是marketposition的返回时间原因而造成反复开仓. 造成反复开仓的绝大部分是判断条件的原因而造成信号的忽闪.
以上你的写法对于entrycon的原因造成信号忽闪从而反复开仓是记不住的.
你可以试一下这段代 ...
小米 发表于 2009-9-23 17:12

============================================================
请问上面两段代码,TB处理起来的差别?
用close变量做条件判断,TB是否要求等到BAR结束才处理

多谢
作者: poleax    时间: 2010-9-7 18:51:17

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

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

小米 发表于 2009-9-23 15:04
entrycon与exitcon的判断条件决定信号是否会易消失.如果是一个易消失的信号.也会造成反复开仓,这里用到的全 ...

请问为什么易消失信号也会造成反复开仓 呢? 不是开仓之后全局变量也就改变了吗?好奇。求解谢谢哦
作者: 小米    时间: 2017-2-9 09:42:54

asd1f914f 发表于 2017-2-8 23:15
请问为什么易消失信号也会造成反复开仓 呢? 不是开仓之后全局变量也就改变了吗?好奇。求解谢谢哦 ...

这个是7.8年前的贴子。。。
现在的TB已经不是这个机制了,同一个bar上的信号消失并不会反复开仓。




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