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

标题: 请教如何实现当根k线计算秒。 [打印本页]

作者: byronadams    时间: 2015-7-15 13:05:52     标题: 请教如何实现当根k线计算秒。

请教大神:
想实现在10秒钟k线周期上,价格上穿压力位那一刻开始计数,当计数满5秒后再开仓。
我的方法是先记录第一时间上穿的那刻时间,再拿最新的时间减去那刻时间,当他们的差大于5秒后开仓。
但是我编写完,还是发现当根k线上始终是不断重新赋值。没有记录第一秒上穿的时刻。请哪位老师、大神帮忙看看,到底怎么解决。
以下是一段代码:
      TimeSeconds=Value(Left(TimeToString(CurrentTime),2))*3600+Value(Mid(TimeToString(CurrentTime),3,2))*60 +Value(Right(TimeToString(CurrentTime),2));   
//记录时间
If(BarStatus==2&&bsigadd1 ) //上穿
{

for  i = 0 to 80  //确定压力位
    {
             forprice=centre -myatr1*F1*4+myatr1*F1*0.1*forn;
            If(q_last< forprice+myatr1*F1*0.1 && Q_Last>=forprice ){SetTBProfileString("buysell","bprice",Text(forprice));Break;}
        forn=forn+1;
        }

  entrytj1=forprice<>var2 || var2==0||var0>10;
   entrytj3= forprice>var2&&A_BuyPosition==0 && var2<>0;
If(entrytj1&& !entrytj3)  //确定当前时间
{
SetTBProfileString("buysell","btime",text(timeseconds));
}       
}

var0= Value(getTBProfileString("buysell","btime"));
var2= Value(getTBProfileString("buysell","bprice"));
var1= Value(getTBProfileString("buysell","stime"));
var3= Value(getTBProfileString("buysell","sprice"));


        If ( var0==InvalidNumeric ||Date<>date[1] ||BarStatus==0 )  var0=0;        //下单时间初始化.!!断网重连或者重启则会重置全局变量。!!???   
     If ( var1==InvalidNumeric ||Date<>date[1] ||BarStatus==0 )  var1=0;        
     If ( var2==InvalidNumeric ||Date<>date[1] ||BarStatus==0 )  var2=0;        
     If ( var3==InvalidNumeric ||Date<>date[1] ||BarStatus==0 )  var3=0;     
tradetime= CurrentTime>=myentrytime/100 && CurrentTime<LastTradeMins/100 ;//and Date-mydate0>atrlength;
bsignal=   TimeSeconds-var0>=5&& TimeSeconds-var0<10 &&var0>0 &&Q_Last>var2; //开仓做多条件
ssignal=   TimeSeconds-var1>=5&& TimeSeconds-var1<10 &&var1>0 &&Q_Last<var3; //开仓做空条件


作者: 小米    时间: 2015-7-15 15:36:12

你确保上穿压力线后的5秒,还在当前K线内吗?
如果不能,那该信号就要到下一个bar去发单?这样会不会混乱啊?
作者: byronadams    时间: 2015-7-15 16:49:28

小米 发表于 2015-7-15 15:36
你确保上穿压力线后的5秒,还在当前K线内吗?
如果不能,那该信号就要到下一个bar去发单?这样会不会混乱啊 ...

当然不能确保,就是有可能在,有可能不在。但是不管它在不在,我就是想计数从上穿那刻开始数秒。不管在不在当根k线。但是这样写,在当根k线好像是不断连续赋值。这样当根k线就数不了秒了。
作者: 小米    时间: 2015-7-16 09:18:10

byronadams 发表于 2015-7-15 16:49
当然不能确保,就是有可能在,有可能不在。但是不管它在不在,我就是想计数从上穿那刻开始数秒。不管在不 ...


你种做法是有隐患的吧??当然,如果你坚持的话也可以自己试一下。
因为时间在秒与分是60进制,所以直接使用时间判断+5秒的方式,个人觉得不是特别合适,可以换成10个tick后再发单的方式(在不活跃的合约里,可能就会有有点问题了)
合理的代码,是肯定可以记录第一秒上穿那一瞬间的时间的。你的不断重新赋值,那是代码没控制住的原因。
看看下述代码,符合你需求不。没有判断时间,但是判断了10个tick,基本相当于5秒后发单 了吧。
不过代码只控制了条件满足后10个tick发单 ,这种只适用于实时行情。。在历史行情中,这段代码是不可用的。所以,你还得有一个分支处理,将实时交易与历史信号分别控制。。
要注意的是,控制得不好,会导致更多的问题。。。。
  1. if(上穿时 && getglobalvar(0)==0)  //需要自己事先对0号全局变量进行初始化。
  2. {
  3.       setglobalvar(0,1);
  4.       setgolbalvar(1,1);
  5. }else if(getglobalvar(0)==1)
  6. {
  7.      setblobalvar(1,getglobalvar(1)+1);
  8. }
  9. if(getblobalvar(1)>=10)
  10. {
  11.       buy;
  12.       setglobalvar(0,0);
  13. }
复制代码





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