请教如何实现当根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 ||BarStatus==0 ) var0=0; //下单时间初始化.!!断网重连或者重启则会重置全局变量。!!???
If ( var1==InvalidNumeric ||Date<>date ||BarStatus==0 ) var1=0;
If ( var2==InvalidNumeric ||Date<>date ||BarStatus==0 ) var2=0;
If ( var3==InvalidNumeric ||Date<>date ||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; //开仓做空条件
你确保上穿压力线后的5秒,还在当前K线内吗?
如果不能,那该信号就要到下一个bar去发单?这样会不会混乱啊? 小米 发表于 2015-7-15 15:36 static/image/common/back.gif
你确保上穿压力线后的5秒,还在当前K线内吗?
如果不能,那该信号就要到下一个bar去发单?这样会不会混乱啊 ...
当然不能确保,就是有可能在,有可能不在。但是不管它在不在,我就是想计数从上穿那刻开始数秒。不管在不在当根k线。但是这样写,在当根k线好像是不断连续赋值。这样当根k线就数不了秒了。 byronadams 发表于 2015-7-15 16:49 static/image/common/back.gif
当然不能确保,就是有可能在,有可能不在。但是不管它在不在,我就是想计数从上穿那刻开始数秒。不管在不 ...
你种做法是有隐患的吧??当然,如果你坚持的话也可以自己试一下。
因为时间在秒与分是60进制,所以直接使用时间判断+5秒的方式,个人觉得不是特别合适,可以换成10个tick后再发单的方式(在不活跃的合约里,可能就会有有点问题了)
合理的代码,是肯定可以记录第一秒上穿那一瞬间的时间的。你的不断重新赋值,那是代码没控制住的原因。
看看下述代码,符合你需求不。没有判断时间,但是判断了10个tick,基本相当于5秒后发单 了吧。
不过代码只控制了条件满足后10个tick发单 ,这种只适用于实时行情。。在历史行情中,这段代码是不可用的。所以,你还得有一个分支处理,将实时交易与历史信号分别控制。。
要注意的是,控制得不好,会导致更多的问题。。。。if(上穿时 && getglobalvar(0)==0) //需要自己事先对0号全局变量进行初始化。
{
setglobalvar(0,1);
setgolbalvar(1,1);
}else if(getglobalvar(0)==1)
{
setblobalvar(1,getglobalvar(1)+1);
}
if(getblobalvar(1)>=10)
{
buy;
setglobalvar(0,0);
}
页:
[1]