# Доработка ботов (советников, индикаторов) vol. 2

Раздел: Язык программирования MQL4
Автор темы: chocolate
Создана: 2014-10-02 12:48
Ответов: 33795 | Просмотров: 6650213
Страница 1615 из 1690
Источник: https://forexsystemru.com/threads/77111/page-1615

---

## EinsteinE — 2024-12-13 22:08

Чтобы внести изменения, такие как фиксирование стрелок на графике и отправка email-уведомлений, нужен исходный код

## EinsteinE — 2024-12-13 22:11

> Цитата (красотка маша):
> уважаемые программисты. прошу добавить вторую ма с шифтом. сдвинутую на n баров. тому будет счастье

Я добавил вторую скользящую среднюю (МА) с возможностью указать её период (maPeriod2) и сдвиг (maShift2) на *n* баров. Если нужно изменить или дополнить что-либо ещё, дайте знать!

```
//+------------------------------------------------------------------+
//|                                                    Ticks Volume  |
//|                                                    Version 1.1  |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

#include <MovingAverages.mqh>

//--- input parameters
input int maPeriod1 = 14;     // Период первой MA
input int maPeriod2 = 14;     // Период второй MA
input int maShift2  = 5;      // Сдвиг второй MA на n баров

//--- indicator buffers
double ExtVolumeBuffer[];
double ExtMABuffer1[];
double ExtMABuffer2[];

//--- handles for moving averages
int maHandle1;
int maHandle2;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                        |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- assign buffers
   SetIndexBuffer(0, ExtVolumeBuffer, INDICATOR_DATA);
   SetIndexBuffer(1, ExtMABuffer1, INDICATOR_DATA);
   SetIndexBuffer(2, ExtMABuffer2, INDICATOR_DATA);
  
   //--- set names for legend
   IndicatorShortName("Ticks Volume with Two MAs");
  
   //--- create moving average handles
   maHandle1 = iMA(NULL, 0, maPeriod1, 0, MODE_SMA, PRICE_CLOSE);
   maHandle2 = iMA(NULL, 0, maPeriod2, maShift2, MODE_SMA, PRICE_CLOSE);
  
   if (maHandle1 == INVALID_HANDLE || maHandle2 == INVALID_HANDLE)
   {
      Print("Failed to create MA handles");
      return(INIT_FAILED);
   }
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                             |
//+------------------------------------------------------------------+
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 begin = prev_calculated;
   if (begin == 0) begin = maPeriod1 > maPeriod2 ? maPeriod1 : maPeriod2;
  
   for (int i = begin; i < rates_total; i++)
   {
      ExtVolumeBuffer = tick_volume;
      ExtMABuffer1 = iMA(NULL, 0, maPeriod1, 0, MODE_SMA, PRICE_CLOSE, i);
      ExtMABuffer2 = iMA(NULL, 0, maPeriod2, maShift2, MODE_SMA, PRICE_CLOSE, i);
   }
  
   return(rates_total);
  }
//+------------------------------------------------------------------+

```

## EinsteinE — 2024-12-13 22:14

> Цитата (oboroten13):
> Подскажите, задача сделать, чтоб этот индикатор отображался поверх остальных индикаторов на графике.  Возможно ли добавить такое свойство OBJPROP_BACK ?

добавил функцию DrawOverlayObjects, которая создает объекты типа OBJ_TREND с параметром OBJPROP_BACK, установленным в false, чтобы они отображались поверх других индикаторов.

```
//+------------------------------------------------------------------+
//|                                                    LineBar2.mq5 |
//|                        Copyright 2024, MetaQuotes Software Corp.|
//|                                       https://www.metaquotes.net|
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

//--- plot 1 settings
#property indicator_label1  "Up Bar"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Green
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

//--- plot 2 settings
#property indicator_label2  "Down Bar"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  Red
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

//--- indicator buffers
double         UpBuffer[];
double         DownBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- map buffers to plots
   SetIndexBuffer(0,UpBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,DownBuffer,INDICATOR_DATA);

   //--- name for the indicator
   IndicatorSetString(INDICATOR_SHORTNAME,"LineBar2 Green");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   //--- check if there is enough data
   if (rates_total < 2)
      return(0);

   //--- main loop
   for (int i = prev_calculated; i < rates_total; i++)
   {
      if (close > open)
      {
         UpBuffer = close;
         DownBuffer = EMPTY_VALUE;
      }
      else
      {
         DownBuffer = close;
         UpBuffer = EMPTY_VALUE;
      }
   }

   //--- draw objects on the chart
   DrawOverlayObjects(rates_total);

   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Draw overlay objects                                             |
//+------------------------------------------------------------------+
void DrawOverlayObjects(const int rates_total)
  {
   for (int i = rates_total - 1; i >= rates_total - 10 && i >= 0; i--)
   {
      string objName = "OverlayLine_" + IntegerToString(i);
      if (ObjectFind(objName) == -1)
      {
         ObjectCreate(0, objName, OBJ_TREND, 0, Time, Low, Time[i + 1], High[i + 1]);
         ObjectSetInteger(0, objName, OBJPROP_COLOR, clrLime);
         ObjectSetInteger(0, objName, OBJPROP_WIDTH, 1);
         ObjectSetInteger(0, objName, OBJPROP_BACK, false);  // Позиционирование поверх других индикаторов
      }
   }
  }
//+------------------------------------------------------------------+

```

## oboroten13 — 2024-12-14 10:12

> Цитата (EinsteinE):
> добавил функцию DrawOverlayObjects, которая создает объекты типа OBJ_TREND с параметром OBJPROP_BACK, установленным в false, чтобы они отображались поверх других индикаторов.
> 
```
//+------------------------------------------------------------------+
> //|                                                    LineBar2.mq5 |
> //|                        Copyright 2024, MetaQuotes Software Corp.|
> //|                                       https://www.metaquotes.net|
> //+------------------------------------------------------------------+
> #property indicator_chart_window
> #property indicator_buffers 2
> #property indicator_plots   2
>
> //--- plot 1 settings
> #property indicator_label1  "Up Bar"
> #property indicator_type1   DRAW_HISTOGRAM
> #property indicator_color1  Green
> #property indicator_style1  STYLE_SOLID
> #property indicator_width1  2
>
> //--- plot 2 settings
> #property indicator_label2  "Down Bar"
> #property indicator_type2   DRAW_HISTOGRAM
> #property indicator_color2  Red
> #property indicator_style2  STYLE_SOLID
> #property indicator_width2  2
>
> //--- indicator buffers
> double         UpBuffer[];
> double         DownBuffer[];
>
> //+------------------------------------------------------------------+
> //| Custom indicator initialization function                         |
> //+------------------------------------------------------------------+
> int OnInit()
>   {
>    //--- map buffers to plots
>    SetIndexBuffer(0,UpBuffer,INDICATOR_DATA);
>    SetIndexBuffer(1,DownBuffer,INDICATOR_DATA);
>
>    //--- name for the indicator
>    IndicatorSetString(INDICATOR_SHORTNAME,"LineBar2 Green");
>
>    return(INIT_SUCCEEDED);
>   }
> //+------------------------------------------------------------------+
> //| Custom indicator iteration function                              |
> //+------------------------------------------------------------------+
> 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[])
>   {
>    //--- check if there is enough data
>    if (rates_total < 2)
>       return(0);
>
>    //--- main loop
>    for (int i = prev_calculated; i < rates_total; i++)
>    {
>       if (close > open)
>       {
>          UpBuffer = close;
>          DownBuffer = EMPTY_VALUE;
>       }
>       else
>       {
>          DownBuffer = close;
>          UpBuffer = EMPTY_VALUE;
>       }
>    }
>
>    //--- draw objects on the chart
>    DrawOverlayObjects(rates_total);
>
>    return(rates_total);
>   }
> //+------------------------------------------------------------------+
> //| Draw overlay objects                                             |
> //+------------------------------------------------------------------+
> void DrawOverlayObjects(const int rates_total)
>   {
>    for (int i = rates_total - 1; i >= rates_total - 10 && i >= 0; i--)
>    {
>       string objName = "OverlayLine_" + IntegerToString(i);
>       if (ObjectFind(objName) == -1)
>       {
>          ObjectCreate(0, objName, OBJ_TREND, 0, Time, Low, Time[i + 1], High[i + 1]);
>          ObjectSetInteger(0, objName, OBJPROP_COLOR, clrLime);
>          ObjectSetInteger(0, objName, OBJPROP_WIDTH, 1);
>          ObjectSetInteger(0, objName, OBJPROP_BACK, false);  // Позиционирование поверх других индикаторов
>       }
>    }
>   }
> //+------------------------------------------------------------------+
> 
```

У меня ошибки показывает компилятор. Сильно ругается. Видимо не прокатывает такой способ.

## marattmb — 2024-12-15 02:17

Доброго времени суток!
Уважаемые специалисты, просьба озвучить пробой сигнальной линией границ канала(касание).

## ale9551 — 2024-12-15 15:32

Уважаемые программисты!
Добавьте пожалуйста в советник фильтр работы по времени терминала.
Заранее благодарен!

## Surem — 2024-12-15 15:33

Увадаемые специалисты, прошу обратить ещё раз внимание.  [Доработка ботов (советников, индикаторов) vol. 2]('https://forexsystemru.com/threads/dorabotka-botov-sovetnikov-indikatorov-vol-2.77111/post-1955864')
Немного по другому нужно, буду благодарен за стрелку с алертом. Глаз замыливается и не успевает уследить за визуалом. Нужно когда линия находится ниже ноля и число справа из красного изменится на зелёный (в настройках синий по умолчанию) это стрелка вверх, когда линия индюка выше ноля и число из красного меняется на зелёный это стрелка вниз. Так то вообще сначала число чередуется и так что число сначала зелёное потом красное и снова зелёное. Надо именно учитывать как написал в динамике такой.

## RoninGT — 2024-12-16 00:31

Здравствуйте! Добавьте, пожалуйста, алерт🙏

## ale9551 — 2024-12-16 07:34

Уважаемые программисты!
Добавьте пожалуйста в советник закрывашку сделок фильтр максимального спреда,при превышении которого советник после наступления заданного времени не должен закрывать сделки,а закрывал бы их после возвращения спреда к заданным значениям. после достижения заданного времени.
Заранее благодарен!

## faustoun — 2024-12-16 10:02

Добрый день, проблема в советнике, никак не могу решить
нужно чтобы после стоп лосса лот увеличивался в 2 раза, и после тэйкпрофита с увеличенным лотом, лот сбрасывался на стартовый

## erex — 2024-12-16 12:01

Приветствую. Двойная просьба.
В другой теме всплыли 2 индикатора Ивана Корнилова (сам он не появлялся на мкл5 с 2022 года). Приятные такие индюки, уровни показывают. Но вместе на графике лежать не хотят. Дневным индикатором вытесняется недельный. И еще - нет у них ставших стандартом современного индикаторостроения кнопок вкл/выкл.
Было бы очень замечательно, если бы кто-нибудь помахал волшебной палочкой в предновогодние дни.

[Дополнительная инфа]('https://forexsystemru.com/threads/delyus-graalem.76901/post-1956237')

## MakarFX — 2024-12-16 13:09

> Цитата (erex):
> Приветствую. Двойная просьба.
> Было бы очень замечательно, если бы кто-нибудь помахал волшебной палочкой в предновогодние дни.

## MakarFX — 2024-12-16 13:24

> Цитата (faustoun):
> Добрый день, проблема в советнике, никак не могу решить
> нужно чтобы после стоп лосса лот увеличивался в 2 раза, и после тэйкпрофита с увеличенным лотом, лот сбрасывался на стартовый

## S.McDuck — 2024-12-16 13:40

> Цитата (S.McDuck):
> MakarFX
> Давай ещё доработаем советника.
> Надо внести параметры.
> extern double Point_TP = 0.0;
> extern double Point_SL = 0.0;
> Если прописать соответствующие значения цены то при его достижении закрываются все ордера.

MakarFX
Посмотри пожалуйста.
Спасибо.

## MakarFX — 2024-12-16 13:43

> Цитата (ale9551):
> Уважаемые программисты!
> Добавьте пожалуйста в советник фильтр работы по времени терминала.
> Заранее благодарен!

Если sOpenHour < sCloseHour - торгует внутри дня
Если sOpenHour > sCloseHour - торгует через полночь

## faustoun — 2024-12-16 13:50

круто работает спасибо
а можно по поводу индикатора уточнить
настройка reDraw перестраивает индикатор в зависимости от настройки TF
не могу понять как сделать чтобы индикатор перестраивался на определенное время, например на 23 30

## MakarFX — 2024-12-16 13:55

> Цитата (S.McDuck):
> Посмотри пожалуйста.
> Спасибо.

Это не так просто.
Усреднение я делать не буду, если Вас устроит добавил закрытие по профиту и убытку в валюте.

## MakarFX — 2024-12-16 14:02

> Цитата (faustoun):
> круто работает спасибо
> а можно по поводу индикатора уточнить
> настройка reDraw перестраивает индикатор в зависимости от настройки TF
> не могу понять как сделать чтобы индикатор перестраивался на определенное время, например на 23 30

Индикатор работает по ТФ, какой ТФ в настройках так и уровни строит. autoRedraw - перестраивает на новом баре установленного в настройках ТФ

## faustoun — 2024-12-16 14:04

> Цитата (MakarFX):
> Индикатор работает по ТФ, какой ТФ в настройках так и уровни строит. autoRedraw - перестраивает на новом баре установленного в настройках ТФ

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

## erex — 2024-12-16 14:31

> Цитата (MakarFX):
>

Как говаривал Дэн Винчестер в озвучке Лоста, очешуительно!

---

Следующая страница: https://forexsystemru.com/threads/77111/page-1616
