Как переписать код с MQL4 на MQL5 ?

 

Доброе время суток,


после усердных поисков в интернете учебника по изучения MQL5 и ничего толкового не найдя, решил обратитса за помощью

Вот мой код на MQL4

extern int RSI_Value=14;
extern double Low_=30;
extern double High_=70;
extern int Magic=1777;
extern double Lot=0.1;
extern int SL_Bottom=50;
extern int SL_Top=50;
extern int TP=150;

int init(){return(0);}

int deinit(){return(0);}

int start(){
   int position=0;

   double RSI_Low=iRSI(Symbol(),int 0,int RSI_Value,int PRICE_LOW,int 0); 
   double RSI_High=iRSI(Symbol(),int 0,int RSI_Value,int PRICE_HIGH,int 0); 
 
for(int pos=0; pos<OrdersTotal(); pos++){
   OrderSelect(pos,SELECT_BY_POS, MODE_TRADES);
   if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
   position++;
   }


if(position==0){
   if(RSI_Low<Low_){
   OrderSend(Symbol(), OP_BUY, Lot, Ask, 10,Ask-SL_Bottom*Point,Ask+TP*Point, NULL, Magic, 0, Green );
   if(RSI_High>High_)
   OrderSend(Symbol(), OP_SELL, Lot, Bid, 10,Bid+SL_Top*Point,Bid-TP*Point, NULL, Magic, 0, Red );
   }
}
   return(0);
  }

Советник значит откладывает в переменых типа даблъ уровень индикатора РСИ, которым может быть число от нуля до ста, потом проверяет наличие ордеров на открытую пару с учётом идентификационого номера советника(мэджикнамбэр) и если открытих сделок нет и условия на покупку или продажу соответсвуют истине, то открывает сделку. При открытии сделки ставит ограничение риска (стоплос) и указвает уровень закрытия сделки (тэйкпрофит) итп.


Как теперь этот советник переписать на MQL5 ?

Меня интиресует простой код, без подключеня какихто библиотек, где один клас вызывает другой и одна функция другую и если даже програма работает, то смысл всёравно не понятен.

Документация по MQL5: Основы языка / Типы данных
Документация по MQL5: Основы языка / Типы данных
  • www.mql5.com
Основы языка / Типы данных - Документация по MQL5
 

ну как Вам сказать,

 

Если бы ВЫ попросили переписать с мкл4  

допустим

double RSI_Low=iRSI(Symbol(),int 0,int RSI_Value,int PRICE_LOW,int 0); 

 то думаю помогли бы. 

А так получается Вам нужно собственно написать нового советника. И тут даже если Вам напишут его на мкл 5 - ВЫ ничего не поймете. Получиться не помощь.

да и простого кода все равно не получиться.

 

допустим функция открытия бая

//+----------------------------------------------------------------------------+
//|  Автор    : Владислав, Expforex  http://expforex.                          |
//+----------------------------------------------------------------------------+
//|  Описание : Открывает позицию Бай по выбранной Валюте                      |
//+----------------------------------------------------------------------------+  
void OpenBUY(string symToWork2)
  {
  request.comment="by www.expforex.";
   request.symbol = symToWork2;
   request.volume = GetSizeLot(symToWork2);
   request.action=TRADE_ACTION_DEAL; // операция с рынка
   request.type_filling=ORDER_FILLING_FOK; // операция с рынка
   if(SymbolInfoInteger(symToWork2,SYMBOL_TRADE_EXEMODE)!=SYMBOL_TRADE_EXECUTION_MARKET)
     {
      if(TakeProfits==0)request.tp=0;else if(TakeProfits!=0)request.tp=SymbolInfoDouble(symToWork2,SYMBOL_BID)+TakeProfits*SymbolInfoDouble(symToWork2,SYMBOL_POINT);
      if(StopLosss==0)request.sl=0;else if(StopLosss!=0)request.sl=SymbolInfoDouble(symToWork2,SYMBOL_BID)-StopLosss*SymbolInfoDouble(symToWork2,SYMBOL_POINT);
        }else {request.tp=0;request.sl=0;
     }
   request.deviation=(ulong)((SymbolInfoDouble(symToWork2,SYMBOL_ASK)-SymbolInfoDouble(symToWork2,SYMBOL_BID))/SymbolInfoDouble(symToWork2,SYMBOL_POINT))*2; // по спреду 
                                                                                                                                                             // request.type_filling=ORDER_FILLING_CANCEL;
   request.type=ORDER_TYPE_BUY;
   request.price=SymbolInfoDouble(symToWork2,SYMBOL_ASK);
   double margin=EMPTY_VALUE;
        
        bool check = OrderCalcMargin(request.type,request.symbol,request.volume,request.price,margin);
      if(margin<AccountInfoDouble(ACCOUNT_FREEMARGIN))OrderSend(request,result);   if(result.retcode==TRADE_RETCODE_DONE)
     {
      if(Sounds)PlaySound("ok.wav");
      if(SymbolInfoInteger(symToWork2,SYMBOL_TRADE_EXEMODE)==SYMBOL_TRADE_EXECUTION_MARKET)
        {
         Modify(symToWork2,StopLosss,TakeProfits);
        }

     }
   else if(Sounds)PlaySound("stops.wav");
  }
 
Vladon:

ну как Вам сказать,

 

Если бы ВЫ попросили переписать с мкл4  

допустим

 то думаю помогли бы. 

А так получается Вам нужно собственно написать нового советника. И тут даже если Вам напишут его на мкл 5 - ВЫ ничего не поймете. Получиться не помощь.

да и простого кода все равно не получиться.

 

допустим функция открытия бая

Ну как тогда изучать этот засекречиный мкл5 ? Я ведь выбрал примитивный пример. Где писатели советников на мкл5 получили своё знание ?
 
Я лично здесь и здесь. Ну и немного здесь
 

почему засекреченный? просто он более приближенный к основным языкам программирования C\delphi  и не представляет сложности по сути. 

Для новичков может быть и да, но для этого разработчики и сделали всевозможные генераторы и библиотеки.

 

Документация по MQL5: Основы языка
Документация по MQL5: Основы языка
  • www.mql5.com
Основы языка - Документация по MQL5
 
trix:
Где писатели советников на мкл5 получили своё знание ?
а где писатели мкл4 получили своё знание?
 
Vladon:

почему засекреченный? просто он более приближенный к основным языкам программирования C\delphi  и не представляет сложности по сути. 

Для новичков может быть и да, но для этого разработчики и сделали всевозможные генераторы и библиотеки.

 

Я тоже изучал язык вышего уровня Ява, но не по библиотеки. Библиотека это как склад с запчастями итп. но это не даёт человеку быстрой возможности собрать например автомобиль, можно но полу жизни надо угробить, пока это сделаеш уже мкл10 будет и опять всё заново учи... И часто эти самоучки по библиотеки в своих кодах много мусора используют каторый вовсе не нужен и пояснить чего они накодировали не могут, ну ладно оставим это....

у меня вопрос к вашему коду

void OpenBUY(string symToWork2)
  {
  request.comment="by www.expforex.";
   request.symbol = symToWork2;
   request.volume = GetSizeLot(symToWork2);

Если вы вызываете вашу OpenBUY() функцию то в параметры задаёте даные типа стринг, т.е. текст. Теперь вы используете эти даные в двух разных местах, для опредиления символа request.symbol=symToWork2; и для размера сделки request.volume=GetSizeLot(symToWork2);, как так может быть?

 
trix:

Я тоже изучал язык вышего уровня Ява, но не по библиотеки. Библиотека это как склад с запчастями итп. но это не даёт человеку быстрой возможности собрать например автомобиль, можно но полу жизни надо угробить, пока это сделаеш уже мкл10 будет и опять всё заново учи... И часто эти самоучки по библиотеки в своих кодах много мусора используют каторый вовсе не нужен и пояснить чего они накодировали не могут, ну ладно оставим это....

у меня вопрос к вашему коду

Если вы вызываете вашу OpenBUY() функцию то в параметры задаёте даные типа стринг, т.е. текст. Теперь вы используете эти даные в двух разных местах, для опредиления символа request.symbol=symToWork2; и для размера сделки request.volume=GetSizeLot(symToWork2);, как так может быть?

в моем случае я показал пример своей функции. у каждого программиста есть своя библиотека функций. 

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

 request.symbol=symToWork2 - указывает по какому символу открывать сделку

request.volume=GetSizeLot(symToWork2) - расчитывает лот по данному символу. 

Лот рассчитывается следующей функцией, в которой также внутри вызываются еще 3 функции. 

Получается цепочка  

 
sergeev:
а где писатели мкл4 получили своё знание?
Я например умею програмировать на Ява и смотрел уроки програмирования для мкл4 на ютьюбе и с моим знанием уловил суть и всё нужное для моих советников, к сожелению на мкл4 качество моделирования очень слабое и результаты не соответствуют истине, поэтому вынужден на мкл5 перейти, хотя и здесь модэлироване не на все сто всегда работает
 
trix:
Я например умею програмировать на Ява и смотрел уроки програмирования для мкл4 на ютьюбе и с моим знанием уловил суть и всё нужное для моих советников, к сожелению на мкл4 качество моделирования очень слабое и результаты не соответствуют истине, поэтому вынужден на мкл5 перейти, хотя и здесь модэлироване не на все сто всегда работает
мкл4 - язык для школьников, его может выучить даже грузчик. 
 
Vladon:
мкл4 - язык для школьников, его может выучить даже грузчик. 
Пусть будет так, но если мкл5 выше, то его нужно преподавать, и создателю этого языка создать учебник. Да и вопрос нужно ли для советников сильно много?