Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1245

 
Artyom Trishkin:

Не все массивы имеют одинаковую направленность.

Я понимаю, но ведь я и задавал при инициализации ArraySetAsSeries(barsBuffer1  ,true); ! 

Ну это ещё пол-беды. А вот как добавить новую свечу - ума не приложу.

Пробовал так: 

.........
   else
   {
      Print("tick_count = ",++tick_count);
      if(tick_count >= 5)
      {
         Print("Добавляем свечу.");
         
         double   O[1], H[1], L[1], C[1];
         O[0]  = newCandles_Open[3];
         H[0]  = newCandles_High[3];
         L[0]  = newCandles_Low[3];
         C[0]  = newCandles_Close[3];
         
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);
         
         ArrayInsert(barsBuffer1,O,0);
         ArrayInsert(barsBuffer2,H,0);
         ArrayInsert(barsBuffer3,L,0);
         ArrayInsert(barsBuffer4,C,0);
         
         tick_count = 0;
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}

Не получается... (((

 
Сергей Таболин:

Я понимаю, но ведь я и задавал при инициализации ArraySetAsSeries(barsBuffer1  ,true); ! 

Ну это ещё пол-беды. А вот как добавить новую свечу - ума не приложу.

Пробовал так: 

Не получается... (((

Я конечно прошу прощения, но массивы, назначенные индикаторными буферами, нельзя ресайзить - этим занимается подсистема терминала.

   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);

Пересмотрите свою логику. Я её вообще не знаю, и могу лишь показать что вопиюще не так.

 
Artyom Trishkin:

Я конечно прошу прощения, но массивы, назначенные индикаторными буферами, нельзя ресайзить - этим занимается подсистема терминала.

Пересмотрите свою логику. Я её вообще не знаю, и могу лишь показать что вопиюще не так.

Так я тоже это понимаю, но...

Артём, если индикаторным буфером управляет подсистема, то получается, что и увеличивает его размер тоже она? Другими словами, пока на графике не появится новая свеча, новую индикаторную свечу на графике нарисовать тоже нельзя?

 
Сергей Таболин:

Так я тоже это понимаю, но...

Артём, если индикаторным буфером управляет подсистема, то получается, что и увеличивает его размер тоже она? Другими словами, пока на графике не появится новая свеча, новую индикаторную свечу на графике нарисовать тоже нельзя?

Что понимать под "новую свечу нарисовать"?

Можно всяких нарисовать, но добавить баров не получится - их нету ещё.

Да, сам терминал заботится о размере индикаторных массивов. И ещё даёт данные о том, сколько их было на прошлом вызове.

 
Artyom Trishkin:

Что понимать под "новую свечу нарисовать"?

Можно всяких нарисовать, но добавить баров не получится - их нету ещё.

Да, сам терминал заботится о размере индикаторных массивов. И ещё даёт данные о том, сколько их было на прошлом вызове.

Спасибо, вот теперь я понимаю почему у меня не получается.

Тогда последний вопрос. Я знаю, что можно выводить в индикаторе свечи с другого ТФ. Если текущий H2, а выводятся свечи с H1, то получается что за время жизни одной свечи нужно нарисовать 2 в индикаторе. Как же это происходит если буфер увеличивает только система? Или ссылку на пример, если не сложно. Может дотумкаю )))

 
Сергей Таболин:

Спасибо, вот теперь я понимаю почему у меня не получается.

Тогда последний вопрос. Я знаю, что можно выводить в индикаторе свечи с другого ТФ. Если текущий H2, а выводятся свечи с H1, то получается что за время жизни одной свечи нужно нарисовать 2 в индикаторе. Как же это происходит если буфер увеличивает только система? Или ссылку на пример, если не сложно. Может дотумкаю )))

Примеры я давал в последних своих статьях по индикаторам, но там всё завязано на библиотеке.

А чтобы понять как рисовать две свечи вместо одной - поглядите на график. Во сколько времени была открыта свеча на Н2, и где нахоится свеча с тем же временем на Н1. Всё станет ясно.

 
Artyom Trishkin:

Примеры я давал в последних своих статьях по индикаторам, но там всё завязано на библиотеке.

А чтобы понять как рисовать две свечи вместо одной - поглядите на график. Во сколько времени была открыта свеча на Н2, и где нахоится свеча с тем же временем на Н1. Всё станет ясно.

Артём, в том то и дело, что до меня не доходит! 

Например, свеча на Н2 открыта в 12:00. Следующая будет в 14:00. Но на Н1 следующая будет в 13:00. По логике, пока не откроется свеча на старшем ТФ, индикаторный массив не будет увеличен! Значит вторую свечу в индикаторе я отрисовать не смогу? Или как?

Ну растолкуйте мне непонятливому такому.... Почему и как можно нарисовать две ( а в принципе и n свечей) свечи на одном графике? Почему, если я заполняю 0-й индекс индикаторного буфера новым значением (простое присваивание) индикатор не изменяется? 

Может стоит просить разрабов о такой возможности? Добавил я новый элемент в этот буфер - он отрисовался со сдвигом всех предыдущих влево. В конце то концов это мой индикатор! Я его пишу так, как МНЕ нужно! И я не хочу привязывать его ко времени открытия нового бара на графике! Неужели это так сложно?

 

Спасибо Артёму и Владимиру! Ваши ответы и пояснения надоумили меня и индикатор получился. Ещё раз спасибо.


 

Подскажите пожалуйста, в чем дело?

Есть простое объявление переменной:

input double   StopLoss=150.0;

при отладке на реальных данных переменная StopLoss имеет заданное значение - "150". Но если я включаю отладку на исторических данных, эта же переменная в том же самом коде имеет другое значение. Из-за чего такое может быть? И как справиться с проблемой?

 
Sayberix:

Подскажите пожалуйста, в чем дело?

Есть простое объявление переменной:

при отладке на реальных данных переменная StopLoss имеет заданное значение - "150". Но если я включаю отладку на исторических данных, эта же переменная в том же самом коде имеет другое значение. Из-за чего такое может быть? И как справиться с проблемой?

Проверьте значения во вкладке «Параметры» тестера стратегий. Когда включаете отладку на реальных данных, то советник берёт значения из input переменных, а если на истории то значения берутся из настроек тестера.