Если Вы хотите заказать советник или индикатор, то публикуйте в эту группу тех. задание. Если Ваш заказ не очень сложный, то велика вероятность, что Вам его смогут сделать даже бесплатно
Программистам MQL: подпишитесь на группу, чтобы получать уведомления о заказах.
Сигнал нужен по окончанию луча зиг-зага… потому.что дальше отслеживается разворотная свеча и открывается сделка по её (свечи)закрытию, а по окончанию луча зиг-зага выставляется стоп лосс… А если сигнал поступает при отрисовке нового луча зиг-зага получается большой стоп… и большое опоздание по входу… т.е теряется смысл… если можно сделайте как я описал… Окончанием или началом луча зиг-зага я считаю угол где лучи сходятся или расходятся… т.е.это начало или конец той волны… которую отображает эта линия (луч) зиг-зага… Мне нужен сигнал по окончанию луча.или волны..!(Не смог прикрепить скрин..)
Редактирован: 22 сентября 2015, 13:47
Что для вас окончание зигзага? Индикатор может перерисовываться при каждом обновлении вершинки или на каждой свече. Опишите подробнее, что именно нужно. желательно со скринами.
Пусть перерисовывается..., что бывает редко, как правило… если правильно определена разворотная свеча… значит вход правильный и стоп короткий… Ну если нет то СТОП....(издержки производства)
Сделал еще вариант. Показывает цену окончания луча, пару, ТФ и сигналит после того как свеча сформировалась. Вот инструкция, как вставлять картинки: project.opentraders.ru/862.html
//+------------------------------------------------------------------+
//| ZigZagAlert.mq4 |
//| Copyright 2006-2014, MetaQuotes Software Corp. |
//| http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2006-2014, MetaQuotes Software Corp."
#property link "http://www.mql4.com"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
input int InpDepth=12; // Depth
input int InpDeviation=5; // Deviation
input int InpBackstep=3; // Backstep
//---- indicator buffers
double ExtZigzagBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
//--- globals
int ExtLevel=3; // recounting's depth of extremums
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(InpBackstep>=InpDepth)
{
Print("Backstep cannot be greater or equal to Depth");
return(INIT_FAILED);
}
//--- 2 additional buffers
IndicatorBuffers(3);
//---- drawing settings
SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers
SetIndexBuffer(0,ExtZigzagBuffer);
SetIndexBuffer(1,ExtHighBuffer);
SetIndexBuffer(2,ExtLowBuffer);
SetIndexEmptyValue(0,0.0);
//---- indicator short name
IndicatorShortName("ZigZag("+string(InpDepth)+","+string(InpDeviation)+","+string(InpBackstep)+")");
//---- initialization done
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 i,limit,counterZ,whatlookfor=0;
int back,pos,lasthighpos=0,lastlowpos=0;
double extremum;
double curlow=0.0,curhigh=0.0,lasthigh=0.0,lastlow=0.0;
//--- check for history and inputs
if(rates_total<InpDepth || InpBackstep>=InpDepth)
return(0);
//--- first calculations
if(prev_calculated==0)
limit=InitializeAll();
else
{
//--- find first extremum in the depth ExtLevel or 100 last bars
i=counterZ=0;
while(counterZ<ExtLevel && i<100)
{
if(ExtZigzagBuffer[i]!=0.0)
counterZ++;
i++;
}
//--- no extremum found - recounting all from begin
if(counterZ==0)
limit=InitializeAll();
else
{
//--- set start position to found extremum position
limit=i-1;
//--- what kind of extremum?
if(ExtLowBuffer[i]!=0.0)
{
//--- low extremum
curlow=ExtLowBuffer[i];
//--- will look for the next high extremum
whatlookfor=1;
}
else
{
//--- high extremum
curhigh=ExtHighBuffer[i];
//--- will look for the next low extremum
whatlookfor=-1;
}
//--- clear the rest data
for(i=limit-1; i>=0; i--)
{
ExtZigzagBuffer[i]=0.0;
ExtLowBuffer[i]=0.0;
ExtHighBuffer[i]=0.0;
}
}
}
//--- main loop
for(i=limit; i>=0; i--)
{
//--- find lowest low in depth of bars
extremum=low[iLowest(NULL,0,MODE_LOW,InpDepth,i)];
//--- this lowest has been found previously
if(extremum==lastlow)
extremum=0.0;
else
{
//--- new last low
lastlow=extremum;
//--- discard extremum if current low is too high
if(low[i]-extremum>InpDeviation*Point)
extremum=0.0;
else
{
//--- clear previous extremums in backstep bars
for(back=1; back<=InpBackstep; back++)
{
pos=i+back;
if(ExtLowBuffer[pos]!=0 && ExtLowBuffer[pos]>extremum)
ExtLowBuffer[pos]=0.0;
}
}
}
//--- found extremum is current low
if(low[i]==extremum)
ExtLowBuffer[i]=extremum;
else
ExtLowBuffer[i]=0.0;
//--- find highest high in depth of bars
extremum=high[iHighest(NULL,0,MODE_HIGH,InpDepth,i)];
//--- this highest has been found previously
if(extremum==lasthigh)
extremum=0.0;
else
{
//--- new last high
lasthigh=extremum;
//--- discard extremum if current high is too low
if(extremum-high[i]>InpDeviation*Point)
extremum=0.0;
else
{
//--- clear previous extremums in backstep bars
for(back=1; back<=InpBackstep; back++)
{
pos=i+back;
if(ExtHighBuffer[pos]!=0 && ExtHighBuffer[pos]<extremum)
ExtHighBuffer[pos]=0.0;
}
}
}
//--- found extremum is current high
if(high[i]==extremum)
ExtHighBuffer[i]=extremum;
else
ExtHighBuffer[i]=0.0;
}
//--- final cutting
if(whatlookfor==0)
{
lastlow=0.0;
lasthigh=0.0;
}
else
{
lastlow=curlow;
lasthigh=curhigh;
}
for(i=limit; i>=0; i--)
{
switch(whatlookfor)
{
case 0: // look for peak or lawn
if(lastlow==0.0 && lasthigh==0.0)
{
if(ExtHighBuffer[i]!=0.0)
{
lasthigh=High[i];
lasthighpos=i;
whatlookfor=-1;
ExtZigzagBuffer[i]=lasthigh;
}
if(ExtLowBuffer[i]!=0.0)
{
lastlow=Low[i];
lastlowpos=i;
whatlookfor=1;
ExtZigzagBuffer[i]=lastlow;
}
}
break;
case 1: // look for peak
if(ExtLowBuffer[i]!=0.0 && ExtLowBuffer[i]<lastlow && ExtHighBuffer[i]==0.0)
{
ExtZigzagBuffer[lastlowpos]=0.0;
lastlowpos=i;
lastlow=ExtLowBuffer[i];
ExtZigzagBuffer[i]=lastlow;
}
if(ExtHighBuffer[i]!=0.0 && ExtLowBuffer[i]==0.0)
{
lasthigh=ExtHighBuffer[i];
lasthighpos=i;
ExtZigzagBuffer[i]=lasthigh;
whatlookfor=-1;
}
break;
case -1: // look for lawn
if(ExtHighBuffer[i]!=0.0 && ExtHighBuffer[i]>lasthigh && ExtLowBuffer[i]==0.0)
{
ExtZigzagBuffer[lasthighpos]=0.0;
lasthighpos=i;
lasthigh=ExtHighBuffer[i];
ExtZigzagBuffer[i]=lasthigh;
}
if(ExtLowBuffer[i]!=0.0 && ExtHighBuffer[i]==0.0)
{
lastlow=ExtLowBuffer[i];
lastlowpos=i;
ExtZigzagBuffer[i]=lastlow;
whatlookfor=1;
}
break;
}
}
//--- done
if(ExtZigzagBuffer[1]>0) Alert("Окончание луча: " + DoubleToString(ExtZigzagBuffer[1],Digits) + " " +Symbol() + " " + IntegerToString(Period()));
Comment("\n ZZ0: ",ExtZigzagBuffer[0],
"\n Окончание луча: ",ExtZigzagBuffer[1],
"\n Верхний излом: ",ExtHighBuffer[0],
"\n Нижний излом: ",ExtLowBuffer[0]);
return(rates_total);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int InitializeAll()
{
ArrayInitialize(ExtZigzagBuffer,0.0);
ArrayInitialize(ExtHighBuffer,0.0);
ArrayInitialize(ExtLowBuffer,0.0);
//--- first counting position
return(Bars-InpDepth);
}
//+------------------------------------------------------------------+
Андрей, большое спасибо! То что вы сделали (Сделал еще вариант. Показывает цену окончания луча, пару, ТФ и сигналит после того как свеча сформировалась.)это то что нужно! Единственное, что нужно поправить, это что бы сигнал выдавался один раз после сформировавшейся свечи, а он сигналит бесконечно… это мешает… даже если индикатор установлен на одной паре..! Поправте пожалуста!
Подскажите, могли бы Вы, изменить настройки так, чтобы индикатор выдавал сигнал, только при изменении направления тренда (при появлении ломаной) и всё! Данный индикатор, так же сигнализирует о продолжении тренда, а это мешает. Помогите если возможно, пожалуйста.
С уважением, Александр.
Подскажите, могли бы Вы, изменить настройки так, чтобы индикатор выдавал сигнал, только при изменении направления тренда (при появлении ломаной) и всё! Данный индикатор, так же сигнализирует о продолжении тренда, а это мешает. Помогите если возможно, пожалуйста.
С уважением, Александр.
я делаю так — создаю текстовый документ, вставляю туда скопированное, сохраняю и просто переименовываю формат .txt в .mq4 меня так устраивает))
Редактирован: 27 сентября 2016, 18:43
Дружище, огромное спасибо за труд (только сейчас случайно увидел). Но к сожалению, не всегда выдаёт звуковые сигналы. Можно будет это как то исправить. Заранее огромное спасибо!!!
Добрый день, Андрей. Спасибо большое за нужный индикатор.
После образования нового луча он выдаёт звук при завершении каждой следующей свечи.
Можно ли сделать так, чтоб он выдавал звук один раз при образовании нового луча только одной первой свечой? Редактирован: 14 сентября 2020, 11:23
Комментарии (21)
35 AM2 Сообщений: 16554 - Андрей
12-5-3 Важно, что бы сигнал поступал по окончанию луча индюка…
Редактирован: 22 сентября 2015, 08:41
2 DEDaa Автор Сообщений: 53
www.opentraders.ru/downloads/874/
35 AM2 Сообщений: 16554 - Андрей
2 DEDaa Автор Сообщений: 53
35 AM2 Сообщений: 16554 - Андрей
2 DEDaa Автор Сообщений: 53
35 AM2 Сообщений: 16554 - Андрей
2 DEDaa Автор Сообщений: 53
2 DEDaa Автор Сообщений: 53
35 AM2 Сообщений: 16554 - Андрей
2 DEDaa Автор Сообщений: 53
См. раздел «ДОБАВЛЕНИЕ СОВЕТНИКА В ВИДЕ КОДА»
46 Bishop Сообщений: 5817 - АЛЬФАХАМЕЦ-Машковод
2 DEDaa Автор Сообщений: 53
35 AM2 Сообщений: 16554 - Андрей
2 DEDaa Автор Сообщений: 53
С уважением, Александр.
2 bog_alvar Сообщений: 3
С уважением, Александр.
2 bog_alvar Сообщений: 3
10 cardon Сообщений: 376
35 AM2 Сообщений: 16554 - Андрей
2 bog_alvar Сообщений: 3
После образования нового луча он выдаёт звук при завершении каждой следующей свечи.
Можно ли сделать так, чтоб он выдавал звук один раз при образовании нового луча только одной первой свечой?
Редактирован: 14 сентября 2020, 11:23
1 Zigzag-U Сообщений: 3
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий