Помогите поправить индикатор

 

Народ помогите пожалуйста поправить индикатор, это мой первый опыт и не получается разобраться, необходимо что бы показывал если цена в данный момент больше минимальной цены за прошлый час на 0.1% и более.

Как сделать так что бы он брал именно текущую цену и сравнивал ее с минимальной предыдущего часа?



#property indicator_separate_window

#property indicator_buffers 1

#property indicator_plots   1

//--- plot Label1

#property indicator_label1  "Label1"

#property indicator_type1   DRAW_LINE

#property indicator_color1 Lime

#property indicator_style1  STYLE_SOLID

#property indicator_width1  1

//---- Входные параметры

input double Percent=0.1;

//---- Переменные индикатора

double ExtMapBuffer[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- 

   SetIndexBuffer(0,ExtMapBuffer,INDICATOR_DATA);

   //---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Функция процесса                                                 |

//+------------------------------------------------------------------+

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[])

  {

   int limit=MathMin(rates_total,prev_calculated+1);

   for(int i=0; i<limit; i++)

     {

      

      //--- Отмечаем если текущая цена больше минимальной цены за предыдущий час на 0.1% и более

       if ( (high[i]/min_price-1)*100>=Percent )

         ExtMapBuffer[i]=high[i];

      else

         ExtMapBuffer[i]=EMPTY_VALUE;

     }

   return(rates_total);

  }

//+------------------------------------------------------------------+

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Свойства программ (#property) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
ravlat12:

Народ помогите пожалуйста поправить индикатор, это мой первый опыт и не получается разобраться, необходимо что бы показывал если цена в данный момент больше минимальной цены за прошлый час на 0.1% и более.

Как сделать так что бы он брал именно текущую цену и сравнивал ее с минимальной предыдущего часа?

Если по быстрому, то как то так

//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_SECTION
#property indicator_color1 clrLime
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//---- Входные параметры
input double Percent = 0.1;
//---- Переменные индикатора
double ExtMapBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   SetIndexBuffer(0, ExtMapBuffer, INDICATOR_DATA);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0);
//---
   return(INIT_SUCCEEDED);
  }
//-------------------------------------------------------------------+
//| Функция процесса                                                 |
//+------------------------------------------------------------------+
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[])

  {
   int i = rates_total - 1;
   if(prev_calculated <= 0)
      ArrayInitialize(ExtMapBuffer, 0);

//--- Отмечаем если текущая цена больше минимальной цены за предыдущий час на 0.1% и более
   if(ExtMapBuffer[i] == 0 || ExtMapBuffer[i] == EMPTY_VALUE)
      if(iClose(_Symbol, PERIOD_CURRENT, 0) - low[i - 1]  >= low[i - 1] * Percent / 100)
        {
         ExtMapBuffer[i] = high[i];
         ExtMapBuffer[i - 1] = low[i - 1];
        }
      else
         ExtMapBuffer[i] = 0;
   return(rates_total);
  }
//+------------------------------------------------------------------+

Запустите в тестере, так как этот код будет работать только онлайн.

Линии будут не совсем такие как вы ожидаете, точнее совсем не такие)))

Для ваших целей я не смог подобрать стиль рисования. Для отрисовки линий вам лучше использовать графические объекты - OBJ_TREND. 

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

пожалуйста помогите мне нужно чтобы каждый новый бар открывалась сделка мне нужно чтобы если Предыдущий бар был верх то buy если вниз то sell

Sergey Golubev, 2020.03.23 16:08

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.


 
Aleksandr Slavskii #:

Если по быстрому, то как то так

Запустите в тестере, так как этот код будет работать только онлайн.

Линии будут не совсем такие как вы ожидаете, точнее совсем не такие)))

Для ваших целей я не смог подобрать стиль рисования. Для отрисовки линий вам лучше использовать графические объекты - OBJ_TREND. 

Спасибо большое, но все равно почему то не работает))

Должно как то так получится как на скрине, а как такой код прописать до сих пор не пойму..

Файлы:
 
ravlat12 #:

Спасибо большое, но все равно почему то не работает))

Должно как то так получится как на скрине, а как такой код прописать до сих пор не пойму..

Можно попробовать заменить

#property indicator_separate_window
      if(iClose(_Symbol, PERIOD_CURRENT, 0) - low[i - 1]  >= low[i - 1] * Percent / 100)
        {
         ExtMapBuffer[i] = 1;
        }
      else
         ExtMapBuffer[i] = 0;
 
Aleksandr Slavskii #:

Можно попробовать заменить

Вообще ничего не показывает, просто пустое отдельное окно
 
Aleksandr Slavskii #:

Если по быстрому, то как то так

Запустите в тестере, так как этот код будет работать только онлайн.

Линии будут не совсем такие как вы ожидаете, точнее совсем не такие)))

Для ваших целей я не смог подобрать стиль рисования. Для отрисовки линий вам лучше использовать графические объекты - OBJ_TREND. 

Жуть ... 

 
Алексей Тарабанов #:

Жуть ... 

Согласен, жуть)))

Но какой вопрос, такой и ответ.

К тому же он вообще не стал читать, что я написал. Говорит не рисует.

А у меня, почему то рисует.  Судя по всему человеку нужен готовый индикатор, а слова "помогите поправить  индикатор", так для отмазки.


Делаем так

 if(ExtMapBuffer[i] == 0 || ExtMapBuffer[i] == EMPTY_VALUE)
      if(iClose(_Symbol, PERIOD_CURRENT, 0) - low[i - 1]  >= low[i - 1] * Percent / 100)
        {
         ExtMapBuffer[i] = 3;
         ExtMapBuffer[i - 1] = 1;
        }

и опять рисует 


Для понимания процесса, вполне достаточный код, имхо.

А если нужен полноценный индикатор, то пусть сам постарается, если стараться не охота или некогда, есть фриланс. 

Причина обращения: