FIBONACCI-NIVEAUS 1.14 – Projektion benutzerdefinierter Fibonacci-Niveaus
Dieses Skript für MetaTrader 5 ermöglicht die automatische Berechnung und Darstellung benutzerdefinierter Fibonacci-Niveaus auf der Grundlage von zwei bekannten Kurswerten und den entsprechenden Fibonacci-Niveaus.
Das Tool nutzt ein lineares mathematisches Verhältnis zwischen den beiden eingegebenen Punkten, um jedes vom Benutzer gewünschte Fibonacci-Niveau zu projizieren.
Wie funktioniert es?
Der Benutzer muss Folgendes eingeben:
- Kurs von Punkt A
- Dem Punkt A zugewiesene Fibonacci-Stufe
- Kurs von Punkt B
- Dem Punkt B zugewiesene Fibonacci-Stufe
Anhand dieser beiden Referenzpunkte berechnet das Skript automatisch den Preis für jedes Fibonacci-Niveau, das in der Niveau-Liste angegeben ist.
Beispiel:
Punkt A → 1,16594 = 100 % Punkt B → 1,16363 = 423,6 %
Anhand dieser Daten kann das Skript Niveaus wie die folgenden berechnen und einzeichnen:
0 %
23,6 %
38,2 %
50 %
61,8 %
100 %
161,8 %
261,8 %
423,6 %
Die Niveaus können über die Eingabeparameter frei angepasst werden.
Hauptmerkmale
- Mathematische Projektion benutzerdefinierter Fibonacci-Niveaus.
- Ermöglicht die Verwendung beliebiger Fibonacci-Niveaus als Referenz.
- Ermöglicht die Arbeit mit positiven oder negativen Niveaus.
- Vollständig konfigurierbare Liste der Niveaus.
- Die Linien werden als horizontale Linien im Chart eingezeichnet.
- Automatische Anpassung an die Anzahl der Dezimalstellen des Wertpapiers über _Digits.
- Normalisierung des berechneten Kurses auf die Anzahl der Dezimalstellen des Vermögenswerts.
- Informativer Tooltip mit dem Fibonacci-Niveau und dem entsprechenden Kurs.
- Die generierten Linien verwenden ein identifizierendes Präfix, um ihre Verwaltung zu erleichtern.
- Möglichkeit, alle vom Skript generierten Linien über die Option ACTION_DELETEzu löschen .
- Ermöglicht die Konfiguration von Farbe, Stil und Stärke der Linien.
- Es werden keine externen Indikatoren verwendet und es sind keine DLLs erforderlich.
Konfiguration
In den Einstellungen für bekannte Preise:
InpPriceA InpFiboLevelA InpPriceB InpFiboLevelB
werden die beiden bekannten Punkte eingegeben.
Unter „Zu zeichnende Ebenen“:
InpTargetLevels
werden die Ebenen angegeben, die dargestellt werden sollen, getrennt durch ;.
Beispiel:
0; 23,6; 38,2; 50; 61,8; 100; 161,8; 261,8; 423,6
Verwaltung der Linien
Mitdem Parameter InpAction kann zwischen folgenden Optionen gewählt werden:
ACTION_DRAW
Berechnet und zeichnet die konfigurierten Niveaus.
ACTION_DELETE
Löscht die von diesem Skript erstellten Linien unter Verwendung des in ` InpPrefix`konfigurierten Präfixes .
Wichtig
Dieses Skript ist ein mathematisches und grafisches Werkzeug zur Projektion von Fibonacci-Niveaus.
Es generiert keine Kauf- oder Verkaufssignale, führt keine Transaktionen durch und stellt an sich kein automatisches Handelssystem dar.
Die berechneten Niveaus hängen direkt von den beiden vom Benutzer eingegebenen Kursen und Fibonacci-Niveaus ab.
Version: 1.14
Plattform: MetaTrader 5
Typ: Skript
Autor: SPC
//+------------------------------------------------------------------+
//| NIVELESFIBONACCI1.1.mq5 |
//| SPC |
//+------------------------------------------------------------------+
#property copyright "SPC"
#property version „1.14“
#property script_show_inputs
//--- Aufzählung zur Auswahl der Skriptaktion
enum ENUM_SCRIPT_ACTION
{
ACTION_DRAW = 0, // Ebenen zeichnen
ACTION_DELETE = 1 // Gezeichnete Linien löschen
};
//--- Eingabeparameter (Input Parameters)
Eingabegruppe „=== Hauptaktion ===“
input ENUM_SCRIPT_ACTION InpAction = ACTION_DRAW; // Auszuführende Aktion
Eingabegruppe „=== Konfiguration bekannter Preise ===“
input double InpPriceA = 1,16594; // Preis von Punkt A
Eingabe double InpFiboLevelA = 100,0; // Punkt A zugewiesenes Fibo-Niveau (%)
input double InpPriceB = 1,16363; // Kurs von Punkt B
input double InpFiboLevelB = 423,6; // Punkt B zugewiesener Fibonacci-Level (%)
input group "=== Zu zeichnende Niveaus ==="
input string InpTargetLevels = "0; 23,6; 38,2; 50; 61,8; 100; 161,8; 261,8; 423,6"; // Fibonacci-Niveaus in % (durch ; getrennt)
input group "=== Stil der horizontalen Linien ==="
Eingabe Farbe InpLineColor = clrOrange; // Farbe der Linien
input ENUM_LINE_STYLE InpLineStyle = STYLE_SOLID; // Linienstil
input int InpLineWidth = 3; // Linienstärke
input string InpPrefix = "FiboCustom_";// Präfix zur Identifizierung der Linien
//+------------------------------------------------------------------+
//| Startfunktion des Skripts |
//+------------------------------------------------------------------+
void OnStart()
{
// 1. Wenn die ausgewählte Aktion „LÖSCHEN“ ist, führen wir die Bereinigungsfunktion aus und beenden das Skript
if(InpAction == ACTION_DELETE)
{
DeleteFiboLines(InpPrefix);
ChartRedraw(0);
Print("NIVELESFIBONACCI1.1 (v1.14): Alle Linien mit dem Präfix '", InpPrefix, "' wurden gelöscht.");
return;
}
// 2. Überprüfung zur Vermeidung einer Division durch Null im Modus „ZEICHNEN“
if(InpFiboLevelA == InpFiboLevelB)
{
Print("Fehler: Die Fibo-Ebenen A und B dürfen nicht identisch sein.");
return;
}
// 3. Vom Benutzer eingegebene benutzerdefinierte Niveaus verarbeiten
double targetLevels[];
ushort u_sep = StringGetCharacter(";", 0);
string rawLevels[];
int totalSplit = StringSplit(InpTargetLevels, u_sep, rawLevels);
if (totalSplit <= 0)
{
Print("Fehler: In InpTargetLevels wurden keine gültigen Level angegeben.");
return;
}
ArrayResize(targetLevels, totalSplit);
int validCount = 0;
for(int i = 0; i < totalSplit; i++)
{
string trimmed = rawLevels[i];
StringTrimLeft(trimmed);
StringTrimRight(trimmed);
if (StringLen(trimmed) > 0)
{
// Überprüfung, um nicht-numerische Werte (z. B. „abc“) zu entfernen
double val = StringToDouble(trimmed);
if (val == 0.0 && trimmed != "0" && trimmed != "0.0" && trimmed != "0,0")
{
Print("Hinweis: Der Wert '", trimmed, "' ist keine gültige Zahl und wird ignoriert.");
continue;
}
targetLevels[validCount] = val;
validCount++;
}
}
if(validCount == 0)
{
Print("Fehler: Die angegebenen Fibonacci-Niveaus konnten nicht interpretiert werden.");
return;
}
// 4. Berechnung der Preisänderung pro 1 % Fibonacci
double pricePerUnit = (InpPriceB - InpPriceA) / (InpFiboLevelB - InpFiboLevelA);
// 5. Projektion und direkte Darstellung, angepasst an die Dezimalstellen des Vermögenswerts (_Digits)
for(int i = 0; i < validCount; i++)
{
double currentPct = targetLevels[i];
double Rohpreis = InpPriceA + (PreisProEinheit * (aktuellerProzentsatz - InpFiboLevelA));
// Normalisierung des Kurses auf die genaue Anzahl von Dezimalstellen des aktuellen Symbols
double targetPrice = NormalizeDouble(rawPrice, _Digits);
string objName = InpPrefix + DoubleToString(currentPct, 1);
// Vorhandenes Objekt löschen, falls vorhanden, um die Linie zu aktualisieren
ObjectDelete(0, objName);
if(ObjectCreate(0, objName, OBJ_HLINE, 0, 0, targetPrice))
{
ObjectSetInteger(0, objName, OBJPROP_COLOR, InpLineColor);
ObjectSetInteger(0, objName, OBJPROP_STYLE, InpLineStyle);
ObjectSetInteger(0, objName, OBJPROP_WIDTH, InpLineWidth);
ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, true);
ObjectSetInteger(0, objName, OBJPROP_SELECTED, false);
// Dynamische Formatierung des angezeigten Werts mit den automatischen Dezimalstellen des Vermögenswerts (_Digits)
string tooltip = StringFormat("Fibo %.1f%% : %.*f", currentPct, _Digits, targetPrice);
ObjectSetString(0, objName, OBJPROP_TOOLTIP, tooltip);
}
}
ChartRedraw(0);
Print("FIBONACCI-NIVEAUS 1.1 (v1.14): Projektion mit ", validCount, " gültigen Niveaus abgeschlossen.");
}
//+------------------------------------------------------------------+
//| Hilfsfunktion zum Löschen von Objekten anhand eines Präfixes |
//+------------------------------------------------------------------+
void DeleteFiboLines(string prefix)
{
int totalObjects = ObjectsTotal(0, -1, -1);
// Wir durchlaufen die Objekte in umgekehrter Reihenfolge, um Indexabweichungen beim Löschen zu vermeiden
for(int i = totalObjects - 1; i >= 0; i--)
{
string objName = ObjectName(0, i, -1);
if(StringFind(objName, prefix) == 0)
{
ObjectDelete(0, objName);
}
}
}
//+------------------------------------------------------------------+