Иметь цену открытия свечи в определенный час. - страница 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) в функции print и это дало мне: 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) в функции print и это дало мне: 4

2013.01.19 13:57:21 2012.11.19 19:00 Тестер 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, на 10 часов меньше, чем TimeCurrent. Когда наступает 15:00, iBar - это бар сегодняшнего дня 09:00, ........ Что я хочу: Если наступает выбранный час, иметь эталонный бар, который находится перед Now (TimeCurrent). Моя проблема в том, что программа берет только последний элемент "times[]" и никаких других. Я хочу, чтобы если HeureSH[0], использовать times[0] и continu. Что я могу сделать?


PS: это все, что у меня есть и что мне нужно.

[Удален]  

Привет,

кто-нибудь может мне помочь?

 
Kane59:

Привет,

кто-нибудь может мне помочь?

Вы не облегчаете никому задачу помочь вам, вы публикуете кусочки вашего кода то тут, то там... Я пытаюсь понять ваш код, я не могу запустить его, чтобы посмотреть, что он делает, так как у меня нет полного кода, у вас есть функция с тем же именем, что и ваш массив, это нормально, но это не способствует читабельности.

Когда вызывается UpdateHSeSpeciales()?

[Удален]  

Извините, правда,

У меня есть только это, но это правда, что я забыл "UpdateHSeSpeciales".


Он вызывается в "init" при запуске программы.