Ошибки, баги, вопросы - страница 1823
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
показывает огромное расширение спреда, при этом в стакане спред обычный.
в терминале открыт 1 чарт с 5000 барами,ни скриптов,ни советников,ни индкаторов не запущено,т.е. нельзя все свалить на тормоза стакана,т.к. в стакане еще приличная ликвидность,которую никто не поглощает. слева на тиковом графике видна прям пила из-за спреда.
фьючерс dax индекса на демо амр
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_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 выдают нули - БАГ. Повторный запуска всегда выдает правильные значения.
После переключения на другой торговый сервер или после помещения чарта ранее не использовавшегося символа запуск скрипта
выдает
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 выбран в обзоре рынка?
Выбран. Нулевой результат случается только после первого запуска и не обязательно на SGD-символах.
В исходник SGDJPY случайно попал. Результат представлен уже для исправленной версии, где вместо "SGDJPY" стоит _Symbol.
Получилось воспроизвести?
Выбран. Нулевой результат случается только после первого запуска и не обязательно на SGD-символах.
Да, есть иногда такое дело на разных парах, и всегда на золоте, хотя раньше этого не замечал. Пришлось добавить в код такую штуку.
if(TickSizeSymbol==0 || TickValueSymbol==0) return;
с чем может быть связано такое?
показывает огромное расширение спреда, при этом в стакане спред обычный.
в терминале открыт 1 чарт с 5000 барами,ни скриптов,ни советников,ни индкаторов не запущено,т.е. нельзя все свалить на тормоза стакана,т.к. в стакане еще приличная ликвидность,которую никто не поглощает. слева на тиковом графике видна прям пила из-за спреда.
фьючерс dax индекса на демо амр
однако вопрос все равно остался - откуда сервер берет аск и бид цены мимо стакана. что надо было намутить для этого.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 4 build 1045
Artyom Trishkin, 2017.02.28 19:52
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
Запуск от администратора не помогает?
Что заметил сейчас - хотел уже перезагружать windows, закрыл редактор mql5, закрыл редактор mql4, закрыл терминалы МТ5 и МТ4. Но что-то потребовалось в редакторе mql4 посмотреть. Вновь его открыл и, о чудо!!..., файл скомпилировался. Теперь вот грешу на одновременную работу двух редакторов - mql4 и mql5. Странно, что в них не открыты одинаковые файлы из разных каталогов.
Но, понаблюдаю за их совместной работой.
Выбран. Нулевой результат случается только после первого запуска и не обязательно на SGD-символах.
В исходник SGDJPY случайно попал. Результат представлен уже для исправленной версии, где вместо "SGDJPY" стоит _Symbol.
Получилось воспроизвести?
На четверке то же самое. У меня даже коммент стоит, чтобы это не забыть. Сейчас обновил МТ4 до 1052 - бяку не убрали. Запуск под администратором не помогает (ответ Комбинатору)
Вот код функции для MQL4, использую в индикаторе, вызывается в OnCalculate. Если добавить индикатор на чарт - все ОК. Но если перезапустить терминал - несколько нулевых значений, смотрите вывод в конце поста.
{
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