0
переписывать ваши индикаторы это большой объем работы.
если нолик к сумме добавите, тогда может кто то и возьмется
avatar

AM2

  • 3 ноября 2025, 11:48
+1
если быстро то вот так:


//+------------------------------------------------------------------+
//|                                                       Levels.mq4 |
//|                                              Copyright 2025, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#property indicator_chart_window

input double lv=1.16;// уровень

input int step=33;   // шаг линий
input int count=5;   // число линий
input int width=1;   // толщина линий
input int barov=11;  // длина линий
input int sdvig=5;   // сдвиг линий

input color clr=Red; // цвет линий

input bool uplev=1;  // линии вверх
input bool dnlev=1;  // линии вниз
input bool right=1;  // метки

datetime t=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   Comment("");
   PutButton("levs",66,33,"START");
   if(lv!=0)
      PutLevels(lv);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Del();
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Del()
  {
   for(int i=ObjectsTotal()-1; i>=0; i--)
     {
      if(StringFind(ObjectName(i),"lev",0)>=0)
         ObjectDelete(0,ObjectName(i));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRLabel(string name,datetime time,double price)
  {
//--- создадим текстовую метку
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price);
//--- установим размер метки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,width);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,60);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if(t!=time[0])
     {
      for(int i=ObjectsTotal()-1; i>=0; i--)
        {
         if(StringFind(ObjectName(i),"lev",0)>=0)
           {
            if(!ObjectSet(ObjectName(0,i,-1,-1),OBJPROP_TIME1,time[0]+PeriodSeconds()*barov))
               Print("не удалось переместить метку! Код ошибки = ",GetLastError());

            if(ObjectType(ObjectName(0,i,0,OBJ_TREND)))
              {
               ObjectSetInteger(0,ObjectName(0,i,0,OBJ_TREND),OBJPROP_TIME1,time[0]);
               ObjectSetInteger(0,ObjectName(0,i,0,OBJ_TREND),OBJPROP_TIME2,time[0]+barov*PeriodSeconds());
              }
           }
        }
      t=time[0];
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLevels(double pr)
  {
   PutTrendLine("levnull",Time[0]+sdvig*PeriodSeconds(),pr,Time[0]+barov*PeriodSeconds()+sdvig*PeriodSeconds(),pr);

   if(right)
      PutRLabel("levlab",Time[0]+barov*PeriodSeconds()+sdvig*PeriodSeconds(),pr);

   for(int i=1; i<=count; i++)
     {
      if(uplev)
        {
         PutTrendLine("levup"+string(i),Time[0]+sdvig*PeriodSeconds(),pr+step*_Point*i,Time[0]+barov*PeriodSeconds()+sdvig*PeriodSeconds(),pr+step*_Point*i);

         if(right)
            PutRLabel("levulab"+string(i),Time[0]+barov*PeriodSeconds()+sdvig*PeriodSeconds(),pr+step*_Point*i);
        }

      if(dnlev)
        {
         PutTrendLine("levdn"+string(i),Time[0]+sdvig*PeriodSeconds(),pr-step*_Point*i,Time[0]+barov*PeriodSeconds()+sdvig*PeriodSeconds(),pr-step*_Point*i);

         if(right)
            PutRLabel("levdlab"+string(i),Time[0]+barov*PeriodSeconds()+sdvig*PeriodSeconds(),pr-step*_Point*i);
        }
     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {

   if(ObjectGetInteger(0,"levs",OBJPROP_STATE)==1)
     {
      if(id==CHARTEVENT_CLICK)
        {
         //--- подготовим переменные
         int      x     =(int)lparam;
         int      y     =(int)dparam;
         datetime dt    =0;
         double   price =0;
         int      window=0;

         //--- преобразуем координаты X и Y  в терминах дата/время
         ChartXYToTimePrice(0,x,y,window,dt,price);

         if(lv==0)
            PutLevels(price);
        }
     }

  }
//+------------------------------------------------------------------+

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

avatar

AM2

  • 31 октября 2025, 13:16
0
DeepSeek дает довольно таки приличный код. Загрузил тз и получил код подобный игруновскому. Жалко только картинки не рисует
avatar

AM2

  • 25 октября 2025, 14:36
0
1000р.
avatar

AM2

  • 24 октября 2025, 09:37
0
сделал через прокладку, для примера на индикаторе микс эрроу:



www.opentraders.ru/downloads/3987/
avatar

AM2

  • 28 сентября 2025, 09:46
0
сделал с доливом по тренду: www.opentraders.ru/downloads/3986/

avatar

AM2

  • 28 сентября 2025, 09:11
0
скиньте сам закрывающий индикатор. прокладка тут ни к чему
avatar

AM2

  • 27 сентября 2025, 21:03
0
реквизиты в личку скинул.
вот файлик: www.opentraders.ru/downloads/3985/
avatar

AM2

  • 26 сентября 2025, 17:39
0
здравствуйте. я предпологал работу на ренко графике в одну свечу-кирпич профит при убытке возможен мартингейл


нужно более подробное тз со скринами
avatar

AM2

  • 26 сентября 2025, 09:50
0
переделал под МА и РСИ. По ценам открытия получил подобный результат:

avatar

AM2

  • 25 сентября 2025, 11:19
0
индикатор тяжелый, его можно заменить на МА и осциллятор в теле советника
avatar

AM2

  • 24 сентября 2025, 13:57
0
15 dol


завтра скину готовый вариант. сейчас на работу пора
avatar

AM2

  • 24 сентября 2025, 13:55
0
очень хорошо идет советник, с минимальной просадкой:



за счет МА не открываются сделки против тренда
avatar

AM2

  • 24 сентября 2025, 13:53
0
ваша цена?
avatar

AM2

  • 24 сентября 2025, 12:37
0
ваша цена и более подробное тз?
avatar

AM2

  • 24 сентября 2025, 12:35
0
этот код нейросетка делала судя по всему. гигачат?
avatar

AM2

  • 20 сентября 2025, 17:26
0
добавил:

1. Проскальзывание
2. Число попыток
3. Мониторинг свопа отключаемый



www.opentraders.ru/downloads/3983/
avatar

AM2

  • 10 сентября 2025, 09:45