
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
mladen there is hope that you can help me with the indicator?
No need for additional posts
Here is a version with alerts (6 possible types of alerts added) : MASO 2_1 + alerts.mq4
No need for additional posts
very good, great job, thank you
mladen
and can be one more request to make arrows, only closed the bar? and when there is a neutral bar, treat it as a change of trend
It looks like a lot of alerts with the MASO indicator.
Isn't that too much? How to use it for normal trading?
for binary options, with a certain strategy, with martingail
Hi Mladen,
do you have an indicator to show prev day candle colour?.
I work with 5 min charts and visually backtesting it gets confusing swapping to check the candle colour on previous day. It would be great if I had a bar running along the bottom in a new window either red or green to show prev day candle colour - I want to explore trading same direction.
A bar like this attached. Is this possible ?
So if close > open then green, else red I guess.?
thank you as always for your help :-)
PGpolite bump :-)
polite bump :-)
if this will help you ? not in sw though.
#property copyright ""
#property link ""
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Crimson
#property indicator_color2 DodgerBlue
#property indicator_color3 clrBlue
int price = PRICE_OPEN;
extern int zBar = 1000;
extern int LengthB=12;
extern int LengthK=12;
extern int sCCI=2;
extern int sRSI=2;
int SoundAlertMode = 0;
int Soundonly = 0;
int Barcount;
double RSI;
double CCI;
datetime TimeBar;
double previ;
double ExtMapBuffer2[];
double alertBar1;
int sim=0;
double alertBar;
extern bool DoAlert=true;
extern bool alertMail=false;
datetime lastAlertTime;
//---- buffers
double b1[],b2[];double Gd_188;
double f0_3() {
double Ld_ret_0;
if (Digits < 4) Ld_ret_0 = 0.01;
else Ld_ret_0 = 0.0001;
return (Ld_ret_0);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(2);
IndicatorShortName("Investor");
SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,0);
SetIndexArrow(0,234);
SetIndexBuffer(0,b1);
SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,0);
SetIndexArrow(1,233);
SetIndexBuffer(1,b2);
SetIndexEmptyValue(2,0.0);
SetIndexDrawBegin(2, zBar);
SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,2);
SetIndexArrow(2,158);
SetIndexBuffer(2,ExtMapBuffer2);
Gd_188 = f0_3();
Barcount = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, counted_bars=IndicatorCounted();
int limit=Bars-counted_bars;
if(counted_bars>0) limit++;
string sAlertMsg;
/*// TImes
int Li_unused_8;
string Ls_28;
int Li_unused_36;
double Ld_0 = (Ask - Bid) / Gd_188;
if (Ld_0 > 1.0 && Ld_0 <= 10.0) Li_unused_8 = 4;
int Li_12 = Time[0] + 60 * Period() - TimeCurrent();
double Ld_16 = Li_12 / 60.0;
int Li_24 = Li_12 % 60;
Li_12 = (Li_12 - Li_12 % 60) / 60;
if (Li_24 <= 9) Ls_28 = "0";
if (Li_12 >= 1 && Li_12 <= 9) Li_unused_36 = -10;
else {
if (Li_12 >= 10 && Li_12 <= 99) Li_unused_36 = -13;
else {
if (Li_12 >= 100 && Li_12 <= 999) Li_unused_36 = -16;
else {
if (Li_12 >= 1000 && Li_12 <= 9999) Li_unused_36 = -24;
else
if (Li_12 >= 10000 && Li_12 <= 99999) Li_unused_36 = -29;
}
}
}
Comment("", "" + Li_12 + ":" + Ls_28 + "" + Li_24 + "",
"\n", "=======",
"\n", "" + Symbol() + "", " " + Period() + "",
"\n", "Spread : " + DoubleToStr(Ld_0, 1) + "",
"\n",
"\n", "",
"\n", "");
*/
// Arrows
for(i=0; i<limit; i++)
{
RSI=iRSI(NULL,0,sRSI,price,i);
CCI=iCCI(NULL,0,sCCI,price,i+1);
//double zz1 = iCustom(NULL,0,"Zigzag_v.2",zBar,LengthB,LengthK,1,i);
//double zz2 = iCustom(NULL,0,"Zigzag_v.2",zBar,LengthB,LengthK,0,i);
//if (zz1 != 0) {
if ( RSI > 80.0 && CCI < 50.0 &&
Open > Close && //bear
Open < Close && //bull
High - Close > High - Close )
{
b1 = High+Point*5;
}
//if (zz2 != 0) {
if ( RSI 50.0 &&
Open < Close && //bull
Open > Close && //bear
High - Close < High - Close )
{
b2 = Low-Point*5;
}
if (DoAlert && b2[1]!=0 && lastAlertTime!=Time[0])
{
sAlertMsg=" Alert - "+Symbol()+" "+TF2Str(Period())+"";
if (DoAlert) Alert(sAlertMsg);
lastAlertTime = Time[0];
if (alertMail) SendMail(sAlertMsg, "Alert!\n" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS )+"\n"+sAlertMsg);
}
else
if (b1[1]!=0 && lastAlertTime!=Time[0])
{
sAlertMsg=" Alert - "+Symbol()+" "+TF2Str(Period())+"";
if (DoAlert) Alert(sAlertMsg);
lastAlertTime = Time[0];
if (alertMail) SendMail(sAlertMsg, "Alert!\n" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS )+"\n"+sAlertMsg);
}
//}
//}
}
sinyal();
//-------------------------------------------------------------------+
return(0);
}
//+------------------------------------------------------------------+
string TF2Str(int iPeriod) {
switch(iPeriod) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("D1");
case PERIOD_W1: return("W1");
case PERIOD_MN1: return("MN1");
default: return("M"+iPeriod);
}
}
void sinyal(){
int shifti,Swingi,Swing_ni,uzli,ii,zui,zdi,mvi;
double LLi,HHi,BHi,BLi;
double Uzeli[10000][3];
// loop from first bar to current bar (with shift=0)
Swing_ni=0;Swingi=0;uzli=0;
BHi =High[zBar];BLi=Low[zBar];zui=zBar;zdi=zBar;
for (shifti=zBar;shifti>=0;shifti--) {
LLi=10000000;HHi=-100000000;
for (ii=shifti+LengthB;ii>=shifti+1;ii--) {
if (Low< LLi) {LLi=Low;}
if (High>HHi) {HHi=High;}
}
if (Low[shifti]HHi){
Swingi=2;
if (Swing_ni==1) {zui=shifti+1;}
if (Swing_ni==-1) {zdi=shifti+1;}
} else {
if (Low[shifti]<LLi) {Swingi=-1;}
if (High[shifti]>HHi) {Swingi=1;}
}
if (Swingi!=Swing_ni && Swing_ni!=0) {
if (Swingi==2) {
Swingi=-Swing_ni;BHi = High[shifti];BLi = Low[shifti];
}
uzli=uzli+1;
if (Swingi==1) {
Uzeli[1]=zdi;
Uzeli[2]=BLi;
}
if (Swingi==-1) {
Uzeli[1]=zui;
Uzeli[2]=BHi;
}
BHi = High[shifti];
BLi = Low[shifti];
}
if (Swingi==1) {
if (High[shifti]>=BHi) {BHi=High[shifti];zui=shifti;}}
if (Swingi==-1) {
if (Low[shifti]<=BLi) {BLi=Low[shifti]; zdi=shifti;}}
Swing_ni=Swingi;
}
for (ii=1;ii<=uzli;ii++) {
mvi=StrToInteger(DoubleToStr(Uzeli[1],0));
ExtMapBuffer2[mvi]=Uzeli[2];
previ=Uzeli[2];
}
}
please help ....
this indicator the signal not appear at the right time
i must refresh the chart everytime
and please fix the alert too
thanks
#property copyright ""
#property link ""
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Crimson
#property indicator_color2 DodgerBlue
#property indicator_color3 clrBlue
int price = PRICE_OPEN;
extern int zBar = 1000;
extern int LengthB=12;
extern int LengthK=12;
extern int sCCI=2;
extern int sRSI=2;
int SoundAlertMode = 0;
int Soundonly = 0;
int Barcount;
double RSI;
double CCI;
datetime TimeBar;
double previ;
double ExtMapBuffer2[];
double alertBar1;
int sim=0;
double alertBar;
extern bool DoAlert=true;
extern bool alertMail=false;
datetime lastAlertTime;
//---- buffers
double b1[],b2[];double Gd_188;
double f0_3() {
double Ld_ret_0;
if (Digits < 4) Ld_ret_0 = 0.01;
else Ld_ret_0 = 0.0001;
return (Ld_ret_0);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(2);
IndicatorShortName("Investor");
SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,0);
SetIndexArrow(0,234);
SetIndexBuffer(0,b1);
SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,0);
SetIndexArrow(1,233);
SetIndexBuffer(1,b2);
SetIndexEmptyValue(2,0.0);
SetIndexDrawBegin(2, zBar);
SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,2);
SetIndexArrow(2,158);
SetIndexBuffer(2,ExtMapBuffer2);
Gd_188 = f0_3();
Barcount = 0;
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, counted_bars=IndicatorCounted();
int limit=Bars-counted_bars;
if(counted_bars>0) limit++;
string sAlertMsg;
/*// TImes
int Li_unused_8;
string Ls_28;
int Li_unused_36;
double Ld_0 = (Ask - Bid) / Gd_188;
if (Ld_0 > 1.0 && Ld_0 <= 10.0) Li_unused_8 = 4;
int Li_12 = Time[0] + 60 * Period() - TimeCurrent();
double Ld_16 = Li_12 / 60.0;
int Li_24 = Li_12 % 60;
Li_12 = (Li_12 - Li_12 % 60) / 60;
if (Li_24 <= 9) Ls_28 = "0";
if (Li_12 >= 1 && Li_12 <= 9) Li_unused_36 = -10;
else {
if (Li_12 >= 10 && Li_12 <= 99) Li_unused_36 = -13;
else {
if (Li_12 >= 100 && Li_12 <= 999) Li_unused_36 = -16;
else {
if (Li_12 >= 1000 && Li_12 <= 9999) Li_unused_36 = -24;
else
if (Li_12 >= 10000 && Li_12 <= 99999) Li_unused_36 = -29;
}
}
}
Comment("", "" + Li_12 + ":" + Ls_28 + "" + Li_24 + "",
"\n", "=======",
"\n", "" + Symbol() + "", " " + Period() + "",
"\n", "Spread : " + DoubleToStr(Ld_0, 1) + "",
"\n",
"\n", "",
"\n", "");
*/
// Arrows
for(i=0; i<limit; i++)
{
RSI=iRSI(NULL,0,sRSI,price,i);
CCI=iCCI(NULL,0,sCCI,price,i+1);
//double zz1 = iCustom(NULL,0,"Zigzag_v.2",zBar,LengthB,LengthK,1,i);
//double zz2 = iCustom(NULL,0,"Zigzag_v.2",zBar,LengthB,LengthK,0,i);
//if (zz1 != 0) {
if ( RSI > 80.0 && CCI < 50.0 &&
Open > Close && //bear
Open < Close && //bull
High - Close > High - Close )
{
b1 = High+Point*5;
}
//if (zz2 != 0) {
if ( RSI 50.0 &&
Open < Close && //bull
Open > Close && //bear
High - Close < High - Close )
{
b2 = Low-Point*5;
}
if (DoAlert && b2[1]!=0 && lastAlertTime!=Time[0])
{
sAlertMsg=" Alert - "+Symbol()+" "+TF2Str(Period())+"";
if (DoAlert) Alert(sAlertMsg);
lastAlertTime = Time[0];
if (alertMail) SendMail(sAlertMsg, "Alert!\n" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS )+"\n"+sAlertMsg);
}
else
if (b1[1]!=0 && lastAlertTime!=Time[0])
{
sAlertMsg=" Alert - "+Symbol()+" "+TF2Str(Period())+"";
if (DoAlert) Alert(sAlertMsg);
lastAlertTime = Time[0];
if (alertMail) SendMail(sAlertMsg, "Alert!\n" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS )+"\n"+sAlertMsg);
}
//}
//}
}
sinyal();
//-------------------------------------------------------------------+
return(0);
}
//+------------------------------------------------------------------+
string TF2Str(int iPeriod) {
switch(iPeriod) {
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("D1");
case PERIOD_W1: return("W1");
case PERIOD_MN1: return("MN1");
default: return("M"+iPeriod);
}
}
void sinyal(){
int shifti,Swingi,Swing_ni,uzli,ii,zui,zdi,mvi;
double LLi,HHi,BHi,BLi;
double Uzeli[10000][3];
// loop from first bar to current bar (with shift=0)
Swing_ni=0;Swingi=0;uzli=0;
BHi =High[zBar];BLi=Low[zBar];zui=zBar;zdi=zBar;
for (shifti=zBar;shifti>=0;shifti--) {
LLi=10000000;HHi=-100000000;
for (ii=shifti+LengthB;ii>=shifti+1;ii--) {
if (Low< LLi) {LLi=Low;}
if (High>HHi) {HHi=High;}
}
if (Low[shifti]HHi){
Swingi=2;
if (Swing_ni==1) {zui=shifti+1;}
if (Swing_ni==-1) {zdi=shifti+1;}
} else {
if (Low[shifti]<LLi) {Swingi=-1;}
if (High[shifti]>HHi) {Swingi=1;}
}
if (Swingi!=Swing_ni && Swing_ni!=0) {
if (Swingi==2) {
Swingi=-Swing_ni;BHi = High[shifti];BLi = Low[shifti];
}
uzli=uzli+1;
if (Swingi==1) {
Uzeli[1]=zdi;
Uzeli[2]=BLi;
}
if (Swingi==-1) {
Uzeli[1]=zui;
Uzeli[2]=BHi;
}
BHi = High[shifti];
BLi = Low[shifti];
}
if (Swingi==1) {
if (High[shifti]>=BHi) {BHi=High[shifti];zui=shifti;}}
if (Swingi==-1) {
if (Low[shifti]<=BLi) {BLi=Low[shifti]; zdi=shifti;}}
Swing_ni=Swingi;
}
for (ii=1;ii<=uzli;ii++) {
mvi=StrToInteger(DoubleToStr(Uzeli[1],0));
ExtMapBuffer2[mvi]=Uzeli[2];
previ=Uzeli[2];
}
}
please help ....
this indicator the signal not appear at the right time
i must refresh the chart everytime
and please fix the alert too
thankscebrez
That is indicator patched together from decompiled and some other parts and as a result you got a mess that is a repainting indicator 101
Best to forget about it
cebrez
That is indicator patched together from decompiled and some other parts and as a result you got a mess that is a repainting indicator 101
Best to forget about itbut i have good result with this indicator sir and yes its repaints but no problem for me ... please sir
iam attach some other parts called ZigZag_v.2 at here >>> https://www.mql5.com/en/forum/174385/page417
thanks