Правильно будет либо через сылку(значок «цитировать»)
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);
}
//+------------------------------------------------------------------+
иначе вследующий раз очень долго будете ждать ответа от программиста.
alex30774