Ошибки, баги, вопросы - страница 1786
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Замерял десять минут на Si.
Третье, даже если с SymbolInfoTick() все в порядке - она все равно работает лучше, чем CopyTicks(), т.к. зачастую возвращает более актуальные значения.
Ловил ситуации, когда CopyTicks отдавал более свежие данные, чем SymbolInfoTick, вызванный ПОЗЖЕ. Поэтому делаю запрос сразу двумя функциями и выбираю наиболее свежий из них тик.
SymbolInfoTick в индикаторах работает совсем не так, как в советниках.
В индикаторе она возвращает всегда тот тик, который был инициатором вызова OnCalculate. И эти инициаторные тики в индикаторе не должны пропускаться - идеология разработчиков. Проблема в формировании очереди этих тиков.
В советнике же SymbolInfoTick в OnTick вовсе не возвращает тик, который инициировал запуск OnTick, а делает полноценный запрос на текущее состояние.
Тогда логично было бы дополнить
тиком который ее вызвал, тем более что это ничего не стоит
А функцию SymbolInfoTick() сделать полноценной и в Индикаторе и в Советнике (возвращать текущие цены, а не цены на момент формирования вызова OnCalculate)
MT4 продолжает поражать непредсказуемостью )) Кто пишет реализацию торговых функций?? МТ4 build 1045
Начнем с юмористической справки, ее давно пора Задорнову отослать, а то все на тупых американцев наезжает.
SYMBOL_TRADE_TICK_VALUE
Значение SYMBOL_TRADE_TICK_VALUE_PROFIT
double
SYMBOL_TRADE_TICK_VALUE_PROFIT
Не поддерживается
double
SYMBOL_TRADE_TICK_VALUE_LOSS
Не поддерживается
double
Между тем SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue) выдает значение. НО!!!!! Если кинуть индикатор на график, то при старте все будет ОК. А если перезапустить терминал, то данная функция при первых обращениях вернет true и ноль в результате tickValue!! Так что не расслабляйтесь, г. разработчики экспертов, все надо проверять своими руками.
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 tickSize = MarketInfo(symbol, MODE_TICKSIZE); // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
//double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
double tickValue;
if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
Print(__FUNCTION__, " SymbolInfoDouble(...) returns false"); // всегда возвращается true!!
Print("tickSize= ", tickSize, " tickValue= ", tickValue);
if(tickValue == 0.0) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
return false;
double price=diff/(tickSize/tickValue); // а то завалимся c tickValue == 0
price4lot=NormalizeDouble(price,2);
return (true);
}
Выход:
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: initialized
2017.02.07 16:08:23.002 Custom indicator ShowImportantParams EURUSD.e,M15: loaded successfully
Тогда логично было бы дополнить
тиком который ее вызвал, тем более что это ничего не стоит
А функцию SymbolInfoTick() сделать полноценной и в Индикаторе и в Советнике (возвращать текущие цены, а не цены на момент формирования вызова OnCalculate)
Логично даже добавить номер тика в текущей очереди.
Логично даже добавить номер тика в текущей очереди.
Тогда я прямо так и пишу в ServiceDesk#1666680
Просим рассмотреть возможность изменения принципов работы функции
с тем, чтобы в Индикаторах (включая тело OnCalculate) она возвращала текущие цены, согласно своему описанию
одновременно дополнив язык функцией
которая возвращала бы в функции OnCalculate символ и конкретный tick послужившие причиной вызова OnCalculate
или как альтернатива (*) : дополнить этими параметрами вызов OnCalculate
Возник вопрос: можно ли как-то средствами mql5 определить все запущенные программы на графиках и их имена? В частности, интересует как можно получить имена всех индикаторов на текущем графике?
Возник вопрос: можно ли как-то средствами mql5 определить все запущенные программы на графиках и их имена? В частности, интересует как можно получить имена всех индикаторов на текущем графике?
https://www.mql5.com/ru/docs/chart_operations/chartindicatorname
https://www.mql5.com/ru/docs/chart_operations/chartgetstring
https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property#enum_chart_property_string