Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1287

 

Здравствуйте! 2020.10.28_05:19 GMT+3. Я переводил индикатор LeManTrend_Indicator.mq5 в четвёртую версию .mq4 . Индикатор появляется на графике, но при попытке переключить график GBPUSD,H1 на таймфрейм M5 MetaTrader4 зависает, процессор загружен. Приходится закрывать MetaTrader4 и открывать снова. Когда удаляешь LeManTrend_Indicator.ex4 с графика зависания не возникает. Что в коде индикатора написано неправильно сам я не пойму. Кто бы подсказал? Как это исправить? 

     А LeMan_BrainTrend1Sig.mq5 переводил в четвёртую версию, -- в списке индикаторов он есть, но на графике ничего не отображается. Как переписать код этого индикатора, чтобы он нормально работал, -- я не знаю. Раньше я писал только советники. Как проверять их в тестере стратегий -- знаю. И Print() переменных пишешь в коде, -- становится понятно где что не так написано. А как проверять индикаторы я не знаю. Пишу Print() в коде, -- ни в каком журнале это не отражается. Кто подскажет что делать с индикаторами чтобы они работали, а не занимали место на жёстком диске? Буду ждать ответа. 05:44 GMT+3.

     Да коды индикаторов сейчас выложу. И ещё. Почему я перевожу индикаторы с .mq5 на .mq4 ? Потому что у моего брокера рублёвые счета есть только в MetaTrader4. А индикаторы написаны в пятой версии. А индикаторы нужны мне чтобы написать прибыльный советник для MetaTrader4. Теперь всё. 05:53 GMT+3.

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 
Николай Никитюк:

Здравствуйте! 2020.10.28_05:19 GMT+3. Я переводил индикатор LeManTrend_Indicator.mq5 в четвёртую версию .mq4 . Индикатор появляется на графике, но при попытке переключить график GBPUSD,H1 на таймфрейм M5 MetaTrader4 зависает, процессор загружен. Приходится закрывать MetaTrader4 и открывать снова. Когда удаляешь LeManTrend_Indicator.ex4 с графика зависания не возникает. Что в коде индикатора написано неправильно сам я не пойму. Кто бы подсказал? Как это исправить? 

     А LeMan_BrainTrend1Sig.mq5 переводил в четвёртую версию, -- в списке индикаторов он есть, но на графике ничего не отображается. Как переписать код этого индикатора, чтобы он нормально работал, -- я не знаю. Раньше я писал только советники. Как проверять их в тестере стратегий -- знаю. И Print() переменных пишешь в коде, -- становится понятно где что не так написано. А как проверять индикаторы я не знаю. Пишу Print() в коде, -- ни в каком журнале это не отражается. Кто подскажет что делать с индикаторами чтобы они работали, а не занимали место на жёстком диске? Буду ждать ответа. 05:44 GMT+3.

     Да коды индикаторов сейчас выложу. И ещё. Почему я перевожу индикаторы с .mq5 на .mq4 ? Потому что у моего брокера рублёвые счета есть только в MetaTrader4. А индикаторы написаны в пятой версии. А индикаторы нужны мне чтобы написать прибыльный советник для MetaTrader4. Теперь всё. 05:53 GMT+3.

LeManTrend_Indicator.mq5 - сам индикатор тут https://www.mql5.com/ru/code/27570

он и в четверке работает - только нужно удалить повторяющий (string ) перед (err_text)

      string err_text=(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")?
                      "Параметр \"Midle\" меньше 1!":
                      "Parameter \"Midle\" is less than 1!";

что бы было так

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- check "MA averaging period" parameter
   if(PeriodEMA<1)
     {
      string err_text=(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")?
                      "Параметр \"MA averaging period\" меньше 1!":
                      "Parameter \"MA averaging period\" is less than 1!";
      //--- when testing, we will only output to the log about incorrect input parameters
      if(MQLInfoInteger(MQL_TESTER))
        {
         Print(__FILE__," ",__FUNCTION__,", ERROR: ",err_text);
         return(INIT_FAILED);
        }
      else // if the Expert Advisor is run on the chart, tell the user about the error
        {
         Alert(__FILE__," ",__FUNCTION__,", ERROR: ",err_text);
         return(INIT_PARAMETERS_INCORRECT);
        }
     }
//--- check "Min" parameter
   if(Min<1)
     {
      err_text=(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")?
               "Параметр \"Min\" меньше 1!":
               "Parameter \"Min\" is less than 1!";
      //--- when testing, we will only output to the log about incorrect input parameters
LeManTrend Indicator
LeManTrend Indicator
  • www.mql5.com
Индикатор на основе анализа максимальных и минимальных цен. Сигналы индикатора возникают в месте пересечения линий 'BUY' и 'SELL':
 
SanAlex:

LeManTrend_Indicator.mq5 - сам индикатор тут https://www.mql5.com/ru/code/27570

он и в четверке работает - только нужно удалить повторяющий (string ) перед (err_text)

что бы было так

string

 
Николай Никитюк:

BrainTrend1Sig для четвёрки тут - https://www.mql5.com/ru/code/8772

вот в этот нужно добавить уже исправленный для четвёрки   LeManTrend_Indicator.mq4

BrainTrend1Sig
BrainTrend1Sig
  • www.mql5.com
Индикатор BrainTrend1Sig.
 
SanAlex:

BrainTrend1Sig для четвёрки тут - https://www.mql5.com/ru/code/8772

вот в этот нужно добавить уже исправленный для четвёрки   LeManTrend_Indicator.mq4

ошибку выдаёт - нужно удалить эту строчку (    double    const = 0;  )

и всё заработает 

    double    const = 0;

double const = 0; 2.PNG


 
Nikolai Semko:

Ну Вы юморист.

Я перед кем тут распинался?



А такая ситуация из-за чего? Одинаковый индекс баров. Причем, вроде как, происходит только при первом запуске на символе. Либо глубже в истории. Я думал выше в коде как раз проверка на наличие баров..

 
Николай Никитюк:


Вот хороший Индикатор https://www.mql5.com/ru/code/28364 

В него можно встроить всё что нужно !!!!!!!

//+------------------------------------------------------------------+
//|                                                      Phoenix.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//--- setting the indicator name
#property description "Phoenix"
//--- set the strict mode of compilation
#property strict
//--- specify where to draw the indicator
#property indicator_chart_window
//--- specify the number of buffers
#property indicator_buffers 2
//--- setting the color of the indicator rendering
#property indicator_color1 clrGreenYellow
#property indicator_color2 clrRed
//--- we define the input parameters

//--- specify arrays of indicator buffers
double arrow_01[];
double arrow_02[];
//*********************************************//
bool flag_buy   = false;
bool flag_sell  = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   string short_name;
//--- we specify two additional buffers for calculations
   IndicatorBuffers(2);
   SetIndexBuffer(0,arrow_01);
   SetIndexBuffer(1,arrow_02);
//--- setting the indicator to be drawn as a line
   SetIndexStyle(0,DRAW_ARROW,EMPTY,2,clrGreenYellow);
   SetIndexArrow(0,233);
   SetIndexBuffer(0,arrow_01);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,2,clrRed);
   SetIndexArrow(1,234);
   SetIndexBuffer(1,arrow_02);
//--- setting a name in the DataWindow window and a label
   short_name="Phoenix";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- if there are no errors,initialization is completed successfully
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                            Phoenix                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
   for(int shift=rates_total; shift>=0; shift--)
     {
      //--- to simplify the coding and speed up access data are put into internal variables
      double MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,shift);
      double SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,shift);
        {
         if(flag_buy==false)
            //--- check for long position (BUY) possibility
            if(MacdCurrent>SignalCurrent)
              {
               arrow_01[shift]=Low[shift];
               flag_buy=true;
               flag_sell=false;
              }
         if(flag_sell==false)
            //--- check for short position (SELL) possibility
            if(MacdCurrent<SignalCurrent)
              {
               arrow_02[shift]=High[shift];
               flag_buy=false;
               flag_sell=true;
              }
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
Phoenix
Phoenix
  • www.mql5.com
В стрелочном индикаторе Phoenix используется комбинация трех индикаторов: Moving Average, Bolinger Bands и Momentum в сочетании с двумя мощными формулами, основанными на поведении цены текущего графика. В индикаторе Phoenix также реализована система звуковых и текстовых алертов, а также отправка...
Файлы:
EURUSDM30.png  35 kb
 

Добрый день!

Прошу помочь с решением следующей задачи:

Необходимо запустить скрипт (Python) из советника MQL4. Пытаюсь это сделать с помощью ShellExecuteW() следующим образом:

#import "shell32.dll"
string ShellExecuteW(int hwnd,string Operation,string File,string Parameters,string Directory,int ShowCmd);
#import
#include <WinUser32.mqh>

void OnStart()
  {
ShellExecuteW(NULL, NULL, "C:\\Users\\yansa\\Desktop\\test_script.py", NULL, NULL, 1);
  }

На что получаю ошибку доступа к файлу. Сам скрипт исполняется, но дальше код не идет.


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

Еще вопрос: как потом проверить исполнение скрипта?

 
Николай Никитюк:

Здравствуйте! 2020.10.28_05:19 GMT+3. Я переводил индикатор LeManTrend_Indicator.mq5 в четвёртую версию .mq4 .

А это не подходит

https://www.mql5.com/ru/code/9096

LeManTrend
LeManTrend
  • www.mql5.com
Индикатор определяет положение тренда на основе текущей цены и максимальных и минимальных цен за три периода.
 
MakarFX:

А это не подходит

https://www.mql5.com/ru/code/9096

Этот, вроде как лучше 

//+------------------------------------------------------------------+
//|                                                      Phoenix.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//--- setting the indicator name
#property description "Phoenix"
//--- set the strict mode of compilation
#property strict
//--- specify where to draw the indicator
#property indicator_chart_window
//--- specify the number of buffers
#property indicator_buffers 2
//--- setting the color of the indicator rendering
#property indicator_color1 clrGreenYellow
#property indicator_color2 clrRed
//--- we define the input parameters

//--- specify arrays of indicator buffers
double arrow_01[];
double arrow_02[];
//*********************************************//
bool flag_buy   = false;
bool flag_sell  = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   string short_name;
//--- we specify two additional buffers for calculations
   IndicatorBuffers(2);
   SetIndexBuffer(0,arrow_01);
   SetIndexBuffer(1,arrow_02);
//--- setting the indicator to be drawn as a line
   SetIndexStyle(0,DRAW_ARROW,EMPTY,2,clrGreenYellow);
   SetIndexArrow(0,233);
   SetIndexBuffer(0,arrow_01);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,2,clrRed);
   SetIndexArrow(1,234);
   SetIndexBuffer(1,arrow_02);
//--- setting a name in the DataWindow window and a label
   short_name="Phoenix";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//--- if there are no errors,initialization is completed successfully
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                            Phoenix                               |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
   for(int shift=rates_total; shift>=0; shift--)
     {
      //--- to simplify the coding and speed up access data are put into internal variables
      double MacdCurrent=iCustom(NULL,0,"LeManTrend",13,21,34,3,MODE_MAIN,shift);
      double SignalCurrent=iCustom(NULL,0,"LeManTrend",13,21,34,3,MODE_SIGNAL,shift);
        {
         if(flag_buy==false)
            //--- check for long position (BUY) possibility
            if(MacdCurrent>SignalCurrent)
              {
               arrow_01[shift]=Low[shift];
               flag_buy=true;
               flag_sell=false;
              }
         if(flag_sell==false)
            //--- check for short position (SELL) possibility
            if(MacdCurrent<SignalCurrent)
              {
               arrow_02[shift]=High[shift];
               flag_buy=false;
               flag_sell=true;
              }
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
Файлы:
Причина обращения: