Back to the index page  
  FAQ   Cerca   Lista utenti   Gruppi   Registrati   Profilo   Messaggi privati   Log in 
Indicatore Mt4 RSI+ADX+Volume

 
Nuovo argomento   Rispondi    Indice del forum » Metatrader - Expert Advisor - MQL Precedente :: Successivo  
Ads
 Inviato: Lun Ott 23, 2017 12:45 am  
Messaggio
  Ads




Indicatore Mt4 RSI+ADX+Volume
 MessaggioInviato: Ven Lug 24, 2015 8:46 pm Rispondi citando  
Messaggio
  rikis91
New Entry
New Entry

Registrato: 24/07/15 20:36
Messaggi: 1

ciao a tutti ho trovato e sistemato questo indicatore:
//+------------------------------------------------------------------+
//| RSI + ADX
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Black
#property indicator_color2 LimeGreen
#property indicator_color3 LimeGreen
#property indicator_color4 Red
#property indicator_color5 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2
#property indicator_width5 2
#property indicator_minimum 0
#property indicator_maximum 100

//
//
//
//
//

extern string TimeFrame = "Current time frame";
extern string separator4 = "Parametri RSI";
extern int Length = 14;
extern int Price = PRICE_CLOSE;
extern double LevelUp = 70;
extern double LevelDown = 30;
extern bool alertsOn = true;
extern bool alertsOnZoneEnter = true;
extern bool alertsOnZoneExit = false;
extern string separator3 = "Parametri ADX";
extern int AdxPeriod = 14;
extern int AdxPrice = PRICE_CLOSE;
extern int AdxLevel = 20;
extern string separator2 = "Parametri Volume - (Volume <= 500)";
extern int VolumeTrend = 500;
extern string separator1 = "Parametri Alert";
extern bool alertsOnCurrent = true;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsNotify = true;
extern bool alertsEmail = false;

//
//
//
//
//

double rsi[];
double rsiUa[];
double rsiUb[];
double rsiDa[];
double rsiDb[];
double trend[];
double adx;
//
//
//
//
//

string indicatorFileName;
bool returnBars;
bool calculateValue;
int timeFrame;

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//

int init()
{
IndicatorBuffers(6);
SetIndexBuffer(0,rsi);
SetIndexBuffer(1,rsiUa);
SetIndexBuffer(2,rsiUb);
SetIndexBuffer(3,rsiDa);
SetIndexBuffer(4,rsiDb);
SetIndexBuffer(5,trend);
Length = MathMax(Length ,1);

//
//
//
//
//

indicatorFileName = WindowExpertName();
calculateValue = TimeFrame=="calculateValue"; if (calculateValue) { return(0); }
returnBars = TimeFrame=="returnBars"; if (returnBars) { return(0); }
timeFrame = stringToTimeFrame(TimeFrame);

//
//
//
//
//

string PriceType;
switch(Price)
{
case PRICE_CLOSE: PriceType = "Close"; break; // 0
case PRICE_OPEN: PriceType = "Open"; break; // 1
case PRICE_HIGH: PriceType = "High"; break; // 2
case PRICE_LOW: PriceType = "Low"; break; // 3
case PRICE_MEDIAN: PriceType = "Median"; break; // 4
case PRICE_TYPICAL: PriceType = "Typical"; break; // 5
case PRICE_WEIGHTED: PriceType = "Weighted"; break; // 6
}

//
//
//
//
//

SetLevelValue(0,LevelUp);
SetLevelValue(1,LevelDown);
IndicatorShortName(timeFrameToString(timeFrame)+" RSI ("+Length+","+PriceType+")");
return(0);
}
int deinit()
{

return(0);
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//

int start()
{
int counted_bars=IndicatorCounted();
int i,limit;

if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { rsi[0] = MathMin(limit+1,Bars-1); return(0); }

//
//
//
//
//
//

if (calculateValue || timeFrame == Period())
{
if (!calculateValue && trend[limit]== 1) CleanPoint(limit,rsiUa,rsiUb);
if (!calculateValue && trend[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
for(i=limit; i >= 0; i--)
{
rsi[i] = iRSI(NULL,0,Length,Price,i);
adx = iADX(NULL,0,AdxPeriod,AdxPrice,0,i);
rsiUa[i] = EMPTY_VALUE;
rsiUb[i] = EMPTY_VALUE;
rsiDa[i] = EMPTY_VALUE;
rsiDb[i] = EMPTY_VALUE;
trend[i] = trend[i+1];
if (rsi[i]>LevelUp && adx <= AdxLevel && Volume[i] <= VolumeTrend)trend[i]= 1;
if (rsi[i]<LevelDown && adx <= AdxLevel && Volume[i] <= VolumeTrend)trend[i]=-1;
if (rsi[i]<LevelUp && rsi[i]>LevelDown) trend[i]= 0;
if (!calculateValue && trend[i] == 1) PlotPoint(i,rsiUa,rsiUb,rsi);
if (!calculateValue && trend[i] == -1) PlotPoint(i,rsiDa,rsiDb,rsi);
}
manageAlerts();
return(0);
}

//
//
//
//
//

limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
if (trend[limit]== 1) CleanPoint(limit,rsiUa,rsiUb);
if (trend[limit]==-1) CleanPoint(limit,rsiDa,rsiDb);
for (i=limit;i>=0;i--)
{
int y = iBarShift(NULL,timeFrame,Time[i]);
rsi[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Price,LevelUp,LevelDown,alertsOn,alertsOnZoneEnter,alertsOnZoneExit,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,0,y);
trend[i] = iCustom(NULL,timeFrame,indicatorFileName,"calculateValue",Length,Price,LevelUp,LevelDown,alertsOn,alertsOnZoneEnter,alertsOnZoneExit,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,5,y);
rsiUa[i] = EMPTY_VALUE;
rsiUb[i] = EMPTY_VALUE;
rsiDa[i] = EMPTY_VALUE;
rsiDb[i] = EMPTY_VALUE;
if (trend[i]== 1) PlotPoint(i,rsiUa,rsiUb,rsi);
if (trend[i]==-1) PlotPoint(i,rsiDa,rsiDb,rsi);
}
return(0);
}

//+-------------------------------------------------------------------
//|
//+-------------------------------------------------------------------
//
//
//
//
//

void manageAlerts()
{
if (!calculateValue && alertsOn)
{
if (alertsOnCurrent)
int whichBar = 0;
else whichBar = 1;
if (trend[whichBar] != trend[whichBar+1])
{
if (alertsOnZoneEnter && trend[whichBar] == 1) doAlert(whichBar,DoubleToStr(LevelUp,2) +" ");
if (alertsOnZoneEnter && trend[whichBar] == -1) doAlert(whichBar,DoubleToStr(LevelDown,2)+" ");
if (alertsOnZoneExit && trend[whichBar+1] == -1) doAlert(whichBar,DoubleToStr(LevelDown,2)+" ");
if (alertsOnZoneExit && trend[whichBar+1] == 1) doAlert(whichBar,DoubleToStr(LevelUp,2) +" ");
}
}
}

//
//
//
//
//

void doAlert(int forBar, string doWhat)
{
static string previousAlert="nothing";
static datetime previousTime;
string message;

if (previousAlert != doWhat || previousTime != Time[-1]) {
previousAlert = doWhat;
previousTime = Time[forBar];

//
//
//
//
//

message = StringConcatenate(Symbol()," -- ",DoubleToStr(Bid,Digits)," -- ",TimeToStr(TimeLocal(),TIME_SECONDS)," -- RSI ",doWhat);
if (alertsMessage) Alert(message);
if (alertsNotify) SendNotification(message);
if (alertsEmail) SendMail(StringConcatenate(Symbol(),"rsi"),message);
if (alertsSound) PlaySound("alert2.wav");
}
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//
//
//
//
//

void CleanPoint(int i,double& first[],double& second[])
{
if ((second[i] != EMPTY_VALUE) && (second[i+1] != EMPTY_VALUE))
second[i+1] = EMPTY_VALUE;
else
if ((first[i] != EMPTY_VALUE) && (first[i+1] != EMPTY_VALUE) && (first[i+2] == EMPTY_VALUE))
first[i+1] = EMPTY_VALUE;
}

//
//
//
//
//

void PlotPoint(int i,double& first[],double& second[],double& from[])
{
if (first[i+1] == EMPTY_VALUE)
{
if (first[i+2] == EMPTY_VALUE) {
first[i] = from[i];
first[i+1] = from[i+1];
second[i] = EMPTY_VALUE;
}
else {
second[i] = from[i];
second[i+1] = from[i+1];
first[i] = EMPTY_VALUE;
}
}
else
{
first[i] = from[i];
second[i] = EMPTY_VALUE;
}
}

//+-------------------------------------------------------------------
//|
//+-------------------------------------------------------------------
//
//
//
//
//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//
//
//
//
//

int stringToTimeFrame(string tfs)
{
tfs = stringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period()));
return(Period());
}
string timeFrameToString(int tf)
{
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tf==iTfTable[i]) return(sTfTable[i]);
return("");
}

//
//
//
//
//

string stringUpperCase(string str)
{
string s = str;

for (int length=StringLen(str)-1; length>=0; length--)
{
int tchar = StringGetChar(s, length);
if((tchar > 96 && tchar < 123) || (tchar > 223 && tchar < 256))
s = StringSetChar(s, length, tchar - 32);
else if(tchar > -33 && tchar < 0)
s = StringSetChar(s, length, tchar + 224);
}
return(s);
}


praticamente manda un allerta quando rsi è sopra a 70 o sotto 30 adx sotto 20 e volume sotto 500
ecco il mio problema è l'allert lo manda quando avviene questo incrocio di indicatori oppure alla chiusura della candela. come posso modificare l'indicatore che mi mandi l'allert SOLO 30 secondi prima che si chiuda la candela???? cioè mettiamo caso mancano 3 minuti alla chiusura della candela da TF 5m e l'rsi è sopra a 70 adx sotto 20 e volume sotto 500 l'allert me lo deve mandare solo 30 secondi prima vedendo sempre che i 3 indicatori siano della posizione giusta. scusate il [CENSORED] che vi sto recando e attendo aiuto
Profilo Invia messaggio privato
 MessaggioInviato: Sab Lug 25, 2015 10:34 am Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5575
Residenza: Padova

Ciao rikis91,

ti informo che ci siamo trasferiti su
Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



Ti invito a registrarti il nuovo forum ed aprire lì la tua discussione.

_________________
remitur ha scritto:
Mi rammento di quando studiavo azionario e futures, allora si usava una metafora, ma secondo mè è una gran verità, nel Klondike al tempo dei cercatori d'oro guadagnavano di più e sopratutto in maniera costante i venditori di pale, setacci e attrezzi vari (Ross e libri vari) che i cercatori; tranne qualcuno. chissà quale era la percentuale ?
Profilo Invia messaggio privato Invia e-mail HomePage
Nuovo argomento   Rispondi    Indice del forum » Metatrader - Expert Advisor - MQL

Pagina 1 di 1
Tutti i fusi orari sono GMT + 2 ore

Mostra prima i messaggi di:

  

Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi
c d
e

CI SIAMO TRASFERITI QUI: http://forum.forexup.biz





Powered by phpBB © 2001, 2002 phpBB Group phpbb.it
Macinscott 2 by Scott Stubblefield


Abuse - Segnalazione abuso - Utilizzando questo sito si accettano le norme di TOS & Privacy.
Powered by forumup.it forum gratis free, crea il tuo forum gratis free ora! Created by Hyarbor & Qooqoa
Confirmed

Page generation time: 0.085