Всем привет!
Сразу оговорюсь, что пробовал задать эти вопросы в соответствующей теме тут, но как-то вопрос не вызвал должного внимания. Хотя, как мне кажется, затронутые темы многих хотя бы раз касаются/возникают в голове. Что-то типа вопросов из FAQ (хотя может и ошибаюсь). Продублирую здесь непосредственно сами вопросы:
1. Разница между Mql4 и Mql5 (сайт и собственно язык программирования). Есть Metatrade 4 и Metatrader 5 с соответственно встроенными Mql4 и Mql5. Есть и два разных соответствующих сайта. При этом все те эксперты, которые я смотрел в MT4 ведут на этот сайт. Какой же более актуальный? Какой форум "живее"? Где лучше писать вопросы? Обратная совместимость между разными версиями MT и Mql? Я лично сейчас пишу эксперта в MT4 на Mql4 соответственно. Связано это с тем, что брокер, у которого я использую демку для тестирования, использует MT4. ...
...
Логично вопросы по MQL4 адресовать на "четвёртый" форум. Хотя, различия между MQL5 и MQL4 уже не значительные. Переход с MQL4. Поэтому, если вопрос по "четвёрке" Вы хотите задавать на этом форуме, то лучше в названии темы прямо указывать, что вопрос по MT4. Так будет понятнее.
...
Логично вопросы по MQL4 адресовать на "четвёртый" форум. Хотя, различия между MQL5 и MQL4 уже не значительные. Переход с MQL4. Поэтому, если вопрос по "четвёрке" Вы хотите задавать на этом форуме, то лучше в названии темы прямо указывать, что вопрос по MT4. Так будет понятнее.
По второму вопросу смотрите input, sinput, ParametrGetRange(...), ParametrSetRange(...).
Я не спрашивал, как задавать внешние параметры эксперта. Это я уже давно научился делать (input, extern). Я спрашивал, как и возможно ли динамически изменять набор отображаемых в настройках параметров? ParametrGetRange и ParametrSetRange в mql не нашел. Это не встроенные функции? Где их искать?
P.S. Использование sinput можно лишь использовать, как подсказку, что параметр нельзя оптимизировать сам по себе без связки с другими параметрами. Но я же не могу динамически даже input на sinput менять в зависимости от уже выбранных параметров, чтобы подсказать, какие параметры в оптимизации надо гонять (какие параметры имеют значение при данных выбранных параметрах), чтобы не тратить лишнее время на прогон ничего в данный момент не значащих параметров
На вкладке "Параметры" программно изменить ничего нельзя. Пропустить инвалидный набор параметров можно вернув INIT_PARAMETERS_INCORRECT из OnInit().
Изменить старт, шаг, стоп и разрешение на оптимизацию программно можно: https://www.mql5.com/ru/docs/optimization_frames
- www.mql5.com
На вкладке "Параметры" программно изменить ничего нельзя. Пропустить инвалидный набор параметров нельзя - можно включить заглушку, чтобы не делать лишних вычислений.
Изменить старт, шаг, стоп и разрешение на оптимизацию программно можно: https://www.mql5.com/ru/docs/optimization_frames
Тема названа "базовые вопросы от новичка", а я как новичок нечего не понял. Ну, значит, здесь я на свой элементарный вопрос точно (вернее - надеюсь) ответ получу. Пытаюсь следуя за пошаговым руководством по написанию советника написать своего робота. Застрял на таком моменте: как в МКЛ5 принудительно закрыть открытую позицию ( не дожидаясь СЛ или ТП) при сформировании определенного сигнала индикаторов, например, при пересечении двух МА, или при сужении линий Болинджера, или других сигналах? Должна же быть функция вроде ClosePos(), но где она и как её извлечь? Прошу подробный кусок кода, т.к. сам до нюансов не допетрю - в МКЛ5 еще младенец.
Тема названа "базовые вопросы от новичка", а я как новичок нечего не понял. Ну, значит, здесь я на свой элементарный вопрос точно (вернее - надеюсь) ответ получу. Пытаюсь следуя за пошаговым руководством по написанию советника написать своего робота. Застрял на таком моменте: как в МКЛ5 принудительно закрыть открытую позицию ( не дожидаясь СЛ или ТП) при сформировании определенного сигнала индикаторов, например, при пересечении двух МА, или при сужении линий Болинджера, или других сигналах? Должна же быть функция вроде ClosePos(), но где она и как её извлечь? Прошу подробный кусок кода, т.к. сам до нюансов не допетрю - в МКЛ5 еще младенец.
Я сам этим занимаюсь меньше месяца. Тут вопрос в желании копаться самому или же спрашивать на форуме. Простые вопросы обычно не спрашиваю, потому что как-то несолидно (можно в хэлпе покапаться, поискать уже готовые ответы в интернете). Поэтому спросил те довольно обширные вопросы, которые появились в течение этого месяца. Что касаемо вашего вопроса... OrderClose функция называется. Примеров использования уйма. В том же встроенном MACD Sample. Вот код из него для закрытия ордеров по сигналам MACD (тут же пример кода, как реализовывать механизм Trailing Stop)
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
//--- long position is opened
if(OrderType()==OP_BUY)
{
//--- should it be closed?
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else // go to short position
{
//--- should it be closed?
if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
Я сам этим занимаюсь меньше месяца. Тут вопрос в желании копаться самому или же спрашивать на форуме. Простые вопросы обычно не спрашиваю, потому что как-то несолидно (можно в хэлпе покапаться, поискать уже готовые ответы в интернете). Поэтому спросил те довольно обширные вопросы, которые появились в течение этого месяца. Что касаемо вашего вопроса... OrderClose функция называется. Примеров использования уйма. В том же встроенном MACD Sample. Вот код из него для закрытия ордеров по сигналам MACD (тут же пример кода, как реализовывать механизм Trailing Stop)
Спасибо за столь быстрый ответ! Я так и думал, что скорее всего ответит тот, кто недавно этим занимается.
Только вот OrderClose есть в МКЛ4, а в МКЛ5 ее нет. Есть только в стандартной библиотеке в CTrade классе функция PositionClose. И мне совсем не понятно, как ее оттуда извлечь. Я думаю, для этого как-то надо из кода обратиться к библиотеке, потом к классу CTrade.... В общем, для меня это темный лес. Изучать МКЛ5 я не собирался, просто решил автоматизировать свою довольно успешную (для меня) стратегию, поэтому и начал просто следовать пошаговой инструкции. И вот застрял...
Спасибо за столь быстрый ответ! Я так и думал, что скорее всего ответит тот, кто недавно этим занимается.
Только вот OrderClose есть в МКЛ4, а в МКЛ5 ее нет. Есть только в стандартной библиотеке в CTrade классе функция PositionClose. И мне совсем не понятно, как ее оттуда извлечь. Я думаю, для этого как-то надо из кода обратиться к библиотеке, потом к классу CTrade.... В общем, для меня это темный лес. Изучать МКЛ5 я не собирался, просто решил автоматизировать свою довольно успешную (для меня) стратегию, поэтому и начал просто следовать пошаговой инструкции. И вот застрял...
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Сразу оговорюсь, что пробовал задать эти вопросы в соответствующей теме тут, но как-то вопрос не вызвал должного внимания. Хотя, как мне кажется, затронутые темы многих хотя бы раз касаются/возникают в голове. Что-то типа вопросов из FAQ (хотя может и ошибаюсь). Продублирую здесь непосредственно сами вопросы:
1. Разница между Mql4 и Mql5 (сайт и собственно язык программирования). Есть Metatrade 4 и Metatrader 5 с соответственно встроенными Mql4 и Mql5. Есть и два разных соответствующих сайта. При этом все те эксперты, которые я смотрел в MT4 ведут на этот сайт. Какой же более актуальный? Какой форум "живее"? Где лучше писать вопросы? Обратная совместимость между разными версиями MT и Mql? Я лично сейчас пишу эксперта в MT4 на Mql4 соответственно. Связано это с тем, что брокер, у которого я использую демку для тестирования, использует MT4. Как определить язык, на котором написан эксперт? В смысле только по расширению (.mq4 и .mq5). А если файл переименовать, будет ли он компилироваться (это опять же про совместимость)?
2. Динамические внешние параметры эксперта. Можно ли как-то динамически менять настраиваемые параметры эксперта. Поясню... Например есть внешний параметр extern bool a. Если он равен true, то нужно настраивать дополнительный параметр extern int b. Если же а=false, то параметр b не нужен. Можно ли как-то его отображать/не отображать в зависимости от выбранного текущего значения а? Учитывая, что обработчиков изменения внешних параметров не нашел, и нет конструкции типа #if .. #endif, то подозреваю, что это сделать нельзя... Если это так, но не подскажите, как лучше поступать в этой ситуации, чтобы не перегружать процесс настройки внешних параметров? Например, можно поставить a=false, забыть, что параметр b при этом не используется, но все равно включить его в оптимизацию (хотя смысла в этом не будет, только лишнее время потратится). И одно дело, когда такой параметр b всего один. А, если например, я делаю enum внешний параметр и там несколько выпадающих вариантов ТС. У них есть общая часть (потому их логично реализовывать внутри одного эксперта, а не писать несколько), но есть и различные с множеством разных параметров. Тогда очень легко запутаться, какие параметры актуальны для выбранной ТС.
3. Автоматическая оптимизация эксперта. ИМХО, очень удобная и нужная вещь. Нашел вот Автоматическая оптимизация торгового робота в процессе реальной торговли статью. Но там, как я понял, используется второй экземпляр MT, который запускается на оптимизацию из вне (из работающего экземпляра MT), а результаты оптимизации читаются из отчета в виде html. Это не очень удобно и кривовато. По логике надо писать свою функцию/dll для оптимизации и напрямую запускать ее из эксперта. Так вот собственно вопрос. Как я понял, в самом MT в тестере стратегий запрограммирован генетический алгоритм оптимизации. Очень поверхностно знаю про эти алгоритмы. Но по идее они давно известны, отсюда вопрос - зачем изобретать велосипед?) Есть ли готовый алгоритм, который используется непосредственно в MT? Может он уже есть где-то в библиотеках самого терминала... Может есть отдельно исходники или готовая dll. В общем, поделитесь, пожалуйста, опытом в этом вопросе.
Заранее спасибо за ответы хотя бы на часть из этих вопросов.