设为首页收藏本站

 找回密码
 注册
查看: 2579|回复: 3
打印 上一主题 下一主题

请教如何实现当根k线计算秒。 [复制链接]

Rank: 1

精华
0
UID
84387
积分
36
帖子
15
主题
4
阅读权限
10
注册时间
2011-12-5
最后登录
2015-7-29
跳转到指定楼层
1#
发表于 2015-7-15 13:05:52 |只看该作者 |倒序浏览
请教大神:
想实现在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; //开仓做空条件

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2015-7-15 15:36:12 |只看该作者
你确保上穿压力线后的5秒,还在当前K线内吗?
如果不能,那该信号就要到下一个bar去发单?这样会不会混乱啊?

使用道具 举报

Rank: 1

精华
0
UID
84387
积分
36
帖子
15
主题
4
阅读权限
10
注册时间
2011-12-5
最后登录
2015-7-29
3#
发表于 2015-7-15 16:49:28 |只看该作者
小米 发表于 2015-7-15 15:36
你确保上穿压力线后的5秒,还在当前K线内吗?
如果不能,那该信号就要到下一个bar去发单?这样会不会混乱啊 ...

当然不能确保,就是有可能在,有可能不在。但是不管它在不在,我就是想计数从上穿那刻开始数秒。不管在不在当根k线。但是这样写,在当根k线好像是不断连续赋值。这样当根k线就数不了秒了。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 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. }
复制代码

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-4-27 21:24

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部