Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 757

 
User_mt5:


Вообще, есть такое понятие "градиент". Это такой показатель, который характеризует "крутизну" (графика). Применительно к данной отрасли этот показатель можно выразить в размерности пункт/время. По существу это скорость. Этот показатель не будет зависеть от масштаба, т.к. к графику не привязан. Используйте градиент, а угол не используйте.


Как этот градиент вычислять?

Можете как-то развернуть свою идею в деталях? Обратите внимание, в какую ветку форума я написал свой вопрос.

 
igorbel:

Как этот градиент вычислять?

Можете как-то развернуть свою идею в деталях? Обратите внимание, в какую ветку форума я написал свой вопрос.

У меня идеи нет.

Я говорю о простой математике. Градиент - это скорость. Сама скорость - это когда в знаменателе время. В привычном использовании это скорость автомобиля, выражаемая в км/час. Но скорость вообще бывает и другая. Например, скорость написания программного кода измеряется в количестве строк в день. Применительно графику цен скорость измеряется в количестве пунктов в минуту. Условно можно считать, что если на некотором участке графика градиент (наклон, скорость подъёма) больше, чем, например, 100 пункт/мин, то этот участок можно квалифицировать как тренд, а если меньше, то как флет.

 

Здравствуйте! 2017.07.07_15:55 GMT+3. Я не пойму. Вроде бы и сигнал должен быть, а в тестере стратегий его нет. Чем тогда Ваш хвалёный МТ5 тестер отличается от тестера МТ4? Я написал почти как в стандартном Moving Average.mq5 . А на демо счёте мне всё таки удалось проверить советник. Он открывал сделку, но закрыть пришлось самому. Закрытие я подправил. Но написал что-то ещё, -- советник опять перестал открывать сделки. А ноль ошибок и ноль предупреждений -- это ещё не показатель рабочего состояния советника. Вот тут я застрял. Откуда я знаю что там написано где такое, что советник не работает. Опять тревожить Карпутова. Если бы мне выдали весь список запретов, я бы и сам справился. Выкладываю файлы, хотя и не все. 16:06 GMT+3.

 

Прошу помощи!

Для получения начения индикатора в MQL4 достаточно функции простой

double CMAf(int index)
  {
   return NormalizeDouble(iMA(Symbol(),0,period_CMA,0,0,0,index),Digits);
  }
Как получить аналог для MQL5?
 
-Aleks-:

Прошу помощи!

Для получения начения индикатора в MQL4 достаточно функции простой

Как получить аналог для MQL5?

Справку iMA смотрели?

Шаг первый: в "шапке" объявляем переменную для хранения хендла индикатора iMA:

Шаг второй: в OnInit() создаём хендл индикатора.

//+------------------------------------------------------------------+
//|                                                       iMAGet.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int                  ma_period=10;                 // period of ma 
input int                  ma_shift=0;                   // shift 
input ENUM_MA_METHOD       ma_method=MODE_SMA;           // type of smoothing 
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;    // type of price 
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // timeframe 
//---
int                        handle_iMA;                   // variable for storing the handle of the iMA indicator 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle of the indicator iMA
   handle_iMA=iMA(Symbol(),period,ma_period,ma_shift,ma_method,applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double ma_0=iMAGet(0);
   double ma_1=iMAGet(1);

   Comment("MA #0: ",DoubleToString(ma_0,Digits()+1),"\n",
           "MA #1: ",DoubleToString(ma_1,Digits()+1));
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iMA                                 |
//+------------------------------------------------------------------+
double iMAGet(const int index)
  {
   double MA[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(MA[0]);
  }
//+------------------------------------------------------------------+


И результат (перекрестие на скриншоте установлено на бар #1):

iMAGet

Файлы:
iMAGet.mq5  7 kb
 
Vladimir Karputov:

Справку iMA смотрели?

Шаг первый: в "шапке" объявляем переменную для хранения хендла индикатора iMA:

Шаг второй: в OnInit() создаём хендл индикатора.

И результат (перекрестие на скриншоте установлено на бар #1):

 

Спасибо за ответ.

В MQL4 всё объявляется в функции - таким образом существует набор функций, которые активируются в зависимости от настроек советника. Если я не ошибаюсь, то в Вашем случае память будет выделена под десятки разных индикаторов, которые допускает использовать ТС, что не рационально, или память не будет выделена?

 

Можно ли вызвать функцию класса не имея конкретного объекта этого класса? Чтобы было что-то вроде такого:

class test
  {
public:
                     test(void);
                    ~test(void);
  public: void PrintInfo (){Print ("Class test");}
  };
//---
void OnStart()
  {
      test.PrintInfo() ;
  }

Или обязательно создавать объект? Даже если эта функция относится скорее к определению самого класса, нежели к его экземпляру.

 

Если функции не нужен доступ к переменным класса сделайте её статической.

class test
{
public:
   test();
   ~test();

   static void PrintInfo()
   {
      Print( "Class test" );
   }
};

void OnStart()
{
   test::PrintInfo();
}
 
Koldun Zloy:

Если функции не нужен доступ к переменным класса сделайте её статической.

Спасибо, то что нужно.
 

Получаю ошибки - что не так? В MQL4 работает...


   double arrFibo[17]=
     {
      0,
      0.236,
      0.382,
      0.5,
      0.618,
      0.764,
      1,
      1.236,
      1.382,
      1.5,
      1.618,
      2.0,
      2.236,
      2.382,
      2.5,
      2.618,
      2.764,
      3        //Всего уровней 17 + 0
     };
'{' - too many initializers TZ_Sky_and_Ground_V_04.mq5 2484 6
Причина обращения: