Иметь цену открытия свечи в определенный час. - страница 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" при запуске программы.