Ошибки, баги, вопросы - страница 1823

 
с чем может быть связано такое?

показывает огромное расширение спреда, при этом в стакане спред обычный.

в терминале открыт 1 чарт с 5000 барами,ни скриптов,ни советников,ни индкаторов не запущено,т.е. нельзя все свалить на тормоза стакана,т.к. в стакане еще приличная ликвидность,которую никто не поглощает. слева на тиковом графике видна прям пила из-за спреда.

фьючерс dax индекса на демо амр

 
После переключения на другой торговый сервер или после помещения чарта ранее не использовавшегося символа запуск скрипта
#define TOSTRING(A) #A + " = " + (string)(A) + "\n"

void OnStart()
{

  Print(TOSTRING(AccountInfoString(ACCOUNT_SERVER)) +
        TOSTRING(AccountInfoString(ACCOUNT_CURRENCY)) +
        TOSTRING(SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)));
  
  MqlTick Tick;
  
  double Margin;
  
  if (SymbolInfoTick(_Symbol, Tick) && OrderCalcMargin(ORDER_TYPE_BUY, _Symbol, 10, Tick.ask, Margin))
    Print(Margin);
  else
    Print("ERROR: " + (string)GetLastError());
}

выдает

2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_SERVER) = MetaQuotes-Demo
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_CURRENCY) = EUR
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE) = 0.0
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)      
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       0.0

2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_SERVER) = MetaQuotes-Demo
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_CURRENCY) = EUR
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE) = 0.6741345252135286
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)      
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       943.58


Это результат двух запусков. Первый - помечен желтым. OrderCalcMargin и TickValue выдают нули - БАГ. Повторный запуска всегда выдает правильные значения. 

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

выдает

2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_SERVER) = MetaQuotes-Demo
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_CURRENCY) = EUR
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE) = 0.0
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)      
2017.02.28 14:09:05.139 Test2 (USDSGD,H1)       0.0

2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_SERVER) = MetaQuotes-Demo
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       AccountInfoString(ACCOUNT_CURRENCY) = EUR
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE) = 0.6741345252135286
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)      
2017.02.28 14:09:16.156 Test2 (USDSGD,H1)       943.58


Это результат двух запусков. Первый - помечен желтым. OrderCalcMargin и TickValue выдают нули - БАГ. Повторный запуска всегда выдает правильные значения. 

Символ SGDJPY выбран в обзоре рынка?
 
Slawa:
Символ SGDJPY выбран в обзоре рынка?

Выбран. Нулевой результат случается только после первого запуска и не обязательно на SGD-символах.

В исходник SGDJPY случайно попал. Результат представлен уже для исправленной версии, где вместо "SGDJPY" стоит _Symbol.

Получилось воспроизвести? 

 
fxsaber:

Выбран. Нулевой результат случается только после первого запуска и не обязательно на SGD-символах. 

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

// Исключим деление на "0"
  if(TickSizeSymbol==0 || TickValueSymbol==0) return;
При первом тике возвращает ноль, при последующих нормальные значения
 
ivanivan_11:
с чем может быть связано такое?

показывает огромное расширение спреда, при этом в стакане спред обычный.

в терминале открыт 1 чарт с 5000 барами,ни скриптов,ни советников,ни индкаторов не запущено,т.е. нельзя все свалить на тормоза стакана,т.к. в стакане еще приличная ликвидность,которую никто не поглощает. слева на тиковом графике видна прям пила из-за спреда.

фьючерс dax индекса на демо амр

техподдержка сообщила,что решают эту проблему сейчас.

однако вопрос все равно остался - откуда сервер берет аск и бид цены мимо стакана. что надо было намутить для этого.
 
Вынужден здесь задать вопрос, так как в теме по МТ4 никто из разработчиков не отвечает:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 4 build 1045

Artyom Trishkin, 2017.02.28 19:52

2017.03.01 01:43:30.843 MetaTrader 4 build 1052 started (MetaQuotes Software Corp.)
2017.03.01 01:43:30.844 Windows 10 Home (x64 based PC), IE 11.00, UAC, 4 x Intel Core i3-3217U  @ 1.80GHz, RAM: 1540 / 5005 Mb, HDD: 10397 / 260234 Mb, GMT+07:00
2017.03.01 01:43:30.844 Data Folder: D:\New MT4
Продолжается эпопея с ошибкой:
EX4 write error         0       0
Есть кто-нибудь, кто сталкивался? Помогает только перезагрузка windows

Ошибка тянется с билда 1045.
 
Artyom Trishkin:
Запуск от администратора не помогает?
 
Комбинатор:
Запуск от администратора не помогает?
Не пробовал. Раньше, до билда 1045 такого не встречалось. Причём и сейчас не постоянно. Можно проработать пол-дня, и только потом нарваться на эту ошибку.

Что заметил сейчас - хотел уже перезагружать windows, закрыл редактор mql5, закрыл редактор mql4, закрыл терминалы МТ5 и МТ4. Но что-то потребовалось в редакторе mql4 посмотреть. Вновь его открыл и, о чудо!!..., файл скомпилировался. Теперь вот грешу на одновременную работу двух редакторов - mql4 и mql5. Странно, что в них не открыты одинаковые файлы из разных каталогов.

Но, понаблюдаю за их совместной работой.
 
fxsaber:

Выбран. Нулевой результат случается только после первого запуска и не обязательно на SGD-символах.

В исходник SGDJPY случайно попал. Результат представлен уже для исправленной версии, где вместо "SGDJPY" стоит _Symbol.

Получилось воспроизвести?

На четверке то же самое. У меня даже коммент стоит, чтобы это не забыть. Сейчас обновил МТ4 до 1052 - бяку не убрали. Запуск под администратором не помогает (ответ Комбинатору)

Вот код функции для MQL4, использую в индикаторе, вызывается в OnCalculate. Если добавить индикатор на чарт - все ОК. Но если перезапустить терминал - несколько нулевых значений, смотрите вывод в конце поста.  

bool Quote2Price(double diff,double &price4lot,string symbol="EURUSD")
  {
   int dig=(int)MarketInfo(symbol,MODE_DIGITS);
   if(dig == 0)
      return(false); // symbol is none
   double tickSizeMarketInfo = MarketInfo(symbol, MODE_TICKSIZE);   // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
   double tickValue, tickSize2;
   if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
      Print(__FUNCTION__, "  SymbolInfoDouble(...SYMBOL_TRADE_TICK_VALUE) returns false");
   if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE, tickSize2)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
      Print(__FUNCTION__, "  SymbolInfoDouble(...SYMBOL_TRADE_TICK_SIZE) returns false");
      
   Print("tickSizeMarketInfo= ", tickSizeMarketInfo, "  tickSize2= ", tickSize2, "  tickValue= ", tickValue);
   if(tickSizeMarketInfo == 0 || tickSize2 == 0 || tickValue == 0.0)
      return false;
   double price=diff/(tickSize2/tickValue);
   price4lot=NormalizeDouble(price,2);
   return (true);
  }


 Вывод после перезапуска терминала:

 2017.03.01 00:31:43.588 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 1.0

2017.03.01 00:31:43.460 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 1.0

2017.03.01 00:31:43.351 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 1.0

2017.03.01 00:31:42.961 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 0.0

2017.03.01 00:31:42.910 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 0.0

2017.03.01 00:31:42.866 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 0.0

2017.03.01 00:31:42.301 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 0.0

2017.03.01 00:31:41.116 ShowImportantParams EURUSD.e,M5: tickSizeMarketInfo= 1e-05  tickSize2= 1e-05  tickValue= 0.0

2017.03.01 00:31:41.116 ShowImportantParams EURUSD.e,M5: initialized

2017.03.01 00:31:41.080 Custom indicator ShowImportantParams EURUSD.e,M5: loaded successfully