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

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

---

## jhndoo — 2025-06-26 01:00

Господа, товарищи программисты! Нужно уменьшить количество баров 
на истории, советник не тянет это индикатор. ИИ не справился с такой работой.

## Billy Kid — 2025-06-27 12:16

> Цитата (vladradon):
> Все нормально ставится...

vladradon, ты классный кодер. Сделай, пожалуйста, простецкий индикатор. 
Диапазон текущего бара делится на диапазон предыдущего бара. Если разность меньше чем 1, то индикатор ниже нуля, если разность больше чем 1, то индикатор выше нуля. И прикрутить к сему сигнальную машку. 
Можно такое сделать и назвать Hiperboloid?

P.S.
хотя, логично поставить там уровень 1 вместо нуля

## nikolaiads — 2025-07-05 14:48

Товарищи, реально ли сделать вместо точек  от Аccelerator Oscillator лучи ? Вместо красной точки луч вниз, вместо зеленой точки - луч вверх ? В редакторе бился полдня, ничего не вышло. Все лучи только вниз смотрят, а это не совсем то....

## BUT — 2025-07-05 22:28

> Цитата (nikolaiads):
> Товарищи, реально ли сделать вместо точек  от Аccelerator Oscillator лучи ? Вместо красной точки луч вниз, вместо зеленой точки - луч вверх ? В редакторе бился полдня, ничего не вышло. Все лучи только вниз смотрят, а это не совсем то....

Если точки все-таки понадобятся, то включите их в настройках ShowDots = true. Также в настройках выбирайте стиль линий, цвет, толщину, отступ от high/low.

## nikolaiads — 2025-07-06 10:48

> Цитата (BUT):
> Если точки все-таки понадобятся, то включите их в настройках ShowDots = true. Также в настройках выбирайте стиль линий, цвет, толщину, отступ от high/low.

На Вашем скрине всё отлично. Как я именно так и хотел :) В моём тереме почему-то нет. Линии ставятся рандомно. Причем при вертикальном масштабировании графика линии вообще непонятно по какому алгоритму рисуются

## ИванМН — 2025-07-06 14:21

> Цитата (nikolaiads):
> Товарищи, реально ли сделать вместо точек  от Аccelerator Oscillator лучи ? Вместо красной точки луч вниз, вместо зеленой точки - луч вверх ? В редакторе бился полдня, ничего не вышло. Все лучи только вниз смотрят, а это не совсем то....

Вот функция из моего советника, которая рисует лучи (переданная переменная Style должна быть равной 0), направленные только вверх.

```
void DrawLine(color Colour,bool Background,uchar Style,string Text = "")
{
   string Name = Style == 1 ? string(Bars) : string(Bars) + " " + Text;
   if (Style == 1) ObjectCreate(Name,OBJ_VLINE,0,Time,Close);
   else ObjectCreate(Name,OBJ_TREND,0,Time,Low,Time,High + 250 * _Point);
   ObjectSet    (Name,OBJPROP_RAY_RIGHT,Style == 1 ? false : true);
   ObjectSet    (Name,OBJPROP_COLOR, Colour);
   ObjectSet    (Name,OBJPROP_STYLE, Style);
   ObjectSet    (Name,OBJPROP_BACK, Background);
   if (Style == 1) ObjectSetText(Name,Text);
}
```

Как видите, для того чтобы луч был направлен вверх, нам надо сначала указать пару координат первой точки привязки (в данном случае - цена Low бара отрисовки (текущего), затем пару координат второй точки: по шкале времени она та же (Time), а вот по шкале цены она выше хая свечи на 25 пп. (4знак; можно указать любое значение - здесь важно направление). Поэтому лучи и рисуются вверх.
По аналогии, лучи, которые должны "смотреть" вниз, должны программироваться примерно так:

```
ObjectCreate(Name,OBJ_TREND,0,Time,High,Time,Low - 250 * _Point);
```

Для простоты Вы можете запрограммировать это одной строкой с помощью оператора ? :

```
ObjectCreate(Name,OBJ_TREND,0,Time,[вниз?] ? High : Low),Time,[вниз?] ? Low - 250 * _Point : High + 250 * _Point);
```

## nikolaiads — 2025-07-06 15:38

> Цитата (ИванМН):
> Вот функция из моего советника, которая рисует лучи (переданная переменная Style должна быть равной 0), направленные только вверх.
> 
```
void DrawLine(color Colour,bool Background,uchar Style,string Text = "")
> {
>    string Name = Style == 1 ? string(Bars) : string(Bars) + " " + Text;
>    if (Style == 1) ObjectCreate(Name,OBJ_VLINE,0,Time,Close);
>    else ObjectCreate(Name,OBJ_TREND,0,Time,Low,Time,High + 250 * _Point);
>    ObjectSet    (Name,OBJPROP_RAY_RIGHT,Style == 1 ? false : true);
>    ObjectSet    (Name,OBJPROP_COLOR, Colour);
>    ObjectSet    (Name,OBJPROP_STYLE, Style);
>    ObjectSet    (Name,OBJPROP_BACK, Background);
>    if (Style == 1) ObjectSetText(Name,Text);
> }
```

> Как видите, для того чтобы луч был направлен вверх, нам надо сначала указать пару координат первой точки привязки (в данном случае - цена Low бара отрисовки (текущего), затем пару координат второй точки: по шкале времени она та же (Time), а вот по шкале цены она выше хая свечи на 25 пп. (4знак; можно указать любое значение - здесь важно направление). Поэтому лучи и рисуются вверх.
> По аналогии, лучи, которые должны "смотреть" вниз, должны программироваться примерно так:
> 
```
ObjectCreate(Name,OBJ_TREND,0,Time,High,Time,Low - 250 * _Point);
```

> Для простоты Вы можете запрограммировать это одной строкой с помощью оператора ? :
> 
```
ObjectCreate(Name,OBJ_TREND,0,Time,[вниз?] ? High : Low),Time,[вниз?] ? Low - 250 * _Point : High + 250 * _Point);
```

Спасибо за участие, но не помогло. Куча ошибок при компиляции, а там..... наподобие китайской грамоты )

## BUT — 2025-07-06 17:55

> Цитата (nikolaiads):
> На Вашем скрине всё отлично. Как я именно так и хотел :) В моём тереме почему-то нет. Линии ставятся рандомно. Причем при вертикальном масштабировании графика линии вообще непонятно по какому алгоритму рисуются

Предположу, что у Вас в окне отображается большое количество баров. И терминал по какой-то внутренней причине не может отрисовать столько графических объектов(линий). Проблема с отрисовкой графических объектов часто встречается на терминалах МТ5.
Ограничил историю расчета индикатора и отрисовки графических объектов (History в настройках). Протестировал на различных инструментах и различных тайм-фреймах. Скрин с масштабированием одного и того же участка прикрепил.

## DAWEIZHANG — 2025-07-06 18:06

**倒影旋转。
**

## nikolaiads — 2025-07-06 19:02

> Цитата (BUT):
> Предположу, что у Вас в окне отображается большое количество баров. И терминал по какой-то внутренней причине не может отрисовать столько графических объектов(линий). Проблема с отрисовкой графических объектов часто встречается на терминалах МТ5.
> Ограничил историю расчета индикатора и отрисовки графических объектов (History в настройках). Протестировал на различных инструментах и различных тайм-фреймах. Скрин с масштабированием одного и того же участка прикрепил.

В окне всего 1000 баров. Причина была совсем в другом. Поставил на график евро-бакс - все отлично ! Работает индюк так как и было задумано. А я работаю на индексах бинари. А вот на них то как раз и не пашет. Точки АО есть - а линий нэт.... Странно. Но всё равно спасибо за труды

## olegkom — 2025-07-06 20:43

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

//+------------------------------------------------------------------+
//|                                  SuperTrend_Cross_Arrow.mq4     |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2

extern int Fast_CCIperiod = 50;
extern int Fast_ATRperiod = 5;

extern int Slow_CCIperiod = 100;
extern int Slow_ATRperiod = 10;

extern int ArrowGap = 10;
extern string ST_Indicator_Name = "SuperTrend nrp"; // без .mq4

extern bool EnableAlert = true;
extern bool EnableSound = true;
extern bool EnablePush = false;

double BuyArrow[];
double SellArrow[];

int OnInit()
{
   SetIndexBuffer(0, BuyArrow);
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0, 233); // стрелка вверх

   SetIndexBuffer(1, SellArrow);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexArrow(1, 234); // стрелка вниз

   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 = rates_total - 100;
   if (limit < 1) return(0);

   for (int i = limit; i >= 1; i--)
   {
      double fastDirPrev = iCustom(NULL, 0, ST_Indicator_Name, "", Fast_CCIperiod, Fast_ATRperiod, 5, 3, i + 1);
      double fastDirCurr = iCustom(NULL, 0, ST_Indicator_Name, "", Fast_CCIperiod, Fast_ATRperiod, 5, 3, i);

      double slowDirPrev = iCustom(NULL, 0, ST_Indicator_Name, "", Slow_CCIperiod, Slow_ATRperiod, 5, 3, i + 1);
      double slowDirCurr = iCustom(NULL, 0, ST_Indicator_Name, "", Slow_CCIperiod, Slow_ATRperiod, 5, 3, i);

      // Buy signal
      if (fastDirPrev == -1 && slowDirPrev == -1 && fastDirCurr == 1 && slowDirCurr == 1)
      {
         BuyArrow* = Low - ArrowGap * Point;
         SellArrow = EMPTY_VALUE;

         if (i == 1) TriggerAlert("Buy", Time);
      }
      // Sell signal
      else if (fastDirPrev == 1 && slowDirPrev == 1 && fastDirCurr == -1 && slowDirCurr == -1)
      {
         SellArrow = High + ArrowGap * Point;
         BuyArrow = EMPTY_VALUE;

         if (i == 1) TriggerAlert("Sell", Time);
      }
      else
      {
         BuyArrow = EMPTY_VALUE;
         SellArrow = EMPTY_VALUE;
      }
   }

   return(rates_total);
}

//+------------------------------------------------------------------+
//| Функция алертов и уведомлений                                   |
//+------------------------------------------------------------------+
void TriggerAlert(string signalType, datetime barTime)
{
   string msg = "SuperTrend Cross Signal: " + signalType + " on " + Symbol() + " (" + TimeToString(barTime, TIME_DATE | TIME_MINUTES) + ")";
   
   if (EnableAlert) Alert(msg);
   if (EnableSound) PlaySound("alert.wav");
   if (EnablePush)  SendNotification(msg);
}*

## BUT — 2025-07-06 21:16

> Цитата (nikolaiads):
> В окне всего 1000 баров. Причина была совсем в другом. Поставил на график евро-бакс - все отлично ! Работает индюк так как и было задумано. А я работаю на индексах бинари. А вот на них то как раз и не пашет. Точки АО есть - а линий нэт.... Странно. Но всё равно спасибо за труды

Но причину надо выяснить, чтобы с ней столкнувшись в будущем, сразу понимать первопричину.
Причину нашел.

## nikolaiads — 2025-07-07 07:19

> Цитата (BUT):
> Но причину надо выяснить, чтобы с ней столкнувшись в будущем, сразу понимать первопричину.
> Причину нашел.

Теперь гуд. Спасибо от души !

## S D V — 2025-07-07 07:32

Ребят, доработайте пожалуйста данный индикатор. Добавьте в настройки его ,прорисовку уровней в виде горизонтальных линий,с настройками цвета,вида.толщины. И можете убрать не нужную инфу по нему ,в коде с 1 по 9 строчку,сам пытался индикатор не запускается :)

## BUT — 2025-07-07 09:02

> Цитата (S D V):
> Ребят, доработайте пожалуйста данный индикатор. Добавьте в настройки его ,прорисовку уровней в виде горизонтальных линий,с настройками цвета,вида.толщины. И можете убрать не нужную инфу по нему ,в коде с 1 по 9 строчку,сам пытался индикатор не запускается :)

## S D V — 2025-07-07 10:09

Спасибо! Подправьте пожалуйста,чтоб линия соответствовала  цвету уровня ,а можно ли убрать цену в прямоугольниках(которая после каждого уровня стоит) ?

## BUT — 2025-07-08 04:06

> Цитата (S D V):
> Спасибо! Подправьте пожалуйста,чтоб линия соответствовала  цвету уровня ,а можно ли убрать цену в прямоугольниках(которая после каждого уровня стоит) ?

Цвет буферных линий и уровней вывел в настройки.

## S D V — 2025-07-08 08:57

> Цитата (BUT):
> Цвет буферных линий и уровней вывел в настройки.

Спасибо большое!

## DAWEIZHANG — 2025-07-08 14:28

Запрос #33049 еще раз о помощи в вращении и зеркалировании

## SanyaVS — 2025-07-09 10:11

Доброго дня!Скажите есть у кого индикатор чтоб на графике подсвечивал заданную свечу по времени. Например выставил 13.00 или 17.00 и она как то выделяется. Может спецы выполнят мою просьбу-очень надо. Спасибо за помощь

---

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