Multi-Timeframe-Indikatoren - Seite 405

 

Zeitrahmen TDI Zusammenführung

Hey Leute, hey Mladen,

da einige von Euch den TDI als Signalgeber nutzen, bin ich auf das TDI Alert System gestoßen, wie unten zu sehen (ich gebe einfach ein Signal oder sogar EMail Alert, wenn ein Cross im TDI passiert). Wahrscheinlich ist dies nichts Neues. Da es sicherer ist, den TDI mit mindestens zwei Timeframes zu handeln (60min als Basis, 5min für Scalping), frage ich, ob folgendes möglich ist: Ich möchte Signale von mindestens zwei verschiedenen Timeframes zusammenführen, um ein insgesamt zuverlässigeres Signal zu erhalten: Der größere Zeitrahmen wird als Basis verwendet, nach oben oder unten gibt die Richtung für den/die kleineren Zeitrahmen vor. Wenn das gleiche Signal auf dem kleineren Zeitrahmen erscheint, ist das ein Handel; der Handel wird nur auf dem Ausstiegssignal abhängig vom kleineren Zeitrahmen beendet.

Also hier ist der Indikator, den ich spreche über die Erstellung von Signalen; was denken Sie Jungs oder wurde etwas ähnliches bereits gepostet?

 
Jonny473:
Hallo Leute, hallo Mladen,

da einige von Euch den TDI als Signalgeber nutzen, bin ich auf das TDI Alert System gestoßen, wie unten zu sehen ist (ich gebe einfach ein Signal oder sogar eine EMail-Benachrichtigung, wenn sich ein Kreuz im TDI ereignet). Wahrscheinlich ist dies nichts Neues. Da es sicherer ist, den TDI mit mindestens zwei Timeframes zu handeln (60min als Basis, 5min für Scalping), frage ich, ob folgendes möglich ist: Ich möchte Signale von mindestens zwei verschiedenen Timeframes zusammenführen, um ein insgesamt zuverlässigeres Signal zu erhalten: Der größere Zeitrahmen wird als Basis verwendet, nach oben oder unten gibt die Richtung für den/die kleineren Zeitrahmen vor. Wenn das gleiche Signal auf dem kleineren Zeitrahmen erscheint, ist das ein Handel; der Handel wird nur auf dem Ausstiegssignal abhängig vom kleineren Zeitrahmen beendet.

Hier ist also der Indikator, den ich für die Erstellung von Signalen meine; was meint ihr, oder wurde etwas Ähnliches bereits gepostet?

Werde den Indikator in einer Sekunde posten...

 
mladen:
FxTrendsTrader Bitte sehr

Lieber Mladen

Wäre es möglich, dass Sie diesem Indikator die Option "Coloring on Slope" hinzufügen?

Vielen Dank im Voraus

Geheimcode

 
Jonny473:
Werde den Indikator in einer Sekunde posten...

Herzinfarkt....?...

 
fxnewbie:
Herzinfarkt....?...

Nein, kein Herzinfarkt: Hier ist der Code, einfach kopieren und den Indikator erstellen, kann die Datei nicht finden

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

Name: xTDI-Pfeil.mq4

Urheberrecht ?2010, Xaphod, Forex Whiz

Beschreibung: - Zeichnet Pfeile für die TDI-Kreuzungen

- Liefert Warnungen bei Überkreuzungen der drei oben genannten Linien.

Änderungsprotokoll:

2010-10-19. Xaphod, v1.00

- Erste Veröffentlichung

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

// Indikator-Eigenschaften

#property copyright "Copyright ? 2010, Xaphod"

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

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 LimonenGrün

#property indicator_color2 Rot

#eigenschaft indicator_color3 Grün

#Eigenschaft indicator_color4 FireBrick

#Eigenschaft indicator_width1 1

#Eigenschaft indicator_width2 1

#Eigenschaft indicator_width3 1

#eigenschaft indicator_width4 1

#Eigenschaft indicator_maximum 1

#Eigenschaft indicator_minimum 0

// Konstante Definitionen

#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 PFEIL_THIN_DN 226

#define ARROW_THICK_UP 233

#define PFEIL_THICK_DN 234

#define PFEIL_HOLLOW_UP 241

#define PFEIL_HOLLOW_DN 242

#define PFEIL_ROUND_UP 221

#define PFEIL_ROUND_DN 222

// Indikator-Parameter

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

extern string Indi.Version= INDICATOR_VERSION;

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

extern int Show.TimeFrame=0; // Zu verwendender Zeitrahmen. Aktueller Zeitrahmen=0.

extern bool Show.MarketBaseLine=true; // Kreuz über/unter der Marktbasislinie in einer anderen Farbe anzeigen

extern int Show.ArrowType=0; // 0=Dünn, 1=Dick, 2=Hohl, 3=Rund

extern int Show.ArrowSize=1; // Größe des Pfeils (1-5)

extern int Show.ArrowOffset=10; // Offset vom Ende der Kerze zur Anzeige des Pfeils

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

extern int TDI.RSIPeriod = 13; // Zeitraum. Empfohlene Werte: 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; // Empfohlene Werte: 20-40

extern int TDI.RSIPriceLine = 2; // Zeitraum

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

extern int TDI.TradeSignalLine = 7; // Zeitraum

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

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

extern bool Alert.RSIPriceLine=true; // Alarm, wenn der RSI-Preis die Signallinie kreuzt. Grün kreuzt rot.

extern bool Alert.MarketBaseLine=true; // Alarm, wenn der RSI-Kurs die Signallinie und die Marktbasislinie kreuzt. Grün kreuzt rot und gelb

extern bool Alert.NewBarOnly=true; // True=Alarm, wenn ein neuer Bar eröffnet wird. False=Alarm, wenn sich Linien kreuzen

extern int Alert.Timeout=60; // Deaktiviert Alarme für N Sekunden nach einem Alarm. Nur wenn Alert.NewBarOnly=false

extern bool Alert.Popup=true; // Popup-Fenster und Ton bei Alarm

extern bool Alert.Email=false; // E-Mail bei Alarm senden

// Globale Modulvariablen

double dBuffer0[];

double dBuffer1[];

double dBuffer2[];

double dBuffer3[];

bool bStartup;

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

switch (Show.ArrowType) {

Fall 1: // Dünn

iArrowDn=ARROW_THIN_DN;

iArrowUp=ARROW_THIN_UP;

break;

Fall 2: // Hohler Pfeil

iArrowDn=ARROW_HOLLOW_DN;

iArrowUp=ARROW_HOLLOW_UP;

break;

Fall 3: // Rund

iArrowDn=ARROW_ROUND_DN;

iArrowUp=ARROW_ROUND_UP;

break;

default: // Dick

iArrowDn=ARROW_THICK_DN;

iArrowUp=ARROW_THICK_UP;

break;

}

}

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

// Funktion: init()

// Beschreibung: Benutzerdefinierte Funktion zur Initialisierung des Indikators.

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

int init() {

int iArrowUp;

int iArrowDn;

string sType;

string sTF;

SetArrowType(iArrowUp, iArrowDn );

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

SetIndexBuffer(0,dBuffer0);

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

SetIndexPfeil(0, iPfeilAuf);

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

SetIndexPuffer(1,dBuffer1);

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

SetIndexPfeil(1, iPfeilDn);

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

SetIndexPuffer(2,dBuffer2);

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

SetIndexPfeil(2, iPfeilAuf);

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

SetIndexBuffer(3,dBuffer3);

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

SetIndexPfeil(3, iPfeilDn);

if (Show.TimeFrame==0)

sTF="";

sonst

sTF=TF2Str(Show.TimeFrame);

IndicatorShortName(INDICATOR_NAME+""+sTF);

bStartup=true;

return(0);

}

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

// Funktion: deinit()

// Beschreibung: Benutzerdefinierte Funktion zur Deinitialisierung des Indikators.

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

int deinit() {

return (0);

}

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

// Funktion: start()

// Beschreibung: Benutzerdefinierte Indikator-Iterationsfunktion.

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

int start() {

int iNewBars;

int iCountedBars;

int i;

double dVBHighLine; // Oberes Volatilitätsband - obere blaue Linie

double dVBLowLine; // Unteres Volatilitätsband - untere blaue Linie

double dMarketBaseLine0; // Markt-Basislinie - Gelbe Linie

double dRSIPriceLine0; // RSI-Preislinie - Grüne Linie

double dTradeSignalLine0; // Handelssignallinie - Rote Linie

static double dMarketBaseLine1; // Markt-Basislinie - Gelbe Linie

static double dRSIPriceLine1; // RSI-Kurslinie - Grüne Linie

static double dTradeSignalLine1; // Handelssignallinie - Rote Linie

double dOffset;

// Unverarbeitete Ticks ermitteln

iCountedBars=IndicatorCounted();

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

if(iCountedBars>0) iCountedBars--;

iNewBars=Bars-iCountedBars;

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

// Vorherige TDI-Daten abrufen

//if (Zeit!=tCurTime) {

//tCurTime=Zeit;

 

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i+1); // Gelbe Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i+1); // Grüne Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i+1); // Rote Linie

//}

// Aktuelle TDI-Daten holen

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i); // Gelbe Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Grüne Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Rote Linie

// Aktuellen Anzeigepuffer löschen

dBuffer0 = EMPTY_VALUE;

dBuffer1 = EMPTY_VALUE;

dBuffer2 = EMPTY_VALUE;

dBuffer3 = EMPTY_VALUE;

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

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

dBuffer0 = Low-dOffset;

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

dBuffer2 = Low-dOffset;

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

dBuffer1 = High+dOffset;

sonst if (dRSIPriceLine0dTradeSignalLine1)

dBuffer3 = High+dOffset;

// Prüfung auf Alerts

if (i==0) AlertCheck();

}

// Startup-Flag zurücksetzen

if (bStartup) bStartup=false;

// Bye bye

return(0);

}

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

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

// Funktion: TF2Str()

// Beschreibung: Zeitrahmen in eine Zeichenkette umwandeln

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

string TF2Str(int iPeriode) {

switch(iPeriode) {

case PERIOD_M1: return("M1");

case PERIOD_M5: return("M5");

case PERIOD_M15: return("M15");

Fall PERIOD_M30: return("M30");

case PERIOD_H1: return("H1");

Fall PERIOD_H4: return("H4");

case PERIOD_D1: return("D1");

Fall PERIOD_W1: return("W1");

case PERIOD_MN1: return("MN1");

Standard: return("M "+iPeriode);

}

}

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

// Funktion: AlertCheck()

// Beschreibung: Überprüft auf Alarmbedingungen und führt Alarme aus

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

void AlertCheck() {

string sAlertMsg;

static datetime tCurTime=0;

static int iAlertTimer[2];

statische int iAlertStatus[2];

double dMarketBaseLine[2]; // Markt-Basislinie - Gelbe Linie

double dRSIPriceLine[2]; // RSI-Preislinie - Grüne Linie

double dTradeSignalLine[2]; // Handelssignallinie - Rote Linie

int i,j;

bool bNewBar=false;

// Abbruch, wenn der Indikator gerade gestartet wurde

if (bStartup) {

tCurTime=Time[0];

return(0);

}

// Auf Alarme prüfen

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

// Warnung, wenn nur neuer Balken

if (Alert.NewBarOnly) {

// Zeit zurücksetzen

if(tCurTime!=Time[0]) {

tCurTime=Time[0];

bNewBar=true;

// TDI-Daten bei neuem Balken abrufen, d.h. Balken 1 und 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); // Gelbe Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,j); // Grüne Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,j); // Rote Linie

} //endfor

}//endif

}

else {

// Abrufen der TDI-Daten für den aktuellen Takt, d.h. Takt 0 und 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); // Gelbe Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Grüne Linie

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

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Rote Linie

} //endfor

} //end 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="TDI Alert - "+Symbol()+""+TF2Str(Period())+": RSIPriceLine Above TradeSignalLine.";

if (Alert.Popup) Alert(sAlertMsg);

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

} //end if

//Alarm RSIPriceLine < TradeSignalLine

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

//DruckeD("RSIPriceLine < TradeSignalLine");

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

sAlertMsg="TDI Alert - "+Symbol()+""+TF2Str(Period())+": RSIPriceLine Below TradeSignalLine.";

if (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())) {

//Alarm wenn 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="TDI Alert - "+Symbol()+""+TF2Str(Period())+": RSIPriceLine über TradeSignalLine und MarketBaseLine.";

if (Alert.Popup) Alert(sAlertMsg);

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

} //end if

} //end if

//Alarm, wenn 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="TDI Alert - "+Symbol()+""+TF2Str(Period())+": RSIPriceLine Unterhalb von TradeSignalLine und MarketBaseLine.";

if (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);

}

ALERT: Ich habe den Code wegen der 10k-Politik in zwei Teile aufgeteilt; kopieren Sie also einfach beide Teile in einen und erstellen Sie den Indikator!

 

Ok, Leute, hier sind sie, sorry für die ganzen Formeln!

Dateien:
tdi-2.mq4  4 kb
 

Falsch Habe gerade den richtigen Code in einen anderen kopiert, einen alten überschrieben, kompiliert und die Datei verwendet immer noch den alten Code?! Verstehe ich nicht; auf jeden Fall ist der Code korrekt

 
Jonny473:
Falsch Ich habe einfach den richtigen Code in einen anderen kopiert, einen alten überschrieben, kompiliert und die Datei verwendet immer noch den alten Code?! Verstehe ich nicht; jedenfalls ist der Code korrekt

Der Code, den ich vorher gepostet habe....

 

Ich habe hier eine Vista-Version auf meinem alten Laptop, deshalb verschwinden die mq4-Dateien immer wieder; jetzt sollte es funktionieren!

Dateien:
tdi-2.mq4  4 kb