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

 

好吧好吧,我给你说。

#define HR0900 14400  //All times were changed for the test to see which is the Reference.
#define HR1500 10800
#define HR1900 7200
#define HR2300 3600

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
string            HeureSH[];

datetime TC = TimeCurrent();

int times[]={HR1500, HR2300, HR0900, HR1900};
                
    for(int k=0; k<ArraySize(HeureSH); k++)
    {
      datetime    want= TC - times[k];
    }

int iBar= iBarShift(Symbol(), PERIOD_H1, want);
double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);
只有#define中的一个被考虑。阵列HeureSH[]被正确执行,如果写入的时间到了,就是真的,就是正确的,这只是times[k],没有考虑所有四个#define。
 
Kane59:

好吧好吧,我给你说。

只考虑#define的一个。阵列HeureSH[]被正确执行,如果写入的时间到达,它是真的,它是正确的,这只是times[k]不考虑所有四个#define。

这个问题很明显 . . .

string            HeureSH[];

所以这个数组的大小是0,因为你已经这样声明了......所以这个循环......。

for(int k=0; k < ArraySize(HeureSH); k++)

从0开始,当k>=0时结束(0是数组的大小)。

 

好吧,我写这个是因为我想。

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
      
                            0     1     2     3

int times[]={HR1500, HR2300, HR0900, HR1900};

               0        1       2       3
 
Kane59:

好吧,我写这个是因为我想。

我想你需要做一些字符串处理,你需要把你的字符串分解成各个时间,把每个时间转换为日期时间,然后把它们存储在HeureSH[]数组中 . . . 以这种方式处理字符串可能有点棘手,不难,但容易搞砸。 然后你的代码可能开始有点意义 . . .


顺便说一下,这些是你必须使用的 字符串函数 ,请仔细研究,享受吧。
 

你好

我的工作是关于它的,但我不明白这一点。

RaptorUK:

这个问题很明显......。

所以这个数组的大小是0,因为你是这样声明的 ...... 所以这个循环 ......

从0开始,当k>=0时结束(0是数组的大小)。

你能试着告诉我更多的细节吗?


对于HeureSH[],我用线把它分成4个字符串部分,以获得4个不同的时间。

再次编辑。

我在打印函数 中写了ArraySize(HeureSH),它给了我:4

Print("Open:", DoubleToStr(OpenPrice, digits), /*" Time:", TimeToStr(Time[iBar], */" ArraySise=", ArraySize(HeureSH));

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Open:1.27701 ArraySise=4

我再次测试,它只选择其中的最后一个。

int times[]={36000,21600,14400,14400};

所以最后的 "14400"。为什么不选择其他相同顺序的数组 "HeureSH[]"?


循环 "For "有问题吗?
 
Kane59:

尊敬的先生

我在做这方面的工作,但我不明白这一点。

你能试着告诉我更多的细节吗?


对于HeureSH[],我用线把它切成4个弦的部分,以便有4个不同的时间。

再次编辑。

我在打印函数中写了ArraySize(HeureSH),它给了我:4

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Open:1.27701 ArraySise=4

你展示的代码将导致我所描述的结果,如果你有更多的代码,对你所问的问题有影响,那么你需要展示它 . . . . 或者如果你不需要更多的帮助,就不要展示它。
 

好吧好吧,对不起。

extern string     Heures="09:00;15:00;19:00;23:00;";
string            HeureSH[];

int start()
  {
//---- 
int times[]= {36000,21600,14400,14400};

   for(int i=0; i<ArraySize(Heures); i++)
   {
      datetime    want = TC - times[i];
   }

   int iBar= iBarShift(Symbol(), PERIOD_H1, want);
   double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);

   if (HeureSH(TimeToStr(iTime(Symbol(),PERIOD_H1,0),TIME_MINUTES)))
   {
      if(iOpen(Symbol(), PERIOD_H1, 0) < OpenPrice)
      {
         OrderSend( OP_SELL, .......);
      }
      if(iOpen(Symbol(), PERIOD_H1, 0) > OpenPrice)
      {
         OrderSend( OP_BUY, .......);
      }
   }

//----
   return(0);
  }

//+------------------------------------------------------------------+
void UpdateHSeSpeciales()
   {
      string hour1 = "";
      int count1 = 0;
      for(int k=0; k<StringLen(Heures); k++)
      {
         if(StringSubstr(Heures, k, 1) != ";")
         {
            hour1= hour1+ StringSubstr(Heures, k, 1);
         }
         else
         {
            ArrayResize(HeureSH, ArraySize(HeureSH)+1);
            HeureSH[count1] = hour1;
            hour1 ="";
            count1 +=1;
         }   
      }
   }
   bool HeureSH(string now1)
   {
      for(int k=0; k<ArraySize(HeureSH); k++)
      {
         if(now1 == HeureSH[k])
         {
            return(true);
         }
      }
   
      return(false);
   }

因此,例如,当现在是09:00,iBar是昨天23:00的条形图,比TimeCurrent少10小时。当15:00时,iBar是今天09:00的条形图,.......。我想要什么。如果选定的时间到了,有一个比现在(TimeCurrent)早的参考条。我的问题是程序只取 "times[]"的最后一项,没有其他。我想如果HeureSH[0],使用times[0]和continue。我可以做什么呢?


PS:这是我所有的东西,我需要。

 

你好。

哦,谁能帮帮我?

 
Kane59:

你好。

哦,有人能帮助我吗?

你并没有让别人很容易地帮助你,你在这里和那里发布了一些你的代码的碎片.我正在努力理解你的代码,我无法运行它来查看它的作用,因为我没有完整的代码,你有一个与你的数组同名的函数,这很好,但这对可读性没有帮助。

UpdateHSeSpeciales()是什么时候调用的?

 

真的很抱歉。

我只有这个,但我确实忘记了 "UpdateHSeSpeciales"。


它是在程序开始时在 "init "中调用的。