Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Перевод с платформы MQL4 на MQL5

Доброе время суток!
Возможно ли перевести функцию


//+------------------------------------------------------------------+
//|                                                       SGN_MA.mqh |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property strict
//+------------------------------------------------------------------+
//|   Меню выбора определения нахождения/движения индикатора MA      |
//+------------------------------------------------------------------+
enum ENUM_MA_MODE
   {
   Intersection = 0,
   Price = 1,
   Napravlenie = 2
   };
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
extern string               MA_Info           = "Settings MA";    //Options
extern ENUM_TIMEFRAMES      MA_TimeFrame      = PERIOD_CURRENT;   //TimeFrame
extern int                  MA_Period         = 20;               //Period 
extern int                  MA_Shift          = 0;                //Shift
extern ENUM_MA_METHOD       MA_Method         = MODE_EMA;         //Method
extern ENUM_APPLIED_PRICE   MA_Applied_Price  = PRICE_CLOSE;      //Applied price
extern int                  MA_Index          = 1;                //Index
extern ENUM_MA_MODE         MA_MODE           = Intersection;     //Definition mode
extern bool                 MA_Changeling     = FALSE;            //Changeling
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int SGN_MA(string   symbol)
{
//--- Определим соответствующее свойства для символа -----------------
int      digits /* Количество знаков после запятой */ = (int) SymbolInfoInteger(symbol,SYMBOL_DIGITS);
double   point  /* Значение одного пункта */          =  SymbolInfoDouble(symbol,SYMBOL_POINT);
double   bid    /* Лучшее предложение на продажу */   =  SymbolInfoDouble(symbol,SYMBOL_BID);
double   ask    /* Лучшее предложение на покупку */   =  SymbolInfoDouble(symbol,SYMBOL_ASK);
//--------------------------------------------------------------------
//--- Инициализация переменых ----------------------------------------
ENUM_TIMEFRAMES      timeframe      /* Таймфрейм */         = MA_TimeFrame;
int                  ma_period      /* Период */            = MA_Period;
int                  ma_shift       /* Сдвиг средней */     = MA_Shift;
ENUM_MA_METHOD       ma_method      /* Метод усреднения */  = MA_Method;
ENUM_APPLIED_PRICE   applied_price  /* Тип цены */          = MA_Applied_Price;
int                  shift          /* Сдвиг */             = MA_Index;
bool                 changeling     /* Перевертыш включен */      = MA_Changeling;
int up, down;
//--------------------------------------------------------------------
double MA = iMA(symbol,timeframe,ma_period,ma_shift,ma_method,applied_price,shift);
double MA1 = iMA(symbol,timeframe,ma_period,ma_shift,ma_method,applied_price,shift+1);
double MA2 = iMA(symbol,timeframe,ma_period,ma_shift,ma_method,applied_price,shift+2);
//--------------------------------------------------------------------
if (changeling == FALSE)
   {
   up = 1;
   down = -1;
   }
else
   {
   up = -1;
   down = 1;
   }
//--------------------------------------------------------------------
switch(MA_MODE)
   {
   case  0:
   if (Open[shift] < MA && Close[shift] > MA)return(up);
   if (Open[shift] > MA && Close[shift] < MA)return(down);
   break;
   case  1:
   if (bid > MA && ask > MA)return(up);
   if (bid < MA && ask < MA)return(down);
   break;
   case  2:
   if (MA2 < MA && MA > MA1)return(up);
   if (MA2 > MA && MA < MA1)return(down);
   break;
   default:
   break;
   }
//--------------------------------------------------------------------
return(0);
}
//+------------------------------------------------------------------+


На MQL5?
  • 0
  • Просмотров: 2821
  • 15 сентября 2017, 20:08
  • Kudryashov
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник "Опоздун" заказ на MQL4
Следующая запись в группе  
Пинг-понг с удвоением.
15 сентября 2017
15 сентября 2017

Брокер для ваших роботов, 15 лет на рынке

Комментарии (2)

+
0
Перевел, но надо по любому отладить в приложении которое использует эту функцию.


//+------------------------------------------------------------------+
//|                                                       SGN_MA.mqh |
//|                                              Copyright 2017, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "https://www.forexsystems.biz"
#property strict
//+------------------------------------------------------------------+
//|   Меню выбора определения нахождения/движения индикатора MA      |
//+------------------------------------------------------------------+
enum ENUM_MA_MODE
  {
   Intersection=0,
   Price=1,
   Napravlenie=2
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
extern string               MA_Info           = "Settings MA";    //Options
extern ENUM_TIMEFRAMES      MA_TimeFrame      = PERIOD_CURRENT;   //TimeFrame
extern int                  MA_Period         = 20;               //Period 
extern int                  MA_Shift          = 0;                //Shift
extern ENUM_MA_METHOD       MA_Method         = MODE_EMA;         //Method
extern int                  MA_Applied_Price  = PRICE_CLOSE;      //Applied price
extern int                  MA_Index          = 1;                //Index
extern ENUM_MA_MODE         MA_MODE           = Intersection;     //Definition mode
extern bool                 MA_Changeling     = false;            //Changeling

//--- глобальные переменные
int MAHandle;                  // Хэндл индикатора MA
double ma[3],open[1],close[1]; // Динамический массив для хранения численных значений МА
//+------------------------------------------------------------------+
//|        Initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Получаем хэндл индикаторa MA
//MAHandle=iMA(_Symbol,MA_TimeFrame,MA_Period,MA_Shift,MA_Method,MA_Applied_Price,MA_Index);
   MAHandle=iMA(_Symbol,MA_TimeFrame,MA_Period,MA_Shift,MA_Method,MA_Applied_Price);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int SGN_MA(string   symbol)
  {
//--- Определим соответствующее свойства для символа -----------------
   int      digits /* Количество знаков после запятой */ = (int) SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   double   point  /* Значение одного пункта */          =  SymbolInfoDouble(symbol,SYMBOL_POINT);
   double   bid    /* Лучшее предложение на продажу */   =  SymbolInfoDouble(symbol,SYMBOL_BID);
   double   ask    /* Лучшее предложение на покупку */   =  SymbolInfoDouble(symbol,SYMBOL_ASK);
//--------------------------------------------------------------------
//--- Инициализация переменых ----------------------------------------
   ENUM_TIMEFRAMES      timeframe      /* Таймфрейм */         = MA_TimeFrame;
   int                  ma_period      /* Период */            = MA_Period;
   int                  ma_shift       /* Сдвиг средней */     = MA_Shift;
   ENUM_MA_METHOD       ma_method      /* Метод усреднения */  = MA_Method;
   int                  applied_price  /* Тип цены */          = MA_Applied_Price;
   int                  shift          /* Сдвиг */             = MA_Index;
   bool                 changeling     /* Перевертыш включен */= MA_Changeling;
   int up,down;
//--------------------------------------------------------------------
#ifdef __MQL4__
   double MA=iMA(symbol,timeframe,ma_period,ma_shift,ma_method,applied_price,shift);
   double MA1 = iMA(symbol,timeframe,ma_period,ma_shift,ma_method,applied_price,shift+1);
   double MA2 = iMA(symbol,timeframe,ma_period,ma_shift,ma_method,applied_price,shift+2);
#endif
//--------------------------------------------------------------------
#ifdef __MQL5__
   CopyBuffer(MAHandle,0,0,3,ma);
#endif
//--------------------------------------------------------------------
   if(changeling==false)
     {
      up=1;
      down=-1;
     }
   else
     {
      up=-1;
      down=1;
     }
//--------------------------------------------------------------------
#ifdef __MQL4__
   switch(MA_MODE)
     {
      case  0:
         if(Open[shift] < MA && Close[shift] > MA)return(up);
         if(Open[shift] > MA && Close[shift] < MA)return(down);
         break;
      case  1:
         if(bid > MA && ask > MA)return(up);
         if(bid < MA && ask < MA)return(down);
         break;
      case  2:
         if(MA2 < MA && MA > MA1)return(up);
         if(MA2 > MA && MA < MA1)return(down);
         break;
      default:
         break;
     }
#endif
//--------------------------------------------------------------------
#ifdef __MQL5__
   CopyOpen(_Symbol,PERIOD_CURRENT,0,3,open);
   CopyClose(_Symbol,PERIOD_CURRENT,0,3,close);

   switch(MA_MODE)
     {
      case  0:
         if(open[shift] < ma[0] && close[shift] > ma[0])return(up);
         if(open[shift] > ma[0] && close[shift] < ma[0])return(down);
         break;
      case  1:
         if(bid > ma[0] && ask > ma[0])return(up);
         if(bid < ma[0] && ask < ma[0])return(down);
         break;
      case  2:
         if(ma[2] < ma[0] && ma[0] > ma[1])return(up);
         if(ma[2] > ma[0] && ma[0] < ma[1])return(down);
         break;
      default:
         break;
     }
#endif
//+------------------------------------------------------------------+
   return(0);
  }
//+------------------------------------------------------------------+


Редактирован: 16 сентября 2017, 20:04
avatar

  34  AM2 Сообщений: 16232 - Андрей

  • 15 сентября 2017, 20:23
+
0
Спасибо!
На вид все просто оказалось… а я мудрил *wizard* 
Буду разбираться
avatar

  8  Kudryashov Автор Сообщений: 129

  • 16 сентября 2017, 21:30

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий