Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не нашел нужную программу? Закажи ее!
gammaray
255
gammaray 2015.07.16 12:09 

Всем привет!

Сразу  оговорюсь, что пробовал задать эти вопросы в соответствующей теме тут, но как-то вопрос не вызвал должного внимания. Хотя, как мне кажется, затронутые темы многих хотя бы раз касаются/возникают в голове. Что-то типа вопросов из 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. В общем, поделитесь, пожалуйста, опытом в этом вопросе.

 Заранее спасибо за ответы хотя бы на часть из этих вопросов. 

Vladimir Karputov
Модератор
38070
Vladimir Karputov 2015.07.16 12:28  
gammaray:

Всем привет!

Сразу  оговорюсь, что пробовал задать эти вопросы в соответствующей теме тут, но как-то вопрос не вызвал должного внимания. Хотя, как мне кажется, затронутые темы многих хотя бы раз касаются/возникают в голове. Что-то типа вопросов из FAQ (хотя может и ошибаюсь). Продублирую здесь непосредственно сами вопросы:

1. Разница между Mql4 и Mql5  (сайт и собственно язык программирования). Есть Metatrade 4 и Metatrader 5 с соответственно встроенными Mql4 и Mql5. Есть и два разных соответствующих сайта. При этом все те эксперты, которые я смотрел в MT4 ведут на этот сайт. Какой же более актуальный? Какой форум "живее"? Где лучше писать вопросы? Обратная совместимость между разными версиями MT и Mql? Я лично сейчас пишу эксперта в MT4 на Mql4 соответственно. Связано это с тем, что брокер, у которого я использую демку для тестирования, использует MT4. ...

...

Логично вопросы по MQL4 адресовать на "четвёртый" форум. Хотя, различия между MQL5 и MQL4 уже не значительные. Переход с MQL4. Поэтому, если вопрос по "четвёрке" Вы хотите задавать на этом форуме, то лучше в названии темы прямо указывать, что вопрос по MT4. Так будет понятнее.


... Как определить язык, на котором написан эксперт? В смысле только по расширению (.mq4 и .mq5). А если файл переименовать, будет ли он компилироваться (это опять же про совместимость)?

...

По расширению. Есть файлы которые после переименования прекрасно компилируются и работают и в MT4 и MT5 - тут нет общих рецептов.
gammaray
255
gammaray 2015.07.16 12:44  
Karputov Vladimir:

Логично вопросы по MQL4 адресовать на "четвёртый" форум. Хотя, различия между MQL5 и MQL4 уже не значительные. Переход с MQL4. Поэтому, если вопрос по "четвёрке" Вы хотите задавать на этом форуме, то лучше в названии темы прямо указывать, что вопрос по MT4. Так будет понятнее.


По расширению. Есть файлы которые после переименования прекрасно компилируются и работают и в MT4 и MT5 - тут нет общих рецептов.
Тут только первый вопрос касается mql4, остальные ИМХО общие для mql4 и mql5. Спасибо за ответ на первый вопрос;) Больше всего в данный момент интересует второй вопрос. Ну а третий вопрос ИМХО может быть интересен всем экспертописателям)
Vladimir Kazakov
5305
Vladimir Kazakov 2015.07.16 13:20  
По второму вопросу смотрите input, sinput, ParametrGetRange(...), ParametrSetRange(...).
gammaray
255
gammaray 2015.07.16 14:26  
Vladimir Kazakov:
По второму вопросу смотрите input, sinput, ParametrGetRange(...), ParametrSetRange(...).

Я не спрашивал, как задавать внешние параметры эксперта. Это я уже давно научился делать (input, extern). Я спрашивал, как и возможно ли динамически изменять набор отображаемых в настройках параметров? ParametrGetRange и ParametrSetRange в mql не нашел. Это не встроенные функции? Где их искать?

P.S. Использование sinput можно лишь использовать, как подсказку, что параметр нельзя оптимизировать сам по себе без связки с другими параметрами. Но я же не могу динамически даже input на sinput менять в зависимости от уже выбранных параметров, чтобы подсказать, какие параметры в оптимизации надо гонять (какие параметры имеют значение при данных выбранных параметрах), чтобы не тратить лишнее время на прогон ничего в данный момент не значащих параметров

Vladimir Kazakov
5305
Vladimir Kazakov 2015.07.16 14:44  

На вкладке "Параметры" программно изменить ничего нельзя. Пропустить инвалидный набор параметров можно вернув INIT_PARAMETERS_INCORRECT из OnInit().

Изменить старт, шаг, стоп и разрешение на оптимизацию программно можно: https://www.mql5.com/ru/docs/optimization_frames

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Работа с результатами оптимизации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
gammaray
255
gammaray 2015.07.16 15:03  
Vladimir Kazakov:

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

Изменить старт, шаг, стоп и разрешение на оптимизацию программно можно: https://www.mql5.com/ru/docs/optimization_frames

Видимо эти функции в mql5 появились, потому что у меня в справке по mql4 их нет. Тогда снова вопрос о совместимости. Если я буду писать эксперта в Metatrader 5, смогу ли я его использовать в Metatrader 4? Представляется, что вряд ли... Если особенно использовать новые функции, появившееся в mql5. А в mql5 есть функции по запуску оптимизации (это как раз касается моего 3 вопроса)?
doublezero
11
doublezero 2015.07.20 13:09  

Тема названа "базовые вопросы от новичка", а я как новичок нечего не понял. Ну, значит, здесь  я на свой элементарный вопрос точно (вернее - надеюсь) ответ получу. Пытаюсь следуя за пошаговым руководством по написанию советника написать своего робота. Застрял на таком моменте: как в МКЛ5 принудительно закрыть открытую позицию ( не дожидаясь СЛ или ТП) при сформировании определенного сигнала индикаторов, например, при пересечении двух МА, или при сужении линий Болинджера, или других сигналах? Должна же быть функция вроде ClosePos(), но где она и как её извлечь? Прошу подробный кусок кода, т.к. сам до нюансов не допетрю - в МКЛ5 еще младенец.

gammaray
255
gammaray 2015.07.20 14:37  
doublezero:

Тема названа "базовые вопросы от новичка", а я как новичок нечего не понял. Ну, значит, здесь  я на свой элементарный вопрос точно (вернее - надеюсь) ответ получу. Пытаюсь следуя за пошаговым руководством по написанию советника написать своего робота. Застрял на таком моменте: как в МКЛ5 принудительно закрыть открытую позицию ( не дожидаясь СЛ или ТП) при сформировании определенного сигнала индикаторов, например, при пересечении двух МА, или при сужении линий Болинджера, или других сигналах? Должна же быть функция вроде ClosePos(), но где она и как её извлечь? Прошу подробный кусок кода, т.к. сам до нюансов не допетрю - в МКЛ5 еще младенец.

Я сам этим занимаюсь меньше месяца. Тут вопрос в желании копаться самому или же спрашивать на форуме. Простые вопросы обычно не спрашиваю, потому что как-то несолидно (можно в хэлпе покапаться, поискать уже готовые ответы в интернете). Поэтому спросил те довольно обширные вопросы, которые появились в течение этого месяца. Что касаемо вашего вопроса... OrderClose функция называется. Примеров использования уйма. В том же встроенном MACD Sample. Вот код из него для закрытия ордеров по сигналам MACD (тут же пример кода, как реализовывать механизм Trailing Stop)


//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   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;
                    }
                 }
              }
           }
        }
     }


А вообще просто в справке по указателю слово "Order" вбейте - там все фукнции будут отображены, касающиеся управления ордерами
doublezero
11
doublezero 2015.07.20 16:16  
gammaray:

Я сам этим занимаюсь меньше месяца. Тут вопрос в желании копаться самому или же спрашивать на форуме. Простые вопросы обычно не спрашиваю, потому что как-то несолидно (можно в хэлпе покапаться, поискать уже готовые ответы в интернете). Поэтому спросил те довольно обширные вопросы, которые появились в течение этого месяца. Что касаемо вашего вопроса... OrderClose функция называется. Примеров использования уйма. В том же встроенном MACD Sample. Вот код из него для закрытия ордеров по сигналам MACD (тут же пример кода, как реализовывать механизм Trailing Stop)



Спасибо за столь быстрый ответ! Я так и думал, что скорее всего ответит тот, кто недавно этим занимается.

Только вот OrderClose есть в МКЛ4, а в МКЛ5 ее нет. Есть только в стандартной библиотеке в CTrade классе функция PositionClose. И мне совсем не понятно, как ее оттуда извлечь. Я думаю, для этого как-то надо из кода обратиться к библиотеке, потом к классу CTrade.... В общем, для меня это темный лес. Изучать МКЛ5 я не собирался, просто решил автоматизировать свою довольно успешную (для меня) стратегию, поэтому и начал просто следовать пошаговой инструкции. И вот застрял...

gammaray
255
gammaray 2015.07.20 19:41  
doublezero:

Спасибо за столь быстрый ответ! Я так и думал, что скорее всего ответит тот, кто недавно этим занимается.

Только вот OrderClose есть в МКЛ4, а в МКЛ5 ее нет. Есть только в стандартной библиотеке в CTrade классе функция PositionClose. И мне совсем не понятно, как ее оттуда извлечь. Я думаю, для этого как-то надо из кода обратиться к библиотеке, потом к классу CTrade.... В общем, для меня это темный лес. Изучать МКЛ5 я не собирался, просто решил автоматизировать свою довольно успешную (для меня) стратегию, поэтому и начал просто следовать пошаговой инструкции. И вот застрял...

Вот Что-то там в mql 5 намутили, желание переходить совсем отпало) Там все через OrderSend выполняется (в том числе закрытие). Опять же в MT5 есть такой же пример MACD Sample. Только вот занимает он в 10 раз больше строк...
Ошибка закрытия ордера
Ошибка закрытия ордера
  • www.mql5.com
Скажите а есть отдельная команда по закрытию позиции или только встречная позиция? - - Категория: эксперты форекс, торговые роботы и советники
/ /1234567
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий