Баг в функции SymbolInfoDouble() ??? - страница 2

 
elugovoy:

Подготовлю пример и видео наверное... запускаю на 5-ти терминалах, на 3-х терминалах работает норм, на 2-х такие баги. Брокер один, билды терминалов одинаковые, операционка одна, все идентично.

А не при старте ли терминала?

Вообще как вариант делать это не в ините а при первом вызове ОнТик

 

Ребята, нашел еще одну "фишку". Скриншот тестовой программы и результата.

Ошибка выбранных символов 

Выбираю все символы из MarketWatch. Там 5 пар. SymbolsTotal с режимом TRUE!!!

Каким боком выходит шестая EURJPY? Подчеркнул красным специально.

Что за ? 

 
elugovoy:

Ребята, нашел еще одну "фишку". Скриншот тестовой программы и результата.

 

Выбираю все символы из MarketWatch. Там 5 пар. SymbolsTotal с режимом TRUE!!!

Каким боком выходит шестая EURJPY? Подчеркнул красным специально.

Что за ? 

Терминал перезагружали, после того как 5 пар оставили?

Видел такое, что терминал не всегда запоминает последний список MarketWatch, в частности, если добавить символ, не дождаться загрузки истории, опять поменять список и перезагрудить терминал. Как то такая последовательность - и список остаётся старый.

Билд не помню на каком, но из последни рабочих (уже у брокера).

 
Silent:

Терминал перезагружали, после того как 5 пар оставили?

Видел такое, что терминал не всегда запоминает последний список MarketWatch, в частности, если добавить символ, не дождаться загрузки истории, опять поменять список и перезагрудить терминал. Как то такая последовательность - и список остаётся старый.

Билд не помню на каком, но из последни рабочих (уже у брокера).

Пары добавлены давно, история загружена до закрытия маркета в пятницу. Терминал перегружал уже десятки раз.

 
elugovoy:

Пары добавлены давно, история загружена до закрытия маркета в пятницу. Терминал перегружал уже десятки раз.

А переключаться между торговыми серверами не пробовали? При таком переключении MarketWatch может кардинально меняться.
 
barabashkakvn:

Проверил на двух терминалах MetaTrader 4 build 765 (MetaQuotes Software Corp.) - на двух системах: Windows 8.1 64-разрядная и Windows 8.1 32-разрядная. Вызов отдельной функции из OnInit(). Возвращаемые значения корректные.

P.S. Проверял на двух разных торговых серверах. Так-же результат корректный. 


Володя попробуй так:

#property copyright "Copyright 2014, SwipeStox."
#property link      "http://www"
#property version   "1.0"

#include <stdlib.mqh>
#include <MqlAdoDB.mqh>       // attach MQLAdoDB interface library for database connectivity
#include "SSEA-D.mqh"



int OnInit()
{
 Comment ("Init");
 
 // Symbols initialization

 string symbol;
 int st,i,digits;
 double tick_value;
 double v_ask, v_bid;
 
 st = SymbolsTotal(false);
 
 // enable all market symbols
 for (i=0; i<st; i++)
     {
      symbol = SymbolName(i, false);
      SymbolSelect(symbol, true);
     }
 
 // disable unused symbols
 st = SymbolsTotal(true);
 for (i=st-1; i>=0; i--)
     {
       symbol = SymbolName(i,true);
       if (
           symbol != "EURUSD" && 
           symbol != "EURGBP" && 
           symbol != "GBPUSD" && 
           symbol != "GBPJPY" && 
           symbol != "USDJPY" 
          )
          {
           SymbolSelect(symbol, false);
          }
     }
 
 st = SymbolsTotal(true);
 for (i=0; i<st; i++)
     {
      symbol = SymbolName(i, true);
      digits = SymbolInfoInteger(symbol, SYMBOL_DIGITS);
      tick_value = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE);
      v_ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
      v_bid = SymbolInfoDouble(symbol, SYMBOL_BID);
      
      Print ("Symbol: ", symbol, ", digits:", digits, ", Ask:",v_ask,", Bid:",v_bid,", TickValue:",tick_value);
     }

 return (INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
 Comment ("");
}

void OnTick()
{
}

 Скорее всего из-за enable/disable инструментов в MarketWatch. Но MT4 не генерит никакой ошибки по этому поводу (проверял раньше)...

У меня результат такой:

2014.12.21 15:17:55.351 Expert Advisor EURUSD,H1: Symbol: USDJPY, digits:3, Ask:119.577, Bid:119.453, TickValue:-1.#IND
2014.12.21 15:17:55.351 Expert Advisor EURUSD,H1: Symbol: GBPJPY, digits:3, Ask:186.867, Bid:186.668, TickValue:-1.#IND
2014.12.21 15:17:55.351 Expert Advisor EURUSD,H1: Symbol: GBPUSD, digits:5, Ask:1.5636, Bid:1.5621, TickValue:0.8181
2014.12.21 15:17:55.351 Expert Advisor EURUSD,H1: Symbol: EURGBP, digits:5, Ask:0.7832, Bid:0.7817, TickValue:1.2792
2014.12.21 15:17:55.351 Expert Advisor EURUSD,H1: Symbol: EURUSD, digits:5, Ask:1.2233, Bid:1.2224, TickValue:0.8181

 Подозреваю что связано также с закрытым состоянием маркета... в понедельник проверю на живом.

 
barabashkakvn:
А переключаться между торговыми серверами не пробовали? При таком переключении MarketWatch может кардинально меняться.
У брокера 3 демо сервера. Сечас переключался и перезапускал эксперт. Картина та же.
 

Продолжаю расследование. Сравнил терминал где выполняется нормально и где валит ошибки.

TickValue возвращает правильно:

TVOK 

TickValue с ошибкой

TVERR 

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

Брокер один и тот же, сервера используются те же, почему расхождение на момент закрытия... х.з. ну это другая история.

Почему же по этим 2-м парам, по которым котировки шли до момента закрытия рынка как и по всем остальным инструментам терминал нагло возвращает -1.#IND и даже не генерит LastError при этом.

То есть робот получит подобное значение и примет в работу, даже при наличии соответствующей обработки ошибки (есть перечень в документации).

Это же нонсенс. 

 
elugovoy:
У брокера 3 демо сервера. Сечас переключался и перезапускал эксперт. Картина та же.

Я имел в виду переключаться меджу разными торговыми счетами - т.е. переключаться между разными торговыми организациями.

 

elugovoy:

Володя попробуй так:

 Скорее всего из-за enable/disable инструментов в MarketWatch. Но MT4 не генерит никакой ошибки по этому поводу (проверял раньше)...

У меня результат такой:

 Подозреваю что связано также с закрытым состоянием маркета... в понедельник проверю на живом.

После переключения на другой торговый счёт получил результат в нулём:

0 18:10:25.499 test_expert EURUSD,Weekly: uninit reason 6

0 18:10:25.531 test_expert EURUSD,Weekly: Symbol: GBPUSD, digits:4, Ask:1.5627, Bid:1.5624, TickValue:0

0 18:10:25.531 test_expert EURUSD,Weekly: Symbol: EURUSD, digits:4, Ask:1.2229, Bid:1.2227, TickValue:0

0 18:10:25.531 test_expert EURUSD,Weekly: Symbol: USDJPY, digits:2, Ask:119.56, Bid:119.53, TickValue:0

0 18:10:25.531 test_expert EURUSD,Weekly: Symbol: EURGBP, digits:4, Ask:0.7828, Bid:0.7825, TickValue:0

0 18:10:25.531 test_expert EURUSD,Weekly: Symbol: GBPJPY, digits:2, Ask:186.81, Bid:186.73, TickValue:0

0 18:10:25.531 test_expert EURUSD,Weekly: initialized

 Здесь нужно подумать, но скорее всего следует проверять готовность окружения.

 

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

Два дня простоя из-за разбирательств $600, MQ мне не оплатит свою промашку, даже если признают и в следующем билде исправят.

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