Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 989

 

Здравствуйте. Покажите,пожалуйста,где ошибка.

void OnStart()
  {
datetime current_time=TimeCurrent();
//datetime current_time=D'2019.10.18 19:55:00';
datetime our_time=(current_time-60)-MathMod((current_time-60),60);
datetime t1=our_time;
datetime t2=our_time+60;
PrintFormat("current_time=%s",TimeToString(current_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
PrintFormat("our_time=%s",TimeToString(our_time,TIME_DATE|TIME_MINUTES|TIME_SECONDS));
string stock="MSFT";
MqlTick tick_array[];// массив для приема тиков
int received=CopyTicksRange(stock, tick_array, COPY_TICKS_TRADE, t1*1000, t2*1000);
Print(stock," Всего тиков ",received);
Print(tick_array[0].time,": Last = ",tick_array[0].last,"  Volume = ",tick_array[0].volume );
ulong total=tick_array[0].volume; ulong buy=tick_array[0].volume; ulong sell=0; bool flag='b';
int ticks=ArraySize(tick_array); double pprice=tick_array[0].last; int i=1;
while(i<ticks)
      { 
        total=total+tick_array[i].volume;//{считаем общий объем}
        if (pprice<tick_array[i].last)  flag='b';//{если пред.тик меньше зн.'b'}
        if (pprice<=tick_array[i].last)
            if (flag='b')
                buy=buy+tick_array[i].volume;//{считаем,что сделка по BID} 
        if (pprice>tick_array[i].last)  flag='s';//{если пред.тик больше зн.'s'} 
        if (pprice>=tick_array[i].last)
            if (flag='s')
               sell=sell+tick_array[i].volume;//{считаем,что сделка по ASK}
        pprice=tick_array[i].last;//{ставим счетчик на последн. тик}
        i=i+1; 
      }               
Print (total," ",buy," ",sell);       
  }
 
werter:

Здравствуйте. Покажите,пожалуйста,где ошибка.

где то в коде

 
Vladimir Pastushak:

где то в коде

Смишно.

Это BuySellVolume. Общий объём не равен сумме Buy и Sell, а только чуть-чуть больше.

 

Что может значить "inf' в индикаторе на MLQ5?

Впервые с этим столкнулся а по поиску в документации ничего не нашел

 
Alexandr Sokolov:

Что может значить "inf' в индикаторе на MLQ5?

Впервые с этим столкнулся а по поиску в документации ничего не нашел

Плохо искали: поиск по INF выдаёт несколько результатов.

Например смотреть в MathLog

Возвращаемое значение

Натуральный логарифм value в случае успеха. Если значение val отрицательно, функция возвращает NaN (неопределенное значение). Если value равно 0, функция возвращает INF (бесконечность) .


Такой результат означает: код содержит ошибку в алгоритме вычисления значений (например забываем инициализировать переменные - надеемся на авось, в операциях деления не думаем ...).

Поиск - MQL5.community
Поиск - MQL5.community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
Vladimir Karputov:

Плохо искали: поиск по INF выдаёт несколько результатов.

Например смотреть в MathLog

Возвращаемое значение

Натуральный логарифм value в случае успеха. Если значение val отрицательно, функция возвращает NaN (неопределенное значение). Если value равно 0, функция возвращает INF (бесконечность) .


Такой результат означает: код содержит ошибку в алгоритме вычисления значений (например забываем инициализировать переменные - надеемся на авось, в операциях деления не думаем ...).

Вот всё что я увидел в поиске >>> документация (но описание каждого читать не стал, всегда по заголовку нахожу - привычка)


Насчёт инициализации переменных (я или неправильно вас понял или впервые об этом слышу), например:

double a = 0, b;

... разве этого не достаточно? Я обычно объявил переменные и пользуюсь

 
Alexandr Sokolov:

Вот всё что я увидел в поиске >>> документация (но описание каждого читать не стал, всегда по заголовку нахожу - привычка)

***

Плохая привычка


Alexandr Sokolov:


... разве этого не достаточно? Я обычно объявил переменные и пользуюсь

А вот и "черный лебедь" - переменная b не инициализирована, она может содержать любой мусор.

 
Alexandr Sokolov:

Что может значить "inf' в индикаторе на MLQ5?

Впервые с этим столкнулся а по поиску в документации ничего не нашел

Я понял в чём проблема!

Если вы инициализировали буферы EMPTY_VALUE

ArrayInitialize(Bufer,EMPTY_VALUE);

... после в дальнейших расчётах скопировали или рассчитали недостаточное количество таймсерий и потом умножаете какое-либо значение на EMPTY_VALUE из буфера - то получится inf


Вот я только что алертил, и только при умножении на EMPTY_VALUE получается inf


 
Vladimir Karputov:

Спасибо

 
Alexandr Sokolov:

Я понял в чём проблема!

Если вы инициализировали буферы EMPTY_VALUE

... после в дальнейших расчётах скопировали или рассчитали недостаточное количество таймсерий и потом умножаете какое-либо значение на EMPTY_VALUE из буфера - то получится inf


Вот я только что алертил, и только при умножении на EMPTY_VALUE получается inf


Похоже Вы нашли причину. Значит при инициализации буфера значением EMPTY_VALUE при арифметических действиях нужно сначала проверять "а не EMPTY_VALUE  ли случайно сейчас в буфере по данному индексу?"

Причина обращения: