TrendLinesFromFiboAndTrend2 – Dynamische Projektion von Trends auf Fibonacci-Niveaus
Allgemeine Beschreibung: TrendLinesFromFiboAndTrend2 ist ein Tool für MetaTrader 5, das entwickelt wurde, um den Winkel und die Steigung einer bestehenden Trendlinie zu kopieren und diese automatisch auf alle wichtigen Niveaus (Retracements und Extensions) eines im Chart eingezeichneten Fibonacci-Objekts zu projizieren.
Wichtigste Vorteile:
-
Exakte geometrische Projektion: Behält die exakte Steigung und Länge der ursprünglichen Trendlinie bei.
-
Vollständige Projektion: Zeichnet 9 dynamische Unterstützungs-/Widerstandslinien an wichtigen Niveaus (0,0 %, 23,6 %, 38,2 %, 50,0 %, 61,8 %, 38,2 %, 100,0 %, 161,8 %, 200,0 % und 261,8 %).
-
Multidirektionale Unterstützung: Ermöglicht die Auswahl der Fibonacci-Ausrichtung (bullisch oder bärisch), um die Erweiterungen außerhalb des Bereichs von 0–100 % korrekt zu berechnen.
-
Anpassbarer Stil: Konfiguration von Farbe, Stil und Dicke, um die erstellten Kanäle leicht unterscheiden zu können.
-
Blitzschnelle Ausführung: Da es sich um ein Ein-Schritt-Skript handelt, verbraucht es keine Ressourcen und verlangsamt den Chart nicht.
So funktioniert es:
-
Das Skript ermittelt die Zeit- und Kurspunkte einer ausgewählten Trendlinie, um deren Steigung zu berechnen.
-
Es identifiziert den Ursprung und die Preisniveaus des angegebenen Fibonacci-Musters.
-
Es generiert und zeichnet automatisch 9 parallele Linien, die vom Fibonacci-Startzeitpunkt entlang jedes Niveaus verlaufen.
Eingabeparameter:
-
InpTrendName – Genaue Bezeichnung des Trendlinienobjekts im Chart (z. B. AutoTrend_175779433).
-
InpFiboName – Genaue Bezeichnung des Fibonacci-Objekts im Chart (z. B. M1 Fibo 57122).
-
InpFiboDirection — Richtung des Fibonacci (FIBO_BULLISCH oder FIBO_BEARISCH).
-
InpLineColor – Farbe der projizierten Linien.
-
InpLineStyle – Darstellungsstil der Linie (durchgezogen, gepunktet, gestrichelt).
-
InpLineWidth – Strichstärke der Linie (1 bis 5).
Empfohlene Verwendung: Kombinieren Sie diese Funktion mit „AutoFindBestTrendLine“ (oder einer beliebigen manuellen Trendlinie) und einem Fibonacci-Retracement, um dynamische Kanalstrukturen zu projizieren, Gewinne bei Ausbrüchen mitzunehmen und wichtige Konfluenzen im Chart zu erkennen.
//+------------------------------------------------------------------+
//| TrendLinesFromFiboAndTrend2.mq5 |
//| Copyright 2026 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026"
#property link ""
#property version „5.00“
#property script_show_inputs
// Definition der Fibonacci-Richtung für das Eigenschaftenfenster
enum ENUM_FIBO_DIR
{
FIBO_BULLISCH = 0, // Bullisch (0 % nach unten -> 100 % nach oben | Erweiterungen nach oben)
FIBO_BAISSISCH = 1 // Baisse (0 % nach oben -> 100 % nach unten | Erweiterungen nach unten)
};
// Konfigurierbare Eingabeparameter
input string InpTrendName = "AutoTrend_175779433"; // Genaue Bezeichnung der Trendlinie
input string InpFiboName = "M1 Fibo 57122"; // Genaue Bezeichnung des Fibonacci
input ENUM_FIBO_DIR InpFiboDirection = FIBO_BULLISCH; // Richtung des Fibonacci
Eingabe „Farbe“ InpLineColor = clrDodgerBlue; // Farbe der neuen Linien
input ENUM_LINE_STYLE InpLineStyle = STYLE_SOLID; // Linienstil (durchgehend, gestreift, gepunktet...)
input int InpLineWidth = 2; // Linienstärke (1 bis 5)
//+------------------------------------------------------------------+
//| Startfunktion des Skripts |
//+------------------------------------------------------------------+
void OnStart()
{
string trendName = InpTrendName;
string fiboName = InpFiboName;
// 1. Überprüfen, ob die Trendlinie vorhanden und korrekt ist
if(ObjectFind(0, trendName) < 0)
{
Print("Fehler: Es wurde keine Trendlinie mit dem Namen: ", trendName) gefunden;
return;
}
if((int)ObjectGetInteger(0, trendName, OBJPROP_TYPE) != OBJ_TREND)
{
Print("Fehler: Das Objekt '", trendName, "' ist keine Trendlinie.");
return;
}
// 2. Überprüfen, ob das Fibonacci-Objekt vorhanden und korrekt ist
if(ObjectFind(0, fiboName) < 0)
{
Print("Fehler: Es wurde kein Fibonacci-Objekt mit dem Namen: ", fiboName) gefunden;
return;
}
if((int)ObjectGetInteger(0, fiboName, OBJPROP_TYPE) != OBJ_FIBO)
{
Print("Fehler: Das Objekt '", fiboName, "' ist kein Fibonacci-Objekt.");
return;
}
// 3. Die Trendlinie abrufen und chronologisch sortieren (von links nach rechts)
datetime t_a = (datetime)ObjectGetInteger(0, trendName, OBJPROP_TIME, 0);
double p_a = ObjectGetDouble(0, trendName, OBJPROP_PRICE, 0);
datetime t_b = (datetime)ObjectGetInteger(0, trendName, OBJPROP_TIME, 1);
double p_b = ObjectGetDouble(0, trendName, OBJPROP_PRICE, 1);
datetime tr_start_time = (t_a <= t_b) ? t_a : t_b;
datetime tr_end_time = (t_a <= t_b) ? t_b : t_a;
double tr_start_price = (t_a <= t_b) ? p_a : p_b;
double tr_end_price = (t_a <= t_b) ? p_b : p_a;
datetime trDuration = tr_end_time - tr_start_time;
double trPriceDelta = tr_end_price - tr_start_price;
if(trDuration <= 0)
{
Print("Fehler: Die Dauer der Trendlinie ist ungültig.");
return;
}
// 4. Die physischen Fibonacci-Punkte im Chart abrufen
datetime fibTime0 = (datetime)ObjectGetInteger(0, fiboName, OBJPROP_TIME, 0);
double f_p1 = ObjectGetDouble(0, fiboName, OBJPROP_PRICE, 0);
double f_p2 = ObjectGetDouble(0, fiboName, OBJPROP_PRICE, 1);
double baseLow = MathMin(f_p1, f_p2);
double baseHigh = MathMax(f_p1, f_p2);
double fibSpan = baseHigh - baseLow;
if(fibSpan == 0.0)
{
Print("Fehler: Der Fibonacci-Bereich ist null.");
return;
}
// Festlegung der Referenzpreise für 0 % und 100 % entsprechend der gewählten Eingabe
double price0 = 0.0;
double price100 = 0,0;
if(InpFiboDirection == FIBO_BULLISH)
{
price0 = baseLow; // 0,0 % tiefer
price100 = baseHigh; // 100,0 % nach oben
}
else
{
price0 = baseHigh; // 0,0 % nach oben
price100 = baseLow; // 100,0 % nach unten
}
Print("==================================================");
Print(" [KONFIGURATION ÜBERNOMMEN]");
Print(" Verwendeter Trend: ", trendName);
Print(" Verwendeter Fibonacci: ", fiboName);
Print(" Fibonacci-Richtung: ", (InpFiboDirection == FIBO_BULLISCH) ? "BULLISCH" : "BEARISCH");
Print(" Fibonacci 0,0 % -> Kurs: ", DoubleToString(price0, _Digits));
Print(" Fibonacci 100,0 % -> Kurs: ", DoubleToString(price100, _Digits));
Print("==================================================");
// Angeforderte Niveaus (einschließlich Erweiterungen)
double fibLevels[9] = {0,0, 23,6, 38,2, 50,0, 61,8, 100,0, 161,8, 200,0, 261,8};
string fibLabels[9] = {"0.0", "23.6", "38.2", "50.0", "61.8", "100.0", "161.8", "200,0", "261,8"};
long uniqueBase = GetTickCount();
int createdCount = 0;
// 5. Erstellen der exakten Replikate unter Berücksichtigung der angegebenen Richtung
for(int k = 0; k < 9; k++)
{
double levelPct = fibLevels[k];
double levelPrice = 0.0;
if(InpFiboDirection == FIBO_BULLISH)
{
if(levelPct <= 100,0)
{
levelPrice = price0 + (fibSpan * (levelPct / 100,0));
}
else
{
double extFactor = (levelPct - 100,0) / 100,0;
levelPrice = price100 + (fibSpan * extFactor); // Nach oben erweitern
}
}
else // FIBO_BEARISH
{
if(levelPct <= 100,0)
{
levelPrice = price0 - (fibSpan * (levelPct / 100,0));
}
else
{
double extFactor = (levelPct - 100,0) / 100,0;
levelPrice = price100 - (fibSpan * extFactor); // Nach unten erweitern
}
}
datetime new_t1 = fibTime0;
double new_p1 = levelPrice;
datetime new_t2 = new_t1 + trDuration;
double new_p2 = new_p1 + trPriceDelta;
string lineName = StringFormat("FiboTrend_%s_%d", fibLabels[k], uniqueBase + k);
if(ObjectCreate(0, lineName, OBJ_TREND, 0, new_t1, new_p1, new_t2, new_p2))
{
ObjectSetInteger(0, lineName, OBJPROP_RAY_LEFT, true);
ObjectSetInteger(0, lineName, OBJPROP_RAY_RIGHT, true);
ObjectSetInteger(0, lineName, OBJPROP_COLOR, InpLineColor);
ObjectSetInteger(0, lineName, OBJPROP_STYLE, InpLineStyle);
ObjectSetInteger(0, lineName, OBJPROP_WIDTH, InpLineWidth);
ObjectSetInteger(0, lineName, OBJPROP_SELECTABLE, true);
ObjectSetInteger(0, lineName, OBJPROP_HIDDEN, false);
createdCount++;
}
}
ChartRedraw(0);
Print("Erfolg! Es wurden ", createdCount, " Linien unter Verwendung der konfigurierten Richtung gezeichnet.");
}