OSS5

 
Уровень 14


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Советник на индикаторе ZLines.

Добрый день!
Просьба написать советника (мт4) на индикаторе ZLines. Появилась синяя стрелка — открыли buy, появилась красная стрелка — открыли sell. Закрываем ордера по тп, сл.


Индикатор ZLines.mq 4 (0 Kb) ZLines.rar (1 Kb)
  • 0
  • Просмотров: 2618
  • 9 января 2024, 10:45
  • OSS5
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Доработка советника
07 января 2024
09 января 2024

Брокер для ваших роботов, 15 лет на рынке

Комментарии (18)

+
0
Вот этот вот советник
zakaz.opentraders.ru/55030.html

сам строит линии так же как и ваш индикатор. И входы у него по вашему алгоритму, хотя автор просил немного другое но Андрей его не правильно понял (либо не стал сильно заморачиваться и написал упрощённый вариант), и как раз написал то, что вы просите.
Попробуйте может вас он устроит.
avatar

  20  alex30774 Сообщений: 748

  • 9 января 2024, 11:49
+
0
Спасибо, глянул. Так-то похожий, но нужен по индикатору zlines.
Редактирован: 9 января 2024, 17:04
avatar

  14  OSS5 Автор Сообщений: 148

  • 9 января 2024, 14:22
+
0
У меня индюк вообще стрелки не ставит.
avatar

  20  alex30774 Сообщений: 748

  • 9 января 2024, 15:37
+
0
Стрелки ставит и в тестере и в реале.
Сегодня:

Редактирован: 9 января 2024, 17:00
avatar

  14  OSS5 Автор Сообщений: 148

  • 9 января 2024, 16:58
+
0
Автор, а в чём суть индикатора. Вроде рисует палки пытаясь нарисовать волну Вульфа. Но стрелки ставятся не по входу по Вульфу. Стрелка появляется основываясь на чём?
avatar

  11  njdftgh Сообщений: 237 - Shoom

  • 9 января 2024, 15:08
+
0
Старина, самому интересно.
Редактирован: 9 января 2024, 17:01
avatar

  14  OSS5 Автор Сообщений: 148

  • 9 января 2024, 17:01
+
0
не открывается архив. пароль просит или ключ
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 9 января 2024, 16:02
+
0
Андрей, вот сам код индикатора. Форум сегодня у меня глючит, пароля на архив нет и не было, почему не открывает, не знаю.
//+------------------------------------------------------------------+
//| ZLines.mq4 |
//| Copyright 2023, AM2 |
//| www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright «Copyright 2023, AM2»
#property link «www.forexsystems.biz»
#property version «1.00»
#property strict

#property indicator_chart_window

input int Depth = 12;
input int Dev = 5;
input int Back = 3;

input bool Mail = 0;
input bool Push = 0;
input bool Alerts = 1;

datetime t=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
Comment("");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double ZZPrice(int n=0)
{
double zz=0;
int k=0;

for(int i=0; i<1111; i++)
{
zz=iCustom(NULL,0,«ZigZag»,Depth,Dev,Back,0,i);

if(zz!=0)
{
k++;
if(k>n)
return(zz);
}
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int ZZBar(int n=0)
{
double zz=0;
int k=0;

for(int i=0; i<1111; i++)
{
zz=iCustom(NULL,0,«ZigZag»,Depth,Dev,Back,0,i);

if(zz!=0)
{
k++;
if(k>n)
return(i);
}
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
{
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,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,1);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutArrow(string name,int code,double p,datetime time,color clr)
{
ObjectDelete(0,name);
//--- создадим стрелку
ObjectCreate(0,name,OBJ_ARROW,0,time,p);
//--- установим код стрелки
ObjectSetInteger(0,name,OBJPROP_ARROWCODE,code);
//--- установим способ привязки
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- установим цвет стрелки
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим размер стрелки
ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
}
//+------------------------------------------------------------------+
//| 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(ZZPrice(4)>ZZPrice(2) && ZZPrice(3)>ZZPrice(1))
{
PutTrendLine(«14b»,time[ZZBar(4)],ZZPrice(4),time[ZZBar(1)],ZZPrice(1),Blue);
PutTrendLine(«13b»,time[ZZBar(4)],ZZPrice(4),time[ZZBar(2)],ZZPrice(2),Blue);
PutTrendLine(«24b»,time[ZZBar(3)],ZZPrice(3),time[ZZBar(1)],ZZPrice(1),Blue);
}

if(ZZPrice(4)<ZZPrice(2) && ZZPrice(3)<ZZPrice(1))
{
PutTrendLine(«14s»,time[ZZBar(4)],ZZPrice(4),time[ZZBar(1)],ZZPrice(1),Red);
PutTrendLine(«13s»,time[ZZBar(4)],ZZPrice(4),time[ZZBar(2)],ZZPrice(2),Red);
PutTrendLine(«24s»,time[ZZBar(3)],ZZPrice(3),time[ZZBar(1)],ZZPrice(1),Red);
}

double z13b=ObjectGetValueByShift(«13b»,1);
double z13s=ObjectGetValueByShift(«13s»,1);

if(t!=Time[0])
{
if(Close[1]>z13b && Open[1]<z13b)
{
if(Alerts)
Alert(_Symbol+" Buy!");
if(Push)
SendNotification(_Symbol+" Buy!");
if(Mail)
SendMail(«Buy!»,_Symbol+" Buy!");
PutArrow(«Buy Arrow»,233,Low[1],Time[1],Blue);
}

if(Close[1]<z13s && Open[1]>z13s)
{
if(Alerts)
Alert(_Symbol+" Sell!");
if(Push)
SendNotification(_Symbol+" Sell!");
if(Mail)
SendMail(«Buy!»,_Symbol+" Sell!");
PutArrow(«Sell Arrow»,234,High[1],Time[1],Red);
}
t=Time[0];
}

//--- return value of prev_calculated for next call
return(rates_total);
}
Редактирован: 9 января 2024, 17:02
avatar

  14  OSS5 Автор Сообщений: 148

  • 9 января 2024, 16:56
+
0
OSS5, от то что вы скопировали код индикатора в сообщение толку мало: после компиляции будет сотня ошибок.Андрей это исправлять не будет(не захочет возится)

Правильно будет либо через сылку(значок «цитировать»)
www.opentraders.ru/downloads/3602/


либо через значок «код»
//+------------------------------------------------------------------+
//|                                                       ZLines.mq4 |
//|                                              Copyright 2023, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

#property indicator_chart_window

input int Depth = 12;
input int Dev   = 5;
input int Back  = 3;

input bool Mail = 1;
input bool Push = 1;
input bool Alerts = 1;

datetime t=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double ZZPrice(int n=0)
  {
   double zz=0;
   int k=0;

   for(int i=0; i<1111; i++)
     {
      zz=iCustom(NULL,0,"ZigZag",Depth,Dev,Back,0,i);

      if(zz!=0)
        {
         k++;
         if(k>n)
            return(zz);
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int ZZBar(int n=0)
  {
   double zz=0;
   int k=0;

   for(int i=0; i<1111; i++)
     {
      zz=iCustom(NULL,0,"ZigZag",Depth,Dev,Back,0,i);

      if(zz!=0)
        {
         k++;
         if(k>n)
            return(i);
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   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,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutArrow(string name,int code,double p,datetime time,color clr)
  {
   ObjectDelete(0,name);
//--- создадим стрелку
   ObjectCreate(0,name,OBJ_ARROW,0,time,p);
//--- установим код стрелки
   ObjectSetInteger(0,name,OBJPROP_ARROWCODE,code);
//--- установим способ привязки
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- установим цвет стрелки
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим размер стрелки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
  }
//+------------------------------------------------------------------+
//| 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(ZZPrice(4)>ZZPrice(2) && ZZPrice(3)>ZZPrice(1))
     {
      PutTrendLine("14b",time[ZZBar(4)],ZZPrice(4),time[ZZBar(1)],ZZPrice(1),Blue);
      PutTrendLine("13b",time[ZZBar(4)],ZZPrice(4),time[ZZBar(2)],ZZPrice(2),Blue);
      PutTrendLine("24b",time[ZZBar(3)],ZZPrice(3),time[ZZBar(1)],ZZPrice(1),Blue);
     }

   if(ZZPrice(4)<ZZPrice(2) && ZZPrice(3)<ZZPrice(1))
     {
      PutTrendLine("14s",time[ZZBar(4)],ZZPrice(4),time[ZZBar(1)],ZZPrice(1),Gold);
      PutTrendLine("13s",time[ZZBar(4)],ZZPrice(4),time[ZZBar(2)],ZZPrice(2),Gold);
      PutTrendLine("24s",time[ZZBar(3)],ZZPrice(3),time[ZZBar(1)],ZZPrice(1),Gold);
     }

   double z13b=ObjectGetValueByShift("13b",1);
   double z13s=ObjectGetValueByShift("13s",1);

   if(t!=Time[0])
     {
      if(Close[1]>z13b && Open[1]<z13b)
        {
         if(Alerts)
            Alert(_Symbol+" Buy!");
         if(Push)
            SendNotification(_Symbol+" Buy!");
         if(Mail)
            SendMail("Buy!",_Symbol+" Buy!");
            
         PutArrow("Buy Arrow",233,Low[1],Time[1],Blue);
        }

      if(Close[1]<z13s && Open[1]>z13s)
        {
         if(Alerts)
            Alert(_Symbol+" Sell!");
         if(Push)
            SendNotification(_Symbol+" Sell!");
         if(Mail)
            SendMail("Buy!",_Symbol+" Sell!");
            
         PutArrow("Sell Arrow",234,High[1],Time[1],Red);
        }
        
      t=Time[0];
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


иначе вследующий раз очень долго будете ждать ответа от программиста.
avatar

  20  alex30774 Сообщений: 748

  • 9 января 2024, 17:37
+
0
Сделал через значок «код».
Копировал скопированный код который выложил, вставил в metaeditor, скомпилировал, всё окей без ошибок, у меня всё работает.
avatar

  14  OSS5 Автор Сообщений: 148

  • 9 января 2024, 20:01
+
0
Так?
//+------------------------------------------------------------------+
//|                                                       ZLines.mq4 |
//|                                              Copyright 2023, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"
#property strict

#property indicator_chart_window

input int Depth = 12;
input int Dev   = 5;
input int Back  = 3;

input bool Mail = 1;
input bool Push = 1;
input bool Alerts = 1;

datetime t=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double ZZPrice(int n=0)
  {
   double zz=0;
   int k=0;

   for(int i=0; i<1111; i++)
     {
      zz=iCustom(NULL,0,"ZigZag",Depth,Dev,Back,0,i);

      if(zz!=0)
        {
         k++;
         if(k>n)
            return(zz);
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int ZZBar(int n=0)
  {
   double zz=0;
   int k=0;

   for(int i=0; i<1111; i++)
     {
      zz=iCustom(NULL,0,"ZigZag",Depth,Dev,Back,0,i);

      if(zz!=0)
        {
         k++;
         if(k>n)
            return(i);
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   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,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutArrow(string name,int code,double p,datetime time,color clr)
  {
   ObjectDelete(0,name);
//--- создадим стрелку
   ObjectCreate(0,name,OBJ_ARROW,0,time,p);
//--- установим код стрелки
   ObjectSetInteger(0,name,OBJPROP_ARROWCODE,code);
//--- установим способ привязки
   ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- установим цвет стрелки
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим размер стрелки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
  }
//+------------------------------------------------------------------+
//| 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(ZZPrice(4)>ZZPrice(2) && ZZPrice(3)>ZZPrice(1))
     {
      PutTrendLine("14b",time[ZZBar(4)],ZZPrice(4),time[ZZBar(1)],ZZPrice(1),Blue);
      PutTrendLine("13b",time[ZZBar(4)],ZZPrice(4),time[ZZBar(2)],ZZPrice(2),Blue);
      PutTrendLine("24b",time[ZZBar(3)],ZZPrice(3),time[ZZBar(1)],ZZPrice(1),Blue);
     }

   if(ZZPrice(4)<ZZPrice(2) && ZZPrice(3)<ZZPrice(1))
     {
      PutTrendLine("14s",time[ZZBar(4)],ZZPrice(4),time[ZZBar(1)],ZZPrice(1),Gold);
      PutTrendLine("13s",time[ZZBar(4)],ZZPrice(4),time[ZZBar(2)],ZZPrice(2),Gold);
      PutTrendLine("24s",time[ZZBar(3)],ZZPrice(3),time[ZZBar(1)],ZZPrice(1),Gold);
     }

   double z13b=ObjectGetValueByShift("13b",1);
   double z13s=ObjectGetValueByShift("13s",1);

   if(t!=Time[0])
     {
      if(Close[1]>z13b && Open[1]<z13b)
        {
         if(Alerts)
            Alert(_Symbol+" Buy!");
         if(Push)
            SendNotification(_Symbol+" Buy!");
         if(Mail)
            SendMail("Buy!",_Symbol+" Buy!");
            
         PutArrow("Buy Arrow",233,Low[1],Time[1],Blue);
        }

      if(Close[1]<z13s && Open[1]>z13s)
        {
         if(Alerts)
            Alert(_Symbol+" Sell!");
         if(Push)
            SendNotification(_Symbol+" Sell!");
         if(Mail)
            SendMail("Buy!",_Symbol+" Sell!");
            
         PutArrow("Sell Arrow",234,High[1],Time[1],Red);
        }
        
      t=Time[0];
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Редактирован: 9 января 2024, 19:56
avatar

  14  OSS5 Автор Сообщений: 148

  • 9 января 2024, 19:55
+
0
avatar

  14  OSS5 Автор Сообщений: 148

  • 9 января 2024, 20:10
+
0
Андрей, получилось скачать индикатор?
avatar

  14  OSS5 Автор Сообщений: 148

  • 10 января 2024, 15:12
+
0
можно будет на писать советник. на 11-е
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 января 2024, 15:18
+
0
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 января 2024, 15:39
+
0
Спасибо большое.
avatar

  14  OSS5 Автор Сообщений: 148

  • 10 января 2024, 22:39
+
0
Андрей, вы выложили индикатор, а не советник.
avatar

  11  njdftgh Сообщений: 237 - Shoom

  • 11 января 2024, 11:45
+
0
я перенес расчет в советник. скачал, проверил, в базе то что нужно
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 11 января 2024, 11:49

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