Indicatori multi timeframe - pagina 405

 

fusione TDI timeframe

Ciao ragazzi, ciao Mladen,

dato che alcuni di voi usano il TDI come fornitore di segnali, mi sono imbattuto nel sistema di allerta TDI, come si vede qui di seguito (io do solo un segnale o anche un allarme EMail quando avviene un incrocio nel TDI). Probabilmente questo non è niente di nuovo. Siccome è più sicuro fare trading sul TDI con almeno due timeframes (60min come base, 5min per lo scalping), chiedo se è possibile quanto segue: Quello che voglio è unire i segnali di almeno due diversi timeframes per darmi un segnale complessivo più affidabile: Il timeframe più grande è usato come base, su o giù dà la direzione per il più piccolo. Se lo stesso segnale appare sul timeframe più piccolo, questo è un trade; il trade viene abbandonato solo sul segnale di uscita che dipende dal timeframe più piccolo.

Quindi questo è l'indicatore di cui sto parlando per la creazione di segnali; cosa ne pensate ragazzi o è stato già postato qualcosa di simile?

 
Jonny473:
Ciao ragazzi, ciao Mladen,

dato che alcuni di voi usano il TDI come fornitore di segnali, mi sono imbattuto nel sistema di allerta TDI, come si vede qui di seguito (mi dà solo un segnale o anche EMail Alert quando sta accadendo una croce nel TDI). Probabilmente questo non è niente di nuovo. Siccome è più sicuro fare trading sul TDI con almeno due timeframes (60min come base, 5min per lo scalping), chiedo se è possibile quanto segue: Quello che voglio è unire i segnali di almeno due diversi timeframes per darmi un segnale complessivo più affidabile: Il timeframe più grande è usato come base, su o giù dà la direzione per il più piccolo. Se lo stesso segnale appare sul timeframe più piccolo, questo è un trade; il trade viene abbandonato solo sul segnale di uscita che dipende dal timeframe più piccolo.

Allora, questo è l'indicatore di cui sto parlando per la creazione di segnali; cosa ne pensate ragazzi o è stato già postato qualcosa di simile?

Posterò l'indicatore in un secondo...

 
mladen:
FxTrendsTrader Ecco a voi

Caro Mladen

Sarebbe possibile per te aggiungere la "colorazione sulla pendenza" in questo indicatore

Grazie in anticipo

secretcode

 
Jonny473:
Posterò l'indicatore in un secondo...

Attacco di cuore....?...

 
fxnewbie:
Infarto....?...

No, nessun attacco di cuore: Heres il codice, basta copiarlo e creare l'indicatore, non riesco a trovare il file

/*------------------------------------------------------------------------------------

Nome: xTDI-Arrow.mq4

Copyright ?2010, Xaphod, Forex Whiz

Descrizione: - Disegna frecce per gli incroci TDI

- Fornisce avvisi per gli incroci delle tre linee di cui sopra.

Log delle modifiche:

2010-10-19. Xaphod, v1.00

- Rilascio iniziale

-------------------------------------------------------------------------------------*/

// Proprietà dell'indicatore

#property copyright "Copyright ? 2010, Xaphod"

#property link "http://forexwhiz.appspot.com"

#proprietà indicator_chart_window

#proprietà indicator_buffers 4

#proprietà indicator_color1 LimeGreen

#Proprietà indicatore_colore2 Rosso

#Proprietà indicatore_colore3 Verde

#proprietà indicator_color4 FireBrick

#proprietà indicator_width1 1

#proprietà indicator_width2 1

#proprietà indicator_width3 1

#proprietà indicator_width4 1

#proprietà indicator_maximum 1

#proprietà indicator_minimum 0

// Definizioni costanti

#define INDICATOR_NAME "xTDI-Arrow"

#define INDICATOR_VERSION "v1.00"

#define BAR_HEIGHT 1.00

#define TDI_INDI "Traders_Dynamic_Index"

#define ARROW_THIN_UP 225

#define ARROW_THIN_DN 226

#define ARROW_THICK_UP 233

#define ARROW_THICK_DN 234

#define ARROW_HOLLOW_UP 241

#define ARROW_HOLLOW_DN 242

#define ARROW_ROUND_UP 221

#define ARROW_ROUND_DN 222

// Parametri dell'indicatore

extern string Indi.Copyright= "?2010, forexwhiz.appspot.com

extern string Indi.Version= INDICATOR_VERSION;

extern string Show.Settings="????????????????????????????????????";

extern int Show.TimeFrame=0; // Timeframe da usare. Timeframe corrente=0.

extern bool Show.MarketBaseLine=true; // Mostra la croce sopra/sotto la linea di base del mercato in un colore diverso

extern int Show.ArrowType=0; // 0=Thin, 1=Thick, 2=Hollow, 3=Round

extern int Show.ArrowSize=1; // Dimensione della freccia (1-5)

extern int Show.ArrowOffset=10; // Offset dalla fine della candela per mostrare la freccia

extern string TDI.Settings="????????????????????????????????????";

extern int TDI.RSIPeriod = 13; // Periodo. Valori raccomandati: 8-25

extern int TDI.RSIPrice = 0; // 0=CLOSE, 1=OPEN, 2=HIGH, 3=LOW, 4=MEDIAN, 5=TYPICAL, 6=WEIGHTED

extern int TDI.VolatilityBand = 34; // Valori raccomandati: 20-40

extern int TDI.RSIPriceLine = 2; // Periodo

extern int TDI.RSIPriceType = 0; // 0=SMA, 1=EMA, 2=SSMA, 3=LWMA

extern int TDI.TradeSignalLine = 7; // Periodo

extern int TDI.TradeSignalType = 0; // 0=SMA, 1=EMA, 2=SSMA, 3=LWMA

extern string Alert.Settings="????????????????????????????????????";

extern bool Alert.RSIPriceLine=true; // Allerta se il prezzo RSI incrocia la Signal line. Il verde incrocia il rosso.

extern bool Alert.MarketBaseLine=true; // Allerta se il prezzo RSI incrocia la Signal line e la market base line. Il verde incrocia il rosso e il giallo

extern bool Alert.NewBarOnly=true; // True=Allarme quando viene aperta una nuova barra. False=Allarme ogni volta che le linee si incrociano

extern int Alert.Timeout=60; // Disattiva gli allarmi per N secondi dopo un allarme. Solo quando Alert.NewBarOnly=false

extern bool Alert.Popup=true; // Finestra popup e suono su allarme

extern bool Alert.Email=false; // Invia email su allarme

// Variabili globali del modulo

double dBuffer0[];

double dBuffer1[]

double dBuffer2[]

double dBuffer3[];

bool bStartup;

void SetArrowType(int& iArrowUp, int& iArrowDn) {

switch (Show.ArrowType) {

caso 1: // Sottile

iArrowDn=ARROW_THIN_DN;

iArrowUp=ARROW_THIN_UP;

break;

caso 2: // Cavo

iArrowDn=ARROW_HOLLOW_DN;

iArrowUp=ARROW_HOLLOW_UP;

break;

caso 3: // Rotondo

iArrowDn=ARROW_ROUND_DN;

iArrowUp=ARROW_ROUND_UP;

break;

default: // Spessa

iArrowDn=ARROW_THICK_DN;

iArrowUp=ARROW_THICK_UP;

break;

}

}

//-----------------------------------------------------------------------------

// funzione: init()

// Descrizione: Funzione di inizializzazione dell'indicatore personalizzato.

//-----------------------------------------------------------------------------

int init() {

int iArrowUp;

int iArrowDn;

stringa sType;

stringa sTF;

SetArrowType(iArrowUp, iArrowDn );

SetIndexStyle(0,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(0,dBuffer0);

SetIndexLabel(0, "TDI:Mkt-Up");

SetIndexArrow(0, iArrowUp);

SetIndexStyle(1,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(1,dBuffer1);

SetIndexLabel(1, "TDI:Mkt-Dn");

SetIndexArrow(1, iArrowDn);

SetIndexStyle(2,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(2,dBuffer2);

SetIndexLabel(2, "TDI:Sig-Up");

SetIndexArrow(2, iArrowUp);

SetIndexStyle(3,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(3,dBuffer3);

SetIndexLabel(3, "TDI:Sig-Dn");

SetIndexArrow(3, iArrowDn);

if (Show.TimeFrame==0)

sTF="";

altrimenti

sTF=TF2Str(Show.TimeFrame);

IndicatorShortName(INDICATOR_NAME+" "+sTF);

bStartup=true;

return(0);

}

//-----------------------------------------------------------------------------

// funzione: deinit()

// Descrizione: Funzione personalizzata di deinizializzazione dell'indicatore.

//-----------------------------------------------------------------------------

int deinit() {

return (0);

}

///-----------------------------------------------------------------------------

// funzione: start()

// Descrizione: Funzione di iterazione dell'indicatore personalizzata.

//-----------------------------------------------------------------------------

int start() {

int iNewBars;

int iCountedBars;

int i;

double dVBHighLine; // banda di volatilità superiore - linea blu superiore

double dVBLowLine; // Banda di volatilità inferiore - linea blu inferiore

double dMarketBaseLine0; // Linea di base del mercato - linea gialla

double dRSIPriceLine0; // RSI PriceLine - Linea verde

double dTradeSignalLine0; // Linea del segnale commerciale - Linea rossa

static double dMarketBaseLine1; // Linea base del mercato - linea gialla

static double dRSIPriceLine1; // RSI PriceLine - linea verde

static double dTradeSignalLine1; // Linea del segnale commerciale - linea rossa

doppio dOffset;

// Ottiene i tick non processati

iCountedBars=IndicatorCounted();

if(iCountedBars < 0) ritorna (-1);

if(iCountedBars>0) iCountedBars--;

iNewBars=Bars-iCountedBars;

for(i=iNewBars; i>=0; i--) {

// Ottieni i dati TDI precedenti

//if (Time!=tCurTime) {

//tCurTime=Time;

 

dMarketBaseLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i+1); // Linea gialla

dRSIPriceLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i+1); // Linea verde

dTradeSignalLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i+1); // Linea rossa

//}

// Ottenere i dati TDI correnti

dMarketBaseLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i); // Linea gialla

dRSIPriceLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Linea verde

dTradeSignalLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Linea rossa

// Cancella il buffer di visualizzazione corrente

dBuffer0 = EMPTY_VALUE;

dBuffer1 = EMPTY_VALUE;

dBuffer2 = EMPTY_VALUE;

dBuffer3 = EMPTY_VALUE;

dOffset=Point*(10*Show.ArrowOffset/MarketInfo(Symbol(),MODE_TICKVALUE));

se (dRSIPriceLine0>dMarketBaseLine0 && dRSIPriceLine1dTradeSignalLine0 && Show.MarketBaseLine)

dBuffer0 = Low-dOffset;

else if (dRSIPriceLine0>dTradeSignalLine0 && dRSIPriceLine1<dTradeSignalLine1)

dBuffer2 = Low-dOffset;

se (dRSIPriceLine0dMarketBaseLine1 && dRSIPriceLine0<dTradeSignalLine0 && Show.MarketBaseLine)

dBuffer1 = High+dOffset;

else if (dRSIPriceLine0dTradeSignalLine1)

dBuffer3 = High+dOffset;

// Controlla gli allarmi

if (i==0) AlertCheck();

}

// Azzera il flag di avvio

if (bStartup) bStartup=false;

// Ciao ciao

return(0);

}

//+------------------------------------------------------------------+

//-----------------------------------------------------------------------------

// funzione: TF2Str()

// Descrizione: Convertire time-frame in una stringa

//-----------------------------------------------------------------------------

stringa TF2Str(int iPeriod) {

switch(iPeriod) {

caso PERIODO_M1: return("M1");

caso PERIODO_M5: return("M5");

caso PERIODO_M15: return("M15");

caso PERIOD_M30: return("M30");;

caso PERIOD_H1: return("H1");

caso PERIOD_H4: return("H4");;

caso PERIOD_D1: return("D1");

caso PERIOD_W1: return("W1");;

caso PERIOD_MN1: return("MN1");

default: return("M "+iPeriod);

}

}

//-----------------------------------------------------------------------------

// funzione: AlertCheck()

// Descrizione: Controlla le condizioni di allarme ed esegue gli avvisi

//-----------------------------------------------------------------------------

void AlertCheck() {

stringa sAlertMsg;

static datetime tCurTime=0;

static int iAlertTimer[2];

static int iAlertStatus[2];

double dMarketBaseLine[2]; // Linea base del mercato - linea gialla

double dRSIPriceLine[2]; // RSI PriceLine - linea verde

double dTradeSignalLine[2]; // Linea del segnale di trading - linea rossa

int i,j;

bool bNewBar=false;

// Interrompi se l'indicatore si è appena avviato

if (bStartup) {

tCurTime=Time[0];

return(0);

}

// Controlla gli avvisi

if (Alert.RSIPriceLine || Alert.MarketBaseLine) {

// Allerta solo se newbar

if (Alert.NewBarOnly) {

// Azzera il tempo

if(tCurTime!=Time[0]) {

tCurTime=Time[0];

bNewBar=true;

// Ottieni i dati TDI sulla nuova barra, cioè le barre 1 e 2

for (i=0; i<2; i++) {

j=i+1;

dMarketBaseLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,j); // Linea gialla

dRSIPriceLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,j); // Linea verde

dTradeSignalLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,j); // Linea rossa

} //endfor

}//endif

}

else {

// Ottieni i dati TDI sulla barra corrente, cioè le barre 0 e 1

for (i=0; i<2; i++) {

dMarketBaseLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i); // Linea gialla

dRSIPriceLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Linea verde

dTradeSignalLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Linea rossa

} //endfor

} //end if(Alert.NewBarOnly)

if (bNewBar || (!Alert.NewBarOnly && iAlertTimer[0]<GetTickCount()) {

//Allarme RSIPriceLine > TradeSignalLine

se (dRSIPriceLine[0]>dTradeSignalLine[0] && dRSIPriceLine[1]<dTradeSignalLine[1] && Alert.RSIPriceLine) {

if (!Alert.NewBarOnly) iAlertTimer[0]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="Allarme TDI - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Sopra TradeSignalLine";

se (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

//Allarme RSIPriceLine < TradeSignalLine

if (dRSIPriceLine[0]dTradeSignalLine[1] && Alert.RSIPriceLine) {

//PrintD("RSIPriceLine < TradeSignalLine");

if (!Alert.NewBarOnly) iAlertTimer[0]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="Allarme TDI - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine sotto TradeSignalLine";

se (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

} //end if

if (bNewBar ||(!Alert.NewBarOnly && iAlertTimer[1]<GetTickCount()) {

//Allerta se RSIPriceLine > TradeSignalLine && dMarketBaseLine

se (dRSIPriceLine[0]>dMarketBaseLine[0] && dRSIPriceLine[1]<dMarketBaseLine[1] && Alert.MarketBaseLine) {

se (dRSIPriceLine[0]>dTradeSignalLine[0] && dRSIPriceLine[1]<dTradeSignalLine[1]) {

if (!Alert.NewBarOnly) iAlertTimer[1]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="Allarme TDI - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Sopra TradeSignalLine e MarketBaseLine";

se (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

} //end if

//Allerta se RSIPriceLine < TradeSignalLine && dMarketBaseLine

se (dRSIPriceLine[0]dMarketBaseLine[1] && Alert.MarketBaseLine) {

se (dRSIPriceLine[0]dTradeSignalLine[1] ) {

if (!Alert.NewBarOnly) iAlertTimer[1]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="Allarme TDI - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine sotto TradeSignalLine e MarketBaseLine";

se (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

} //end if

} //end if

}//end if(Alert.RSIPriceLine || Alert.MarketBaseLine)

return(0);

}

ATTENZIONE: ho diviso il codice in due parti a causa della politica dei 10k; quindi basta copiare entrambe le parti in una e creare l'indicatore!

 

Ok ragazzi ecco qui, scusate per tutte le formule!

File:
tdi-2.mq4  4 kb
 

Quello sbagliato Ho appena copiato il codice giusto in un altro, sovrascritto un vecchio codice, compilato e il file sta ancora usando il vecchio codice?! Non capisco; comunque il codice è corretto

 
Jonny473:
Quello sbagliato Ho appena copiato il codice giusto in un altro, sovrascrivendo quello vecchio, compilandolo e il file sta ancora usando il vecchio codice?! Non capisco; comunque il codice è corretto

Il codice che ho postato prima....

 

Ho una versione di Vista sul mio vecchio portatile, ecco perché i file mq4 continuano a scomparire; ora dovrebbe funzionare!

File:
tdi-2.mq4  4 kb
Motivazione: