Стоимость предыдущего тика - страница 3

 
PreviousTick = CurrentTick;

CurrentTick =   Bid;

if ( CurrentTick < PreviousTick )

       {

difference = PreviousTick - Bid;

TotalDescent = TotalDescent + difference;

descentarray[0]=TotalDescent;

       }


этот код приводит к краху графика mt4. что с ним не так?

разница, TotalDescent объявлены как double, с начальным значением 0. descentarray объявлен как 1d массив без максимального количества элементов. есть оператор if для фильтрации случая previousTick = 0, и аналог TotalAscent работает нормально.

он работает до первого тика декремента, затем происходит сбой. может я что-то упустил?

 

Пожалуйста, используйте кнопку </>, чтобы вставить свой код.


 
J.P.Satrio:


этот код приводит к краху графика mt4. что с ним не так?

разница, TotalDescent объявлены как double, с начальным значением 0. descentarray объявлен как 1d массив без максимального количества элементов. есть оператор if для фильтрации случая previousTick = 0, и аналог TotalAscent работает нормально.

Он работает до первого тика декремента, затем происходит сбой. может я что-то упустил?

Вы определяете размер массива?

 
Keith Watford:

Определяете ли вы размер массива?

Нет, поскольку я не уверен, какой размер будет необходим. Как я уже сказал, сторона восхождения прекрасно работает с массивом без фиксированного размера.
 
J.P.Satrio:
Нет, поскольку я не уверен, какой размер необходим. Как я уже сказал, сторона восхождения прекрасно работает с массивом без заданного фиксированного размера.

Вы должны определить размер массива. Если вы не уверены в необходимом размере, каждый раз, когда вы хотите дать ему дополнительный элемент, увеличивайте размер на единицу.

 
Keith Watford:

Вы должны определить размер массива. Если вы не уверены в необходимом размере, каждый раз, когда вы хотите дать ему дополнительный элемент, увеличивайте размер на единицу.

Я обязательно попробую, спасибо. Однако я видел много случаев, когда разработчики не задавали размер для массивов. Непонятно, почему в этом случае все по-другому.
Если бы мне пришлось проверять, есть ли необходимость увеличивать и изменять размер моего массива на каждом тике, это сделало бы его намного сложнее, поэтому я думаю, что я установлю достаточно большой размер, чтобы справиться с количеством данных. Что произойдет, если массив будет переполнен? (Со мной такого не случалось) снова произойдет сбой?
 
J.P.Satrio:
Я обязательно попробую, спасибо. Однако я видел много случаев, когда кодеры не задавали размер для массивов. Непонятно, почему этот случай отличается.
Если бы мне пришлось проверять, есть ли необходимость увеличивать и изменять размер моего массива на каждом тике, это сделало бы его гораздо более сложным, поэтому я думаю, что я установлю достаточно большой размер, чтобы управлять количеством данных. Что произойдет, если массив будет переполнен? (Со мной такого не случалось) снова произойдет сбой?

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

 
Keith Watford:

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

Это помогло. Спасибо!
 

Эта тема помогла мне разработать код, который сообщает мне разницу между предыдущим Ask и текущим Ask. Если разница равна нулю, то выводится 0.0, но если разница не равна нулю, то слишком много цифр, например 1.000000000006551e-05. Что-то не так с моим кодом или есть способ исправить это? Символ - EURUSD, если это имеет значение. Это мой первый код на mql, поэтому заранее прошу прощения за недочеты. Спасибо!

/* Global Variables */
double ask_prev;
double ask_curr;
double ask_diff;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   MqlTick tick_curr;
//---
   if(SymbolInfoTick(Symbol(),tick_curr))
     {
      ask_curr = tick_curr.ask;
      ask_diff = ask_curr - ask_prev;
      Print(ask_diff);
      ask_prev = tick_curr.ask;
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+
 
rdone:

Эта тема помогла мне разработать код, который сообщает мне разницу между предыдущим Ask и текущим Ask. Если разница равна нулю, то выводится 0.0, но если разница не равна нулю, то слишком много цифр, например 1.000000000006551e-05. Что-то не так с моим кодом или есть способ исправить это? Символ - EURUSD, если это имеет значение. Это мой первый код на mql, поэтому заранее прошу прощения за недочеты. Спасибо!

Почему бы просто не...

MqlTick tick_curr, tick_last;

void OnTick()
{
   tick_last = tick_curr;
   SymbolInfoTick(Symbol(),tick_curr);
}
Причина обращения: