Как можно легко писать программы работающие в MT4 и в MT5 кроссплатформенный код , стимул изучать ООП

 


внимание , код исключительно учебный

 
// Небольшой пример кода,  который одинаково работает в МТ4 и MT5.
// Основная фишка в использовании стандартных классов поставляемых вместе с терминалами
// В обоих платформах поставляются готовые ООП библиотеки , разработанные профессионалами METAQUOTES и разумеется имеет большой смысл их использовать и переходить на ООП
// внимание , код исключительно учебный

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Прелесть данного кода в том что он работает и на MT5 и на MT4
//////////////////////////////////////////////////////////////////////////////////////////////////////
//+------------------------------------------------------------------+
//|                                                  OOP_mt4_mt5.MQ4 |
//|                                                  OOP_mt4_mt5.MQ5 |
//|                                                                  |
//|                                     Copyright © 2006-2017, YuraZ |
//|                              https://www.mql5.com/ru/users/yuraz |
//|                                                      yzh@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006-2017, YuraZ"
#property link      "yzh@mail.ru"
#property version   "1.00"
#property strict

//////////////////////////////////////////////////////////////////////////////////////////////////////
// параметры
input  double  pTakeProfit  = 0.0050; // 50 пунктов
input  double  pStopLoss    = 0.0030;
input  double  pLots        = 0.1   ;

//////////////////////////////////////////////////////////////////////////////////////////////////////
// прикрутим стандартную торговый ООП класс
// который прекрасно работает на мт4 и на мт5
//
// Что бы писать советники, которые будут работать на обоих платформах MT4 и MT5
// достаточно изучить стандартные классы
//
#include <Trade\Trade.mqh>
CTrade trade;

//////////////////////////////////////////////////////////////////////////////////////////////////////
// тут вставляем платформозависимый код для компилятора
void КроссПлатфоменныйКодПолучим_AskBid(void)
  {
#ifdef __MQL5__  // мт5 получить Ask и Bid    
   dBid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
   dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
#endif
#ifdef __MQL4__
   dBid=Bid;  // старый добрый мт4  более прост
   dAsk=Ask;  // но уступает мт5 в функционале
#endif
  
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
//  глобальные
int      OO;
// для Ask и Bid пришлось лепить глобальные переменные для организации Кроссплатформенности
double dBid;        
double dAsk;


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit(void)
  {
   OO=0;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   КроссПлатфоменныйКодПолучим_AskBid(); // Так тоже можно - и тогда можно даже не писать комментарии , читая код - все предельно понятно
   if(OO==0)
     {
      OO=1;
      trade.Sell(pLots,_Symbol,dBid,dAsk+pStopLoss,dBid-pTakeProfit);   // отработает и на MT5 и на MT4
     }
  }
//+------------------------------------------------------------------+

https://www.mql5.com/ru/articles/81
 
Yuriy Zaytsev:


внимание , код исключительно учебный

 
// Небольшой пример кода,  который одинаково работает в МТ4 и MT5.
// Основная фишка в использовании стандартных классов поставляемых вместе с терминалами
// В обоих платформах поставляются готовые ООП библиотеки , разработанные профессионалами METAQUOTES и разумеется имеет большой смысл их использовать и переходить на ООП
// внимание , код исключительно учебный

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Прелесть данного кода в том что он работает и на MT5 и на MT4
//////////////////////////////////////////////////////////////////////////////////////////////////////

Это давно сделал fxsaber в библиотеке https://www.mql5.com/ru/code/16006

Кстати, дата последнего изменения кода в КБ от 2016.08.05, у меня последняя ваша версия скачана 2016.11.15.

Вопрос автору библиотеки- в кодобазе точно последняя версия? 

MT4Orders
MT4Orders
  • голосов: 26
  • 2016.08.05
  • fxsaber
  • www.mql5.com
Параллельное использование ордерных систем MetaTrader 4 и MetaTrader 5.
 
Yuriy Zaytsev:


внимание , код исключительно учебный

 ...

Вот это:

dBid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
и так работает на любом МТ
 
Artyom Trishkin:

Вот это:

dBid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
и так работает на любом МТ

а точно,  спасибо за замечание

mql4 сильно продвинули - к 5 ке

но для самого подхода не принципиально

 
Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • 2010.05.11
  • Sergey Pavlov
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
Alexey Volchanskiy:

Это давно сделал fxsaber в библиотеке https://www.mql5.com/ru/code/16006

Кстати, дата последнего изменения кода в КБ от 2016.08.05, у меня последняя ваша версия скачана 2016.11.15.

Вопрос автору библиотеки- в кодобазе точно последняя версия? 

Не увидел этой даты. В шапке история версий.
 
Andrey F. Zelinsky:


На текущий момент -- нет необходимости изучать/применять СБ ради написания "кода, который одинаково работает в МТ4 и МТ5".

p.s.2. В качестве вопроса -- а в СБ реализован функционал, который отрабатывает хеджинг? Насколько я понял -- не реализован, хотя, могу ошибаться.

В СБ для МТ4 нет торговых модулей, она усечена по сравнению с СБ для МТ5

В СБ для МТ5 хеджинг поддерживается 

 
Andrey F. Zelinsky:

Вы опоздали минимум на 6 лет и 8 месяцев (посчитал с даты выхода приведенной вами статьи "Переход с MQL4 на MQL5" -- 11 мая 2010 года)

На текущий момент -- нет необходимости изучать/применять СБ ради написания "кода, который одинаково работает в МТ4 и МТ5".

Собственно, в этом никогда не было нужды -- т.к. изначально МТ5 была неттинговой, а МТ4 работал с разнонаправленными ордерами -- и поэтому во фразе "код, который одинаково работает в МТ4 и МТ5" изначально было нечто несерьёзное.

Теперь МТ5 включает в себя МТ4 -- и писать "код, который одинаково работает в МТ4 и МТ5" гарантированно натыкается на вопрос "зачем?"

p.s. Мой пассаж не стоит понимать, что я высказываюсь против СБ, здесь не об этом идёт речь.

Хотя, если говорить об изучении ООП -- то надо начинать с начала, а не с готовой СБ, даже в качестве примера. 

p.s.2. В качестве вопроса -- а в СБ реализован функционал, который отрабатывает хеджинг? Насколько я понял -- не реализован, хотя, могу ошибаться.

Нет не опоздал ,  массового интереса  у трейдеров и дилингов к МТ5 не было до момента введения хеджа. 

А сейчас не возникает резкого всплеска интереса ,  точка вспышки  пройдена.  Если бы хедж был изначально был в МТ5 ,  то мт4 сейчас вспоминали так же как мт3

Начиная с 2009.09.09  он был в пассиве , это дата введения в строй МТ5,   заказы на мт5 пошли только после введения хеджа , это просто так - к слову

 
Andrey F. Zelinsky:

"просто так - к слову" надо говорить, если в теме -- поэтому "к слову и даже просто так" -- я во Фрилансе с момента его организации -- заказы на мт5 были всегда.

собственно, это легко проверить по истории Фриланса -- соглашения же не удаляются -- есть как раздел Выполнено, так и раздел Архив.

Были кончено не спорю, но это был мизер в сравнении с потоком заказов на mql4,  он и сейчас меньше.


Зато сейчас я уговариваю клиентов переходить на мт5  , некоторые соглашаются менять платформу.  Разницы  между платформами уже нет,  при том  еще и  MQL4 MQL5  прекрасно идут друг другу навстречу сливаясь в одно единое.  Разница минимальна, а применяя ООП можно легко писать эксперта прекрасно работающего на обоих платформах. 

Достаточно влепить

// к примеру
   CTrade            trade;
...
dBid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
dAsk = SymbolInfoDouble(_Symbol,SYMBOL_ASK);


   trade.Sell(0.1,_Symbol,dBid ,dAsk +0.0020,dBid -0.0010,""); // и в MQL5 и MQL4 работает

с индикаторами примерно так
...
#ifdef __MQL4__
      ValMA[1]=iMA(NULL,PERIOD_CURRENT,14,0,MODE_EMA,PRICE_CLOSE,1);
#endif
#ifdef __MQL5__
      CopyBuffer(ind_handleMA,0,1,2,ValMA);
#endif
...

и все чудесно работает на обоих платформах
 
Yuriy Zaytsev:

Разница минимальна, а применяя ООП можно легко писать эксперта прекрасно работающего на обоих платформах.

https://www.mql5.com/en/blogs/post/681230

Там дальше и продолжение с хэш-таблицей. 

MQL's OOP notes: Converting MetaTrader 4 indicators to MetaTrader 5
MQL's OOP notes: Converting MetaTrader 4 indicators to MetaTrader 5
  • 2016.09.28
  • Stanislav Korotky
  • www.mql5.com
It has been a long time since MetaTrader 5 was released, but MQL products for MetaTrader 4 do still prevail on mql5.com site (both in the codebase, and in the market), and in the Internet in general....
 
Andrey F. Zelinsky:

Юра, я не супер какой сторонник МТ5 в стиле "только МТ5, за что и свой лоб с удовольствием расшибу" -- но есть объективная реальность:

1) говорить что хедж привёл к резкому росту популярности МТ5 нельзя -- т.к. заказы на МТ5 идут под фонды, а там хедж не нужен

2) МТ4 терминал хуже чем МТ5, как минимум по части тестера

3) и главное -- МТ5 сейчас по функционалу полностью перекрывает МТ4 со многими плюсами -- и ставить даже среднесрочные разработки на МТ4 уже тупо нет никакого смысла 

Андрей ,  полностью  согласен,  по всем пунктам.  А я супер сторонник МТ5 :-)))

Cейчас наблюдается рост  популярности МТ5 среди трейдеров и интерес со стороны ДЦ,  и  если в ДЦ нет мт5, то даже не рекомендовал бы его.

         На самом деле я о другом, о том ,  что если бы хедж в МТ5 был изначально , то про мт4 мы бы сейчас только вспоминали. 

Начиная с 2009.09.09  по 2017.01.xx  ,  т. е.  за 8 лет с хеджем  ,  мт5 вытеснил бы мт4 с рынка значительно сильнее, возможно убил бы.

А у MQ было бы меньше накладных расходов по сопровождению  двух платформ.