Indicateurs multitemporels - page 405

 

fusion des délais TDI

Salut les gars, salut Mladen,

comme certains d'entre vous utilisent le TDI comme fournisseur de signaux, je suis tombé sur le système d'alerte TDI, comme indiqué ci-dessous (je donne juste un signal ou même une alerte par e-mail quand un croisement dans le TDI se produit). Ce n'est probablement rien de nouveau. Comme il est plus sûr de trader le TDI avec au moins deux horizons temporels (60min comme base, 5min pour le scalping), je demande si ce qui suit est possible : Ce que je veux, c'est fusionner les signaux d'au moins deux horizons temporels différents pour me donner un signal global plus fiable : L'image la plus grande est utilisée comme base, la hausse ou la baisse donne la direction pour la ou les plus petites. Si le même signal apparaît sur la plus petite échelle de temps, c'est une transaction ; la transaction est sortie sur le signal de sortie uniquement en fonction de la plus petite échelle de temps.

Voici donc l'indicateur dont je parle pour créer des signaux ; qu'en pensez-vous ou quelque chose de similaire a-t-il déjà été publié ?

 
Jonny473:
Salut les gars, salut Mladen,

Comme certains d'entre vous utilisent le TDI comme fournisseur de signaux, je suis tombé sur le système d'alerte TDI, comme indiqué ci-dessous (je donne simplement un signal ou même une alerte par e-mail lorsqu'un croisement du TDI se produit). Ce n'est probablement rien de nouveau. Comme il est plus sûr de trader le TDI avec au moins deux horizons temporels (60min comme base, 5min pour le scalping), je demande si ce qui suit est possible : Ce que je veux, c'est fusionner les signaux d'au moins deux horizons temporels différents pour me donner un signal global plus fiable : L'image la plus grande est utilisée comme base, la hausse ou la baisse donne la direction pour la ou les plus petites. Si le même signal apparaît sur la plus petite échelle de temps, c'est une transaction ; la transaction est sortie sur le signal de sortie uniquement en fonction de la plus petite échelle de temps.

Voici donc l'indicateur dont je parle pour créer des signaux ; qu'en pensez-vous ou quelque chose de similaire a-t-il déjà été publié ?

Je posterai l'indicateur dans une seconde...

 
mladen:
FxTrendsTrader Voilà

Cher Mladen

Serait-il possible pour vous d'ajouter le 'Coloring on Slope' dans cet indicateur ?

Merci d'avance

secretcode

 
Jonny473:
Je posterai l'indicateur dans une seconde...

Crise cardiaque.... ?...

 
fxnewbie:
Crise cardiaque.... ?...

Non, pas de crise cardiaque : Voici le code, il suffit de le copier et de créer l'indicateur, je ne trouve pas le fichier.

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

Nom : xTDI-Arrow.mq4

Copyright ?2010, Xaphod, Forex Whiz

Description : - Dessine des flèches pour les croisements TDI

- Fournit des alertes pour les croisements des trois lignes ci-dessus.

Journal des modifications :

2010-10-19. Xaphod, v1.00

- Version initiale

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

// Propriétés de l'indicateur

#property copyright "Copyright ? 2010, Xaphod"

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

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 LimeGreen

#property indicator_color2 Red

#property indicator_color3 Green

#property indicator_color4 FireBrick (brique de feu)

#property indicator_width1 1

#property indicator_width2 1

#property indicator_width3 1

#property indicator_width4 1

#property indicator_maximum 1

#property indicator_minimum 0

// Définitions de constantes

#define INDICATOR_NAME "xTDI-Arrow"

#define INDICATOR_VERSION "v1.00" (version 1.00)

#define BAR_HEIGHT 1.00

#define TDI_INDI "Traders_Dynamic_Index" (indice dynamique)

#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

// Paramètres de l'indicateur

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

extern string Indi.Version= INDICATOR_VERSION ;

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

extern int Show.TimeFrame=0 ; // Période à utiliser. Timeframe actuel=0.

extern bool Show.MarketBaseLine=true ; // Affiche le croisement au-dessus/en dessous de la ligne de base du marché dans une couleur différente.

extern int Show.ArrowType=0 ; // 0=Fin, 1=Épais, 2=Creux, 3=Rond

extern int Show.ArrowSize=1 ; // Taille de la flèche (1-5)

extern int Show.ArrowOffset=10 ; // Décalage par rapport à la fin de la bougie pour afficher la flèche

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

extern int TDI.RSIPeriod = 13 ; // Période. Valeurs recommandées : 8-25

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

extern int TDI.VolatilityBand = 34 ; // Valeurs recommandées : 20-40

extern int TDI.RSIPriceLine = 2 ; // Période

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

extern int TDI.TradeSignalLine = 7 ; // Période

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

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

extern bool Alert.RSIPriceLine=true ; // Alerte si le prix RSI traverse la ligne de signal. Le vert croise le rouge.

extern bool Alert.MarketBaseLine=true ; // Alerte si le prix RSI croise la ligne de signal et la ligne de base du marché. Le vert croise le rouge et le jaune.

extern bool Alert.NewBarOnly=true ; // True=Alerte quand une nouvelle barre est ouverte. False=Alerte à chaque fois que les lignes se croisent

extern int Alert.Timeout=60 ; // Désactive les alertes pendant N secondes après une alerte. Uniquement lorsque Alert.NewBarOnly=false

extern bool Alert.Popup=true ; // Fenêtre popup et son sur l'alerte

extern bool Alert.Email=false ; // Envoyer un email sur une alerte

// Variables du module global

double dBuffer0[] ;

double dBuffer1[] ;

double dBuffer2[] ;

double dBuffer3[] ;

bool bStartup ;

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

switch (Show.ArrowType) {

case 1 : // Mince

iArrowDn=ARROW_THIN_DN ;

iArrowUp=ARROW_THIN_UP ;

break ;

case 2 : // Creux

iArrowDn=ARROW_HOLLOW_DN ;

iArrowUp=ARROW_HOLLOW_UP ;

pause ;

cas 3 : // Rond

iArrowDn=ARROW_ROUND_DN ;

iArrowUp=ARROW_ROUND_UP ;

pause ;

par défaut : // Épais

iArrowDn=ARROW_THICK_DN ;

iArrowUp=ARROW_THICK_UP ;

pause ;

}

}

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

// Fonction : init()

// Description : Fonction d'initialisation de l'indicateur personnalisé.

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

int init() {

int iArrowUp ;

int iArrowDn ;

string sType ;

chaîne de caractères 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) ;

si (Show.TimeFrame==0)

sTF="" ;

sinon

sTF=TF2Str(Show.TimeFrame) ;

IndicatorShortName(INDICATOR_NAME+""+sTF) ;

bStartup=true ;

retour(0) ;

}

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

// Fonction : deinit()

// Description : Fonction personnalisée de désinitialisation de l'indicateur.

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

int deinit() {

Retourne (0) ;

}

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

// Fonction : start()

// Description : Fonction d'itération de l'indicateur personnalisée.

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

int start() {

int iNewBars ;

int iCountedBars ;

int i ;

double dVBHighLine ; // Bande de volatilité supérieure - Ligne bleue supérieure

double dVBLowLine ; // Bande de volatilité inférieure - Ligne bleue inférieure

double dMarketBaseLine0 ; // Ligne de base du marché - Ligne jaune

double dRSIPriceLine0 ; // Ligne de prix RSI - Ligne verte

double dTradeSignalLine0 ; // Ligne de signal de transaction - Ligne rouge

static double dMarketBaseLine1 ; // Ligne de base du marché - Ligne jaune

static double dRSIPriceLine1 ; // Ligne de prix RSI - Ligne verte

static double dTradeSignalLine1 ; // Ligne de signal de transaction - Ligne rouge

double dOffset ;

// Obtenir les ticks non traités

iCountedBars=IndicatorCounted() ;

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

si(iCountedBars>0) iCountedBars-- ;

iNewBars=Bars-iCountedBars ;

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

// Récupérer les données TDI précédentes

//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) ; // Ligne jaune

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i+1) ; // Ligne verte

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i+1) ; // Ligne rouge

//}

// Obtenez les données TDI actuelles

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i) ; // Ligne jaune

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i) ; // Ligne verte

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i) ; // Ligne rouge

// Efface le tampon d'affichage actuel

dBuffer0 = EMPTY_VALUE;

dBuffer1 = EMPTY_VALUE ;

dBuffer2 = EMPTY_VALUE ;

dBuffer3 = EMPTY_VALUE ;

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

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

dBuffer0 = Low-dOffset ;

autre si (dRSIPriceLine0>dTradeSignalLine0 && dRSIPriceLine1<dTradeSignalLine1)

dBuffer2 = Low-dOffset ;

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

dBuffer1 = High+dOffset ;

sinon si (dRSIPriceLine0dTradeSignalLine1)

dBuffer3 = High+dOffset ;

// Vérifier les alertes

si (i==0) AlertCheck() ;

}

// Réinitialisation du drapeau de démarrage

if (bStartup) bStartup=false ;

// Bye bye

retour(0) ;

}

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

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

// fonction : TF2Str()

// Description : Convertir l'intervalle de temps en une chaîne de caractères

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

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") ;

cas PERIOD_W1 : return("W1") ;

cas PERIOD_MN1 : return("MN1") ;

par défaut : return("M "+iPeriod) ;

}

}

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

// fonction : Contrôle d'alerte()

// Description : Vérifier les conditions d'alerte et exécuter les alertes

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

void AlertCheck() {

string sAlertMsg ;

static datetime tCurTime=0 ;

static int iAlertTimer[2] ;

static int iAlertStatus[2] ;

double dMarketBaseLine[2] ; // Ligne de base du marché - Ligne jaune

double dRSIPriceLine[2] ; // Ligne de prix RSI - Ligne verte

double dTradeSignalLine[2] ; // Ligne de signal de transaction - Ligne rouge

int i,j ;

bool bNewBar=false ;

// Abandonnez si l'indicateur vient de démarrer

if (bStartup) {

tCurTime=Time[0] ;

retour(0) ;

}

// Vérifie les alertes

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

// Alerte si nouvelle barre uniquement

if (Alert.NewBarOnly) {

// Réinitialisation de l'heure

if(tCurTime!=Time[0]) {

tCurTime=Time[0] ;

bNewBar=true ;

// Obtenez les données TDI sur la nouvelle barre, c'est-à-dire les barres 1 et 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) ; // Ligne jaune

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,j) ; // Ligne verte

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,j) ; // Ligne rouge

} //end for

}//endif

}

else {

// Obtenez les données TDI sur la barre actuelle, c'est-à-dire les barres 0 et 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) ; // Ligne jaune

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i) ; // Ligne verte

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i) ; // Ligne rouge

} //end for

} //fin if(Alert.NewBarOnly)

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

//Alert RSIPriceLine > TradeSignalLine

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

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

sAlertMsg="Alerte TDI - "+Symbole()+" "+TF2Str(Période())+" : RSIPriceLine Above TradeSignalLine." ;

if (Alert.Popup) Alert(sAlertMsg) ;

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

} //fin si

//Alert RSIPriceLine < TradeSignalLine

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

//PrintD("RSIPriceLine < TradeSignalLine") ;

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

sAlertMsg="Alerte TDI - "+Symbole()+" "+TF2Str(Période())+" : RSIPriceLine Below TradeSignalLine" ;

if (Alert.Popup) Alert(sAlertMsg) ;

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

} //fin si

} //finir si

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

//Alert if RSIPriceLine > TradeSignalLine && dMarketBaseLine

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

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

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

sAlertMsg="Alerte TDI - "+Symbole()+" "+TF2Str(Période())+" : RSIPriceLine au-dessus de TradeSignalLine et MarketBaseLine." ;

if (Alert.Popup) Alert(sAlertMsg) ;

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

} //fin si

} //end if

//Alert if RSIPriceLine < TradeSignalLine && dMarketBaseLine

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

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

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

sAlertMsg="Alerte TDI - "+Symbole()+" "+TF2Str(Période())+" : RSIPriceLine Below TradeSignalLine and MarketBaseLine." ;

if (Alert.Popup) Alert(sAlertMsg) ;

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

} //fin si

} //end if }

} //end if

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

return(0) ;

}

ALERTE : J'ai divisé le code en deux parties à cause de la politique des 10k ; il suffit donc de copier les deux parties en une seule et de créer l'indicateur !

 

Ok les gars voilà, désolé pour toutes les formules !

Dossiers :
tdi-2.mq4  4 kb
 

Mauvais code J'ai juste copié le bon code dans un autre, écrasé un ancien code, compilé et le fichier utilise toujours l'ancien code ! Je ne comprends pas ; de toute façon, le code est correct.

 
Jonny473:
Ce n'est pas le bon J'ai juste copié le bon code dans un autre, écrasé l'ancien, l'ai compilé et le fichier utilise toujours l'ancien code ?! Je ne comprends pas ; de toute façon, le code est correct.

Le code que j'ai posté avant....

 

J'ai une version de Vista sur mon vieil ordinateur portable, c'est pourquoi les fichiers mq4 continuent de disparaître ; maintenant ça devrait fonctionner !

Dossiers :
tdi-2.mq4  4 kb
Raison: