有特定时间的蜡烛的开盘价。

 

嗨,伙计们。

我有一个新问题,我想很简单。

例如,当15:00时,我想知道9:00时那支蜡烛的开盘价

if (TC >= 15:00)
{
    if (Openprice < iclose(symbol(), period_H1, 1)
    {
       Action
    }
}
那么,如何编写代码来获得预定时间内的蜡烛的开盘价?
 

将时间作为一个数据时间变量,并与iBarshift()一起使用,以获得条数,当你获得条数后,与Open[]或iOpen()一起使用。

 
RaptorUK:

将时间作为一个数据时间变量,用iBarshift()来获取小节数,当你得到小节数后,用Open[]或iOpen()来获取。


是的,不错的主意 :)

谢谢你,我将使用它!

 

而且有可能做到这一点。

   int Bar;
   double OpenPrice;
   
   int B(k);
   {
      switch(HeureSH[k])
      {
         case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00"));
         break;
            
         case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00"));
         break;
            
         case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00"));
         break;
            
         case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00"));
         break;
      }
   }
   OpenPrice= iOpen(Symbol(), PERIOD_H1, B);


HeureSH是有四个小时的数组大小。

因为如果是一个特定的小时,条形图必须是不同的,尽管创建一个开关,只有一行,而不是四行不同。

代码写得对吗?

 
Kane59:

而且有可能做到这一点。


HeureSH是有四个小时的数组大小。

因为如果是一个特定的小时,条形图必须是不同的,尽管创建一个开关,只有一行,而不是四行不同。

代码写得对吗?

我认为你有一个复制/粘贴错误,因为你有两次案例1......所以我认为第二个案例1应该是案例2

为了让它工作,存储在HeureSH[]数组中的值是1、2、3或4,对吗? 它们只能是int类型的值,没有字符串或双数。. .

在你的iOpen()调用中,我认为B 应该是Bar?还是你的意思是B(int)? 如果你想在该调用中使用该函数,你必须使该函数返回正确的值。


如果你使用有意义的变量和函数名称,你会给自己和其他人带来很大的帮助 ...... B、k和Bar都不是很有描述性。

 

哦,这是我的一个错误,我复制了我的代码,但我不知道我写了什么.......。我是这样解决的。

在我的iopen中,我写了B,这是 "Bar",因为时间不同,所以Bar也不同。


啊,是的,字符串值会造成一些问题,我想这是问题所在,所以我将尝试改变。

 
  int B(k);
   {
      switch(HeureSH[k])
      {
         case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00"));
         break;
            
         case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00"));
         break;
            
         case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00"));
         break;
            
         case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00"));
         break;
      }
   }
   OpenPrice= iOpen(Symbol(), PERIOD_H1, B);
这将不会起作用。1) iBarShift分配给Bar ,但iOpen使用B。2) StrToTime("23:00")将返回今天23:00的日期,这将总是在未来(或当前H1栏。)
#define HR2400      86400           // 24 * 3600
datetime TimeOfDay(datetime when){  return( when % HR2400          );       }
datetime DateOfDay(datetime when){  return( when - TimeOfDay(when) );       }
  int B(k);
   {
    #define HR0900 23400    // 9*3600
    #define HR1500 54000
    #define HR1900 68400
    #define HR2300 59800
    int times[]={ HR2300, HR0900, HR1500, HR1900 };
    datetime    now = TimeCurrent(),
                Bod = DateOfDay(now),
                want= Bod + times[HeureSH[k]];
    if (want > now){    // Yesterdays?
        datetime prevTradingDate = iTime(Symbol(), PERIOD_D1, 1);
        want = prevTradingDate + times[HeureSH[k]];
    }
   int iBar= iBarShift(Symbol(), PERIOD_H1, want);
   OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);
   }
 

你好,WHRoeder。

我认为你的代码比我的更有效,可以得到时间值是昨天还是今天。我同意:23:00,用我的代码,总是未来或当前,当它太晚了......


非常感谢您!这正是我所寻找的。这正是我所寻找的。

 

Hi WHRoeader,

供参考。

你说ibarshift被分配给Bar,iOpen被分配给B。

但是函数 B(k),这个函数是什么?为什么在这里?

在我的代码中,我把它放在这里是因为我想在字符串时间(HeuresSH)的数组大小和不同的StrToTime之间建立一种关系。它是假的,所以。


你又用了它,为什么?

请注意:)

 

是的,我忘了说,HeureSH[]是一个由四个不同的小时组成的字符串大小的数组。

 

当我看到EA像我想要的那样执行时,我笑了!!。

非常感谢,非常感谢 ......

这是在回测 中,因为市场已经关闭......

但是有一个问题。

Ea正确开仓,但买入时没有关闭,卖出时立即关闭。

我的策略是。

在同一时间,如果参数是真的,EA必须打开卖出或买入。没有SL或TP。

同时,如果下一个功能为真,它必须循环并关闭所有交易。

if(OrdersTotal()>0)
            { 
               for(int i=OrdersTotal()-1; i>=0; i--)
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  {
                     if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1))
                     {
                        if(OrderType() == OP_BUY)
                        {
                           OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);
                        }
                        if(OrderType() == OP_SELL)
                        {
                           OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);
我必须添加一个利润过滤器,但我将努力解决这个问题。如果没有这个功能,它必须关闭买入,但从未关闭,而且它必须让卖出运行,但卖出立即关闭。最后的代码有什么问题吗?