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

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

Вложения

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

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

Вложения

Товарищи, реально ли сделать вместо точек от Аccelerator Oscillator лучи ? Вместо красной точки луч вниз, вместо зеленой точки - луч вверх ? В редакторе бился полдня, ничего не вышло. Все лучи только вниз смотрят, а это не совсем то....
Если точки все-таки понадобятся, то включите их в настройках ShowDots = true. Также в настройках выбирайте стиль линий, цвет, толщину, отступ от high/low.
 

Вложения

Если точки все-таки понадобятся, то включите их в настройках ShowDots = true. Также в настройках выбирайте стиль линий, цвет, толщину, отступ от high/low.
На Вашем скрине всё отлично. Как я именно так и хотел :) В моём тереме почему-то нет. Линии ставятся рандомно. Причем при вертикальном масштабировании графика линии вообще непонятно по какому алгоритму рисуются
 

Вложения

  • Screenshot_2.jpg
    Screenshot_2.jpg
    85 КБ · Просмотры: 120
  • Screenshot_1.jpg
    Screenshot_1.jpg
    91,7 КБ · Просмотры: 120
  • Screenshot_3.jpg
    Screenshot_3.jpg
    68,1 КБ · Просмотры: 119
Товарищи, реально ли сделать вместо точек от Аccelerator Oscillator лучи ? Вместо красной точки луч вниз, вместо зеленой точки - луч вверх ? В редакторе бился полдня, ничего не вышло. Все лучи только вниз смотрят, а это не совсем то....
Вот функция из моего советника, которая рисует лучи (переданная переменная Style должна быть равной 0), направленные только вверх.
C-подобный:
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[0],Close[1]);
   else ObjectCreate(Name,OBJ_TREND,0,Time[0],Low[0],Time[0],High[0] + 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[0]), а вот по шкале цены она выше хая свечи на 25 пп. (4знак; можно указать любое значение - здесь важно направление). Поэтому лучи и рисуются вверх.
По аналогии, лучи, которые должны "смотреть" вниз, должны программироваться примерно так:
C-подобный:
ObjectCreate(Name,OBJ_TREND,0,Time[0],High[0],Time[0],Low[0] - 250 * _Point);
Для простоты Вы можете запрограммировать это одной строкой с помощью оператора ? :
C-подобный:
ObjectCreate(Name,OBJ_TREND,0,Time[0],[вниз?] ? High[0] : Low[0]),Time[0],[вниз?] ? Low[0] - 250 * _Point : High[0] + 250 * _Point);
 
Вот функция из моего советника, которая рисует лучи (переданная переменная Style должна быть равной 0), направленные только вверх.
C-подобный:
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[0],Close[1]);
   else ObjectCreate(Name,OBJ_TREND,0,Time[0],Low[0],Time[0],High[0] + 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[0]), а вот по шкале цены она выше хая свечи на 25 пп. (4знак; можно указать любое значение - здесь важно направление). Поэтому лучи и рисуются вверх.
По аналогии, лучи, которые должны "смотреть" вниз, должны программироваться примерно так:
C-подобный:
ObjectCreate(Name,OBJ_TREND,0,Time[0],High[0],Time[0],Low[0] - 250 * _Point);
Для простоты Вы можете запрограммировать это одной строкой с помощью оператора ? :
C-подобный:
ObjectCreate(Name,OBJ_TREND,0,Time[0],[вниз?] ? High[0] : Low[0]),Time[0],[вниз?] ? Low[0] - 250 * _Point : High[0] + 250 * _Point);
Спасибо за участие, но не помогло. Куча ошибок при компиляции, а там..... наподобие китайской грамоты )
 
На Вашем скрине всё отлично. Как я именно так и хотел :) В моём тереме почему-то нет. Линии ставятся рандомно. Причем при вертикальном масштабировании графика линии вообще непонятно по какому алгоритму рисуются
Предположу, что у Вас в окне отображается большое количество баров. И терминал по какой-то внутренней причине не может отрисовать столько графических объектов(линий). Проблема с отрисовкой графических объектов часто встречается на терминалах МТ5.
Ограничил историю расчета индикатора и отрисовки графических объектов (History в настройках). Протестировал на различных инструментах и различных тайм-фреймах. Скрин с масштабированием одного и того же участка прикрепил.
 

Вложения

  • Accelerator Oscillator ARROW mod.mq5
    Accelerator Oscillator ARROW mod.mq5
    19,9 КБ · Просмотры: 20
  • 1751813555277.png
    1751813555277.png
    49,8 КБ · Просмотры: 79
  • 1751813577729.png
    1751813577729.png
    77,9 КБ · Просмотры: 79
Последнее редактирование:
Предположу, что у Вас в окне отображается большое количество баров. И терминал по какой-то внутренней причине не может отрисовать столько графических объектов(линий). Проблема с отрисовкой графических объектов часто встречается на терминалах МТ5.
Ограничил историю расчета индикатора и отрисовки графических объектов (History в настройках). Протестировал на различных инструментах и различных тайм-фреймах. Скрин с масштабированием одного и того же участка прикрепил.
В окне всего 1000 баров. Причина была совсем в другом. Поставил на график евро-бакс - все отлично ! Работает индюк так как и было задумано. А я работаю на индексах бинари. А вот на них то как раз и не пашет. Точки АО есть - а линий нэт.... Странно. Но всё равно спасибо за труды
 
  • Like
Реакции: BUT
Всем доброго здравия. Можно поправить ошибку в индикаторе прокладке. Стрелки ставит не правильно.
//+------------------------------------------------------------------+
//| 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);
}
 
Последнее редактирование модератором:
В окне всего 1000 баров. Причина была совсем в другом. Поставил на график евро-бакс - все отлично ! Работает индюк так как и было задумано. А я работаю на индексах бинари. А вот на них то как раз и не пашет. Точки АО есть - а линий нэт.... Странно. Но всё равно спасибо за труды
Но причину надо выяснить, чтобы с ней столкнувшись в будущем, сразу понимать первопричину.
Причину нашел.
 

Вложения

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

Вложения

  • ABHAFXS V03 2017 __mod.mq4
    ABHAFXS V03 2017 __mod.mq4
    14 КБ · Просмотры: 15
  • AUDUSDM15.png
    AUDUSDM15.png
    42,6 КБ · Просмотры: 165
  • 2025-07-07_07-23-34.png
    2025-07-07_07-23-34.png
    233,6 КБ · Просмотры: 164
Ребят, доработайте пожалуйста данный индикатор. Добавьте в настройки его ,прорисовку уровней в виде горизонтальных линий,с настройками цвета,вида.толщины. И можете убрать не нужную инфу по нему ,в коде с 1 по 9 строчку,сам пытался индикатор не запускается :)
 

Вложения

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

Вложения

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

Вложения

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

Посмотрели (2020) Посмотреть

Отслеживают (1854) Посмотреть

Назад
Верх