Если Вы хотите заказать советник или индикатор, то публикуйте в эту группу тех. задание. Если Ваш заказ не очень сложный, то велика вероятность, что Вам его смогут сделать даже бесплатно
Программистам MQL: подпишитесь на группу, чтобы получать уведомления о заказах.
есть такой индикатор ZigZagWithPipsValueindicator.ex4 (20 Kb) жаль только в EX4 файле. можно ли добавить к нему алерт пара, т\ф, сел\бай когда цифры меняют цвет ( с зелёного на красный звучит алерт на ТЕКУЩЕЙ СВЕЧКИ. спасибо
Перестань хернёй маятся.Скидывай сюда, если есть.А то везде свой скайп суёшь.Поделись с народом.Мало ли кому пригодится.Тут всё, для всех бесплатно.Если тебя это не устраивает-тогда вали отселева.Без тебя проживём.
Андрей здравствуйте, попутно к теме, можно ли сделать в этом индикаторе обычную буферную стрелку на заданные параметры пипсов и баров при их достижении появляется стрелка ?!
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int FontSize=8;
extern color TextColor=Brown;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];
int giSumCounter,giSumTotal;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(2);
//---- drawing settings
SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
SetIndexBuffer(0,ExtMapBuffer);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(0,0.0);
//---- indicator short name
IndicatorShortName(«ZigZag_Counter (»+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
return(0);
}
int deinit()
{
ObjectsDeleteAll(0, OBJ_TEXT);
return(0);
}
void DeleteLabels(double startBar, double endBar)
{
int i;
int obj_total=ObjectsTotal();
string obj_name;
datetime obj_time;
for (i=obj_total-1;i>=0;i--)
{
obj_name=ObjectName(i);
if (ObjectType(obj_name)!=OBJ_TEXT) continue;
obj_time=ObjectGet(obj_name, OBJPROP_TIME1);
if ( (obj_time>=startBar) && (obj_time<=endBar) && (StringSubstr(obj_name,0,5)==«Count») )
{
ObjectDelete(obj_name);
}
}
return;
}
просто файл в mg немного другой тот что скинули. а мой файл меняет цвет. что можно сделать в таком случае? может скомплимировать мой файл ex4? ребятки помогите кто знающий?
Я могу скомпилировать твой EXE. файл в mql4, вот держи цвет меняет, проверяй. Единственно при компиляции куда то потерялся расчёт баров, но ты не переживай Андрей без труда их найдёт.
int start()
{
int i, counted_bars = IndicatorCounted();
int limit,counterZ,whatlookfor;
int shift,back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
if (counted_bars==0 && downloadhistory) // history was downloaded
{
ArrayInitialize(ZigzagBuffer,0.0);
ArrayInitialize(HighMapBuffer,0.0);
ArrayInitialize(LowMapBuffer,0.0);
}
if (counted_bars==0)
{
limit=Bars-ExtDepth;
downloadhistory=true;
}
if (counted_bars>0)
{
while (counterZ<level && i<100)
{
res=ZigzagBuffer[i];
if (res!=0) counterZ++;
i++;
}
i--;
limit=i;
if (LowMapBuffer[i]!=0)
{
curlow=LowMapBuffer[i];
whatlookfor=1;
}
else
{
curhigh=HighMapBuffer[i];
whatlookfor=-1;
}
for (i=limit-1;i>=0;i--)
{
ZigzagBuffer[i]=0.0;
LowMapBuffer[i]=0.0;
HighMapBuffer[i]=0.0;
}
}
for(shift=limit; shift>=0; shift--)
{
val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=LowMapBuffer[shift+back];
if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0;
}
}
}
if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0;
//--- high
val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=HighMapBuffer[shift+back];
if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0;
}
}
}
if (High[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]=0.0;
}
вот спасибо друг. ждём тогда андрея
ещё бы если бы можно было менять цвет этих цифр самим, было бы вообще класс, а то тот зелёный уже в глазах совсем сливается. Андрей сделай пожалуйста эту функцию тоже если возможно.
Редактирован: 16 июля 2019, 17:02
komod, пишите скайп, почту, вконтакте, одноклассники, даже аську, ватцап… скину вам код mql а дальше сами отредактируете начальный файл в ваше теме, или новую тему в стол заказов. если что вот мой skupe:max.celica. Есть готовая заказная (платная) версия это ZZ который ставит на заданные парамаетры высот стрелку,… тоже вручу.
я так понимаю нужно делать повторный топик для этого заказа, потому как докинуть нужный файл уже не возможно. нужно просить администрацию, чтобы доделали тут кнопочку для загрузки в таком случае файла. это очень не удобно, когда так происходит.
или Андрей всё таки сделаешь невозможное возможным ))
Комментарии (35)
имеется открытый код
8 Maxix Сообщений: 59
10 komod Автор Сообщений: 91
11 Kuzimich Сообщений: 246 - Андрей
11 Kuzimich Сообщений: 246 - Андрей
35 AM2 Сообщений: 16265 - Андрей
10 komod Автор Сообщений: 91
он есть в свободном доступе. кто сможет закиньте сюда. Редактирован: 10 июля 2019, 21:16
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
10 komod Автор Сообщений: 91
8 Maxix Сообщений: 59
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
#property link «fxcodebase.com»
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int FontSize=8;
extern color TextColor=Brown;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];
int giSumCounter,giSumTotal;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(2);
//---- drawing settings
SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
SetIndexBuffer(0,ExtMapBuffer);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(0,0.0);
//---- indicator short name
IndicatorShortName(«ZigZag_Counter (»+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
//---- initialization done
return(0);
}
int deinit()
{
ObjectsDeleteAll(0, OBJ_TEXT);
return(0);
}
void DeleteLabels(double startBar, double endBar)
{
int i;
int obj_total=ObjectsTotal();
string obj_name;
datetime obj_time;
for (i=obj_total-1;i>=0;i--)
{
obj_name=ObjectName(i);
if (ObjectType(obj_name)!=OBJ_TEXT) continue;
obj_time=ObjectGet(obj_name, OBJPROP_TIME1);
if ( (obj_time>=startBar) && (obj_time<=endBar) && (StringSubstr(obj_name,0,5)==«Count») )
{
ObjectDelete(obj_name);
}
}
return;
}
string TextFormat(int bars, double pips)
{
giSumCounter = giSumCounter+1;
giSumTotal = giSumTotal+(bars+1);
//Print(«Average bars ~ BarsLast = »,(bars)+1," giSumCounter= ",giSumCounter," giSumTotal= ",giSumTotal, " Ave Bars = ",giSumTotal / giSumCounter);
Comment(
"\n Ave Bars = ",giSumTotal / giSumCounter
//"\n Lots = ",Lots,
//"\n dFracDim = ",dFracDim
);
return (""+(DoubleToStr(MathAbs(bars)+1,0))+" bars, "+DoubleToStr(MathFloor(MathAbs(pips)/Point+0.5),0)+" pips");
}
void DrawLabel(int bar1, int bar2, double price1, double price2)
{
int Nbar1=iBarShift(NULL, 0, bar1);
int Nbar2=iBarShift(NULL, 0, bar2);
string Str=TextFormat(Nbar1-Nbar2, price1-price2);
string obj_name=«Count „+bar2;
ObjectCreate(obj_name, OBJ_TEXT, 0, bar2, price2);
ObjectSetText(obj_name, Str, FontSize, “Arial», TextColor);
ObjectSet(obj_name, OBJPROP_PRICE1, price2);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
giSumCounter=0;giSumTotal=0;
int shift, back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
for(shift=Bars-ExtDepth; shift>=0; shift--)
{
val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
}
}
}
ExtMapBuffer[shift]=val;
//--- high
val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
}
}
}
ExtMapBuffer2[shift]=val;
}
// final cutting
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=Bars-ExtDepth; shift>=0; shift--)
{
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) continue;
//---
if(curhigh!=0)
{
if(lasthigh>0)
{
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
else ExtMapBuffer2[shift]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
//----
if(curlow!=0)
{
if(lastlow>0)
{
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
else ExtMapBuffer[shift]=0;
}
//---
if((curlow<lastlow)||(lastlow<0))
{
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
DeleteLabels(Time[Bars-1], Time[0]);
double LastPrice=EMPTY_VALUE;
int LastBar=EMPTY_VALUE;
for(shift=Bars-1; shift>=0; shift--)
{
if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
else
{
res=ExtMapBuffer2[shift];
if(res!=0.0)
{
ExtMapBuffer[shift]=res;
}
else
{
res=ExtMapBuffer[shift];
}
if (res!=0)
{
if (LastPrice!=EMPTY_VALUE)
{
DrawLabel(Time[LastBar], Time[shift], LastPrice, res);
}
LastPrice=res;
LastBar=shift;
}
}
}
return(0);
}
8 Maxix Сообщений: 59
11 Kuzimich Сообщений: 246 - Андрей
а когда цифры меняют цвет? даже в коде прописано что цвет текста всегда постоянный:
35 AM2 Сообщений: 16265 - Андрей
10 komod Автор Сообщений: 91
8 Maxix Сообщений: 59
#property link «mailto:steven00@fastmail.fm»
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=200;
extern int ExtDeviation=8;
extern int ExtBackstep=12;
//---- indicator buffers
double ZigzagBuffer[];
double HighMapBuffer[];
double LowMapBuffer[];
int level=3; // recounting's depth
bool downloadhistory=false;
double Pip;
bool Started=False;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
//---- drawing settings
SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
SetIndexBuffer(0,ZigzagBuffer);
SetIndexBuffer(1,HighMapBuffer);
SetIndexBuffer(2,LowMapBuffer);
SetIndexEmptyValue(0,0.0);
//---- indicator short name
IndicatorShortName(«ZigZag(»+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
if(Digits==3 || Digits==5) Pip = 10*Point;
else Pip = Point;
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
DelObj();
return(0);
}
void DelObj()
{
string ObjName;
for(int i=ObjectsTotal()-1; i>=0; i--)
{
ObjName = ObjectName(i);
if(StringFind(ObjName,«ZZLabel»,0)>=0)
ObjectDelete(ObjName);
}
return;
}
int start()
{
int i, counted_bars = IndicatorCounted();
int limit,counterZ,whatlookfor;
int shift,back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
if (counted_bars==0 && downloadhistory) // history was downloaded
{
ArrayInitialize(ZigzagBuffer,0.0);
ArrayInitialize(HighMapBuffer,0.0);
ArrayInitialize(LowMapBuffer,0.0);
}
if (counted_bars==0)
{
limit=Bars-ExtDepth;
downloadhistory=true;
}
if (counted_bars>0)
{
while (counterZ<level && i<100)
{
res=ZigzagBuffer[i];
if (res!=0) counterZ++;
i++;
}
i--;
limit=i;
if (LowMapBuffer[i]!=0)
{
curlow=LowMapBuffer[i];
whatlookfor=1;
}
else
{
curhigh=HighMapBuffer[i];
whatlookfor=-1;
}
for (i=limit-1;i>=0;i--)
{
ZigzagBuffer[i]=0.0;
LowMapBuffer[i]=0.0;
HighMapBuffer[i]=0.0;
}
}
for(shift=limit; shift>=0; shift--)
{
val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=LowMapBuffer[shift+back];
if((res!=0)&&(res>val)) LowMapBuffer[shift+back]=0.0;
}
}
}
if (Low[shift]==val) LowMapBuffer[shift]=val; else LowMapBuffer[shift]=0.0;
//--- high
val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)];
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=HighMapBuffer[shift+back];
if((res!=0)&&(res<val)) HighMapBuffer[shift+back]=0.0;
}
}
}
if (High[shift]==val) HighMapBuffer[shift]=val; else HighMapBuffer[shift]=0.0;
}
// final cutting
if (whatlookfor==0)
{
lastlow=0;
lasthigh=0;
}
else
{
lastlow=curlow;
lasthigh=curhigh;
}
for (shift=limit;shift>=0;shift--)
{
res=0.0;
bool OutOfForLoop=False;
switch(whatlookfor)
{
case 0: // look for peak or lawn
if (lastlow==0 && lasthigh==0)
{
if (HighMapBuffer[shift]!=0)
{
lasthigh=High[shift];
lasthighpos=shift;
whatlookfor=-1;
ZigzagBuffer[shift]=lasthigh;
res=1;
}
if (LowMapBuffer[shift]!=0)
{
lastlow=Low[shift];
lastlowpos=shift;
whatlookfor=1;
ZigzagBuffer[shift]=lastlow;
res=1;
}
}
break;
case 1: // look for peak
if (LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
{
ZigzagBuffer[lastlowpos]=0.0;
lastlowpos=shift;
lastlow=LowMapBuffer[shift];
ZigzagBuffer[shift]=lastlow;
res=1;
}
if (HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
{
lasthigh=HighMapBuffer[shift];
lasthighpos=shift;
ZigzagBuffer[shift]=lasthigh;
whatlookfor=-1;
res=1;
}
break;
case -1: // look for lawn
if (HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
{
ZigzagBuffer[lasthighpos]=0.0;
lasthighpos=shift;
lasthigh=HighMapBuffer[shift];
ZigzagBuffer[shift]=lasthigh;
}
if (LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
{
lastlow=LowMapBuffer[shift];
lastlowpos=shift;
ZigzagBuffer[shift]=lastlow;
whatlookfor=1;
}
break;
default: OutOfForLoop=True;
}
if(OutOfForLoop) break;
}
//////////////////
if(counted_bars<1)
{
DelObj();
limit = Bars-1;
}
else limit = 0;
for(i = limit; i>=0; i--)
{
int k = i;
double zz;
double d1=0,d2=0,d3=0;
datetime t1=0,t2=0,t3=0;
while(k<Bars-2)
{
zz = ZigzagBuffer[k];
if(zz!=0)
{
d1 = d2; d2 = d3; d3 = zz;
t1 = t2; t2 = t3; t3 = Time[k];
}
if(d1>0) break;
k++;
}
if(d1==0) continue;
double LabelPos;
int ib = iBarShift(NULL,0,t1);
if(d1>d2) LabelPos = NormalizeDouble(High[ib]+0.5*iATR(NULL,0,10,ib),Digits);
else LabelPos = Low[ib];
string ObjName = «ZZLabel_Leg1»;
if(ObjectFind(ObjName)<0)
ObjectCreate(ObjName,OBJ_TEXT,0,t1,LabelPos);
else
ObjectMove(ObjName,0,t1,LabelPos);
ObjectSetText(ObjName,DoubleToStr(MathAbs(d2-d1)/Pip,1),32,«Arial»,Blue);
//////////////////////
if(i==0)
{
LabelPos = Close[0];
ObjName = «ZZLabel_Bid»;
int rOffset = 5*Period()*60;
if(ObjectFind(ObjName)<0)
ObjectCreate(ObjName,OBJ_TEXT,0,Time[0]+rOffset,LabelPos);
else
ObjectMove(ObjName,0,Time[0]+rOffset,LabelPos);
ObjectSetText(ObjName,DoubleToStr(MathAbs(Close[0]-d1)/Pip,1),5,«Arial»,Yellow);
}
//////////////////////
ib = iBarShift(NULL,0,t2);
if(d2>d3) LabelPos = NormalizeDouble(High[ib]+0.5*iATR(NULL,0,10,ib),Digits);
else LabelPos = Low[ib];
ObjName = «ZZLabel»+t1;
if(ObjectFind(ObjName)<0)
{
ObjectCreate(ObjName,OBJ_TEXT,0,t2,LabelPos);
ObjectSetText(ObjName,DoubleToStr(MathAbs(d3-d2)/Pip,1),20,«Arial»,White);
}
}
//////////////////
return(0);
}
//+------------------------------------------------------------------+
8 Maxix Сообщений: 59
ещё бы если бы можно было менять цвет этих цифр самим, было бы вообще класс, а то тот зелёный уже в глазах совсем сливается. Андрей сделай пожалуйста эту функцию тоже если возможно. Редактирован: 16 июля 2019, 17:02
10 komod Автор Сообщений: 91
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
8 Maxix Сообщений: 59
10 komod Автор Сообщений: 91
8 Maxix Сообщений: 59
или Андрей всё таки сделаешь невозможное возможным ))
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
10 komod Автор Сообщений: 91
35 AM2 Сообщений: 16265 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий