- Bitte Code als Code posten: Alt+S oder
- Wenn das Program nicht tut, was es soll ist der Debugger das Mittel der Wahl: https://www.metatrader5.com/de/metaeditor/help/development/debug.
- Übrigens: Es gibt fast nichts, das nicht schon für MT4/5 programmiert wurde!
=> Suchen in den Artikeln: https://www.mql5.com/de/articles
=> Suchen in der Codebase: https://www.mql5.com/de/code
=> Suchen allgemein: https://www.mql5.com/de/search oder über Google mit: "site:mql5.com .." (verzeiht Schreibfehler) - Als Anfänger würde ich Dir empfehlen, such etwas, das Deiner Idee nahe kommt. Dann beginnst Du mit etwas, was funktioniert, und ändere es langsam ab.
- Hier noch konzentriert eine Übersicht für Neulinge: https://www.mql5.com/de/forum/455957#comment_50048608
Code-Debugging - Programme entwickeln - MetaEditor Hilfe
- www.metatrader5.com
MetaEditor hat einen eingebauten Debugger, mit dem Sie die Programmausführung Schritt für Schritt (durch einzelne Funktionen) ü...
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hi zusammen,
ich stecke etwas fest. Ich versuche mir einen "Scanner" zu bauen, der bei den Initialisierung des EA's losläuft und mir bestimmte Werte druckt. Allerdings kriege ich die entsprechende Funktion nicht gestartet.
Ich bin jetzt kein Programmierer und fange quasi mehr oder weniger an. Hier ist mein Code. Was mache ich falsch?
//+------------------------------------------------------------------+
//| SymbolScanner.mq5|
//| Copyright 2023, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
#include <Controls\Panel.mqh>
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnInit()
{
Print("ZZZZZZZZZZZZZZZ");
// Andere Initialisierungen
double sma20 = iMA(_Symbol, _Period, 20, 0, MODE_SMA, PRICE_CLOSE);
Print("XXXXXXXXXXXXXXXXXXXXXX");
// Start Scanner einmalig beim Laden des Indikators
StartScanner();
//return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Funktion, um den Scanner zu starten |
//+------------------------------------------------------------------+
void StartScanner()
{
Print("WWWWWWWWWWWWWWWWWWWWWWW");
string symbolName;
int totalSymbols = SymbolsTotal(false);
for(int i = 0; i < totalSymbols; i++)
{
symbolName = SymbolName(i, false);
// Prüfe für jeden Timeframe
CheckSymbolOnTimeframe(symbolName, PERIOD_H1);
CheckSymbolOnTimeframe(symbolName, PERIOD_H4);
CheckSymbolOnTimeframe(symbolName, PERIOD_D1);
Print("YYYYYYYYYYYYYYYYYYYY");
}
}
//+------------------------------------------------------------------+
//| Funktion zum Überprüfen eines Symbols in einem bestimmten Timeframe |
//+------------------------------------------------------------------+
void CheckSymbolOnTimeframe(string symbol, ENUM_TIMEFRAMES timeframe)
{
if(IsHeikenAshiNoWick(symbol, timeframe))
{
string timeframeStr = TimeframeToString(timeframe);
Print("Signal gefunden für ", symbol, " im Timeframe ", timeframeStr);
}
}
bool IsHeikenAshiNoWick(string symbol, ENUM_TIMEFRAMES timeframe)
{
MqlRates rates[2]; // Array für zwei Bars
// Versuche, die letzten zwei Bars zu kopieren
if(CopyRates(symbol, timeframe, 0, 2, rates) >= 2)
{
double haClose = (rates[1].open + rates[1].high + rates[1].low + rates[1].close) / 4;
double previousHAOpen = (rates[1].open + rates[1].close) / 2; // Vorherige Kerze
double haOpen = (previousHAOpen + rates[1].close) / 2; // Aktuelle Kerze
double haHigh = MathMax(rates[1].high, MathMax(haOpen, haClose));
double haLow = MathMin(rates[1].low, MathMin(haOpen, haClose));
// Überprüfe, ob die letzte Heiken-Ashi-Kerze keinen Wick hat
if(haHigh == haLow)
return true;
}
return false;
}
//+------------------------------------------------------------------+
//| Hilfsfunktion zur Umwandlung von Timeframe-Enumerationen in Strings |
//+------------------------------------------------------------------+
string TimeframeToString(int timeframe)
{
switch(timeframe)
{
case PERIOD_M1: return "1 Minute";
case PERIOD_M5: return "5 Minuten";
case PERIOD_M15: return "15 Minuten";
case PERIOD_M30: return "30 Minuten";
case PERIOD_H1: return "1 Stunde";
case PERIOD_H4: return "4 Stunden";
case PERIOD_D1: return "Täglich";
case PERIOD_W1: return "Wöchentlich";
case PERIOD_MN1: return "Monatlich";
default: return "Unbekannter Timeframe";
}
}
//+------------------------------------------------------------------+