29 Januar, 2026 • Aktualisiert 24 Oktober, 2026

Analyse der Handelsstrategie „Kopf oder Zahl“ – Quellcode in MQL5

ForTrader.org
Praxisnahe Analyse des MQL5-Quellcodes einer zufallsbasierten Handelsstrategie – inklusive OnInit, OnTick und Risikomanagement.

Die Handelsstrategie „Kopf oder Zahl“ zählt zu den populären Methoden unter Tradern des russischen Marktes. Der Name verdeutlicht das Prinzip: Die Handelsrichtung (Kauf oder Verkauf) wird zufällig bestimmt – analog zum Münzwurf („Kopf“ oder „Zahl“).

Trotz der Einfachheit des Konzepts zieht die Strategie vor allem Einsteiger durch ihre Zugänglichkeit und intuitive Anwendbarkeit an.

Inhaltsverzeichnis

Grundidee der Handelsstrategie

Die Kernidee lässt sich wie folgt zusammenfassen:

  • Auswahl des Handelsinstruments: Der Trader wählt ein Finanzinstrument (z. B. Aktien oder Währungen).
  • Münzwurf: Die Handelsrichtung (Kauf oder Verkauf) wird zufällig bestimmt.
  • Eröffnung der Position: Nach der Zufallsentscheidung wird eine Order mit vordefiniertem Volumen eröffnet.
  • Risikomanagement: Es werden Stop-Loss- und Take-Profit-Kurse festgelegt, um Verluste zu begrenzen bzw. Gewinne zu realisieren.

Damit reduziert sich die gesamte Handelsaktivität auf eine zufällige Richtungsentscheidung – was den Entscheidungsprozess erheblich vereinfacht.

Vorteile und Nachteile der Strategie

Zu den Vorteilen dieser Methode zählen:

  1. Keine Notwendigkeit für aufwändige technische oder fundamentale Marktanalysen.
  2. Keine ständige Marktbeobachtung erforderlich – dies senkt den Stresspegel.
  3. Die Strategie lässt sich einfach automatisieren und eignet sich daher gut für algorithmische Handelssysteme.

Nachteile:

  1. Die Erfolgswahrscheinlichkeit beträgt lediglich 50 % – deutlich niedriger als bei den meisten professionellen Handelsstrategien.
  2. Die Ignorierung wichtiger wirtschaftlicher Indikatoren und technischer Signale erhöht das Risiko von Verlusten.
  3. Zur Risikominimierung wird ein ausreichend großes Trading-Kapital empfohlen, das mögliche Verlustserien auffangen kann.

Für eine erfolgreiche Umsetzung sind folgende Punkte entscheidend:

  • Die Positionsgrößen sollten nicht mehr als 1 % des gesamten Trading-Kapitals betragen.
  • Die strikte Einhaltung der festgelegten Stop-Loss- und Take-Profit-Kurse ist unerlässlich.
  • Die Diversifikation über verschiedene Finanzinstrumente senkt das Gesamtrisiko des Portfolios.

Anfängern wird dringend empfohlen, die Strategie „Kopf oder Zahl“ zunächst auf einem Demo-Konto zu testen, um ihr Potenzial einzuschätzen und eigene Ansätze zum Positionsmanagement zu entwickeln.

Quellcode des Expert Advisors

1. Allgemeine Dateistruktur

Die Expert-Advisor-Datei beginnt mit einem Header-Kommentar, der folgende Informationen enthält:

  • den Dateinamen (VR Heads or Tails.mq5);
  • Angaben zum Autor und Erscheinungsjahr;
  • die Website des Entwicklers.

Darauf folgen die Direktiven #property, die Metadaten des Advisors definieren: Urheberrecht, Version und relevante Links.

2. Einbindung von Bibliotheken und Deklaration von Variablen

Für den Handelsbetrieb werden die Standardbibliotheken von MQL5 eingebunden:

#include <Trade\Trade.mqh>

CTrade trade; // Instanz der Handelsklasse

#include <Trade\PositionInfo.mqh>

CPositionInfo posit; // Instanz zur Speicherung von Positionsdaten
  • CTrade – Klasse zum Versenden von Handelsaufträgen (Kauf/Verkauf);
  • CPositionInfo – Klasse zum Abrufen von Informationen zu offenen Positionen.

Anschließend werden die Eingabeparameter des Advisors deklariert (vom Nutzer konfigurierbar im MT5-Interface):

input double iStartLots = 0,01; // Start-Lotgröße
input int iTakeProfit = 450; // Take-Profit (in Points)
input int iStopLoss = 390; // Stop-Loss (in Points)
input int iMagicNumber = 227; // Eindeutige Kennung für Aufträge
input int iSlippage = 30; // Maximal zulässiger Schlupf
  • iStartLots – Volumen des ersten Auftrags;
  • iTakeProfit und iStopLoss – Gewinn- und Verlustgrenzen;
  • iMagicNumber – numerische Kennung zur Unterscheidung automatischer von manuellen Aufträgen;
  • iSlippage – maximal zulässige Preisabweichung bei der Auftragsausführung.

3. Funktion OnInit() – Initialisierung des Roboters

Diese Funktion wird einmalig beim Start des Advisors ausgeführt. Ihre Aufgabe ist die Konfiguration der Handelsparameter:

int OnInit() {

trade.SetExpertMagicNumber(iMagicNumber); // MagicNumber festlegen
trade.SetDeviationInPoints(iSlippage); // Schlupf festlegen
trade.SetTypeFillingBySymbol(_Symbol); // Ausführungsart nach Symbol
trade.SetMarginMode(); // Margin-Modus (Hedging)
MathSrand(GetTickCount()); // Zufallszahlengenerator initialisieren

return(INIT_SUCCEEDED); // Meldung über erfolgreichen Start
}

Wichtige Aktionen:

  1. SetExpertMagicNumber() – weist den Aufträgen eine eindeutige Kennung zu.
  2. SetDeviationInPoints() – legt den maximalen Schlupf fest.
  3. SetTypeFillingBySymbol() – konfiguriert die Auftragsausführungsart (z. B. „Marktpreis“).
  4. SetMarginMode() – aktiviert den Hedging-Modus (getrennte Long- und Short-Positionen zum selben Instrument).
  5. MathSrand() – initialisiert den Zufallszahlengenerator (später für die zufällige Richtungsentscheidung genutzt).

4. Funktion OnTick() – Verarbeitung neuer Kurse

Diese Funktion wird bei jedem neuen Tick (Preisänderung) aufgerufen. Wir analysieren sie schrittweise.

4.1. Abruf von Markt- und Positionsdaten

int total = ::PositionsTotal(); // Anzahl offener Positionen
double Bid = ::SymbolInfoDouble(_Symbol, SYMBOL_BID); // Bid-Preis
double Ask = ::SymbolInfoDouble(_Symbol, SYMBOL_ASK); // Ask-Preis

Falls die Preise ungültig sind (≤ 0), wird die Funktion abgebrochen:

if(Bid <= 0 || Ask <= 0)
 return;

4.2. Analyse offener Positionen

Eine Schleife durchläuft alle Positionen und zählt die Long- (Kauf) und Short- (Verkauf) Positionen:

for(int i = 0; i < total; i++) {
 if(posit.SelectByIndex(i)) {
 if(posit.Symbol() == _Symbol && posit.Magic() == iMagicNumber) {
 if(posit.PositionType() == POSITION_TYPE_BUY) b++;
 if(posit.PositionType() == POSITION_TYPE_SELL) s++;
 }
 }
}
  • SelectByIndex() – wählt eine Position anhand ihres Index aus;
  • Symbol() und Magic() – prüfen, ob die Position zum aktuellen Symbol und zum Roboter gehört;
  • PositionType() – identifiziert die Art der Position (Kauf/Verkauf).

4.3. Eröffnung eines neuen Auftrags

Falls keine Positionen offen sind (b + s == 0), wählt der Roboter zufällig die Richtung:

if((b + s) == 0) {
 if(MathRand() % 2 == 0) { // Zufallsentscheidung: 0 → Kauf, 1 → Verkauf
 trade.Buy(iStartLots, _Symbol, Ask, Ask - iStopLoss * _Point, Ask + iTakeProfit * _Point, "");
 } else {
 trade.Sell(iStartLots, _Symbol, Bid, Bid + iStopLoss * _Point, Bid - iTakeProfit * _Point, "");
 }
}
  • MathRand() % 2 – generiert eine Zufallszahl (0 oder 1);
  • trade.Buy() – eröffnet eine Long-Position mit definiertem TP/SL;
  • trade.Sell() – eröffnet eine Short-Position.

Parameter der Handelsfunktionen:

  • iStartLots – Auftragsvolumen;
  • _Symbol – Handelsinstrument;
  • Ask/Bid – Eröffnungspreis;
  • Ask - iStopLoss * _Point – Stop-Loss-Kurs für Kauf;
  • Ask + iTakeProfit * _Point – Take-Profit-Kurs für Kauf;
  • _Point – Punktgröße des Instruments.

Nach der Auftragseröffnung wird die Funktion beendet (return), um Doppelausführungen zu vermeiden.

5. Funktion OnDeinit() – Deinitialisierung

Diese Funktion wird beim Entfernen des Roboters vom Chart aufgerufen. In diesem Beispiel bleibt sie leer, kann aber genutzt werden für:

  • Speicherung von Statistikdaten;
  • automatisches Schließen offener Positionen;
  • Ausgabe von Log-Einträgen.
void OnDeinit(const int reason) {
 // Hier kann Code für den Abschluss hinzugefügt werden
}

6. Wie funktioniert der Roboter insgesamt?

  1. Bei Start (OnInit) werden die Handelsparameter konfiguriert.
  2. Bei jedem Tick (OnTick):
    • Wird geprüft, ob offene Positionen existieren;
    • Falls keine Positionen offen sind, wird zufällig LONG oder SHORT mit vorgegebenem TP/SL eröffnet;
    • Falls Positionen vorhanden sind, erfolgt keine weitere Aktion.
  3. Beim Entfernen des Roboters (OnDeinit) erfolgt eine Bereinigungsroutine (hier leer).

7. Wichtige Hinweise für Einsteiger

  1. Testphase: Vor dem Einsatz am Realgeldkonto sollte der Roboter auf einem Demo-Konto oder im Strategy Tester von MT5 getestet werden.
  2. Risiken: Die zufällige Richtungsentscheidung stellt eine hochriskante Strategie dar. In der Praxis sollten Filter (Indikatoren, Trendanalyse) eingesetzt werden.
  3. Parameteranpassung: Passen Sie iStartLots, iTakeProfit und iStopLoss an Ihren Handelsstil und Ihren Kontostand an.
  4. MagicNumber: Stellen Sie sicher, dass iMagicNumber nicht mit anderen Robotern auf dem Konto kollidiert.
  5. Schlupf: Der Wert iSlippage sollte zur Liquidität des gewählten Instruments passen.

8. Mögliche Verbesserungen

Dieser Roboter ist ein Grundmodell. Für den praktischen Einsatz empfehlen sich folgende Ergänzungen:

  • Indikatorbasierte Filter (z. B. RSI, MACD);
  • Fortgeschrittenes Risikomanagement (Lotberechnung basierend auf Kontostand);
  • Protokollierung aller Trades;
  • Schutz vor Mehrfachaufträgen;
  • Parameteroptimierung mittels Backtests.

Sie haben nun die Struktur eines einfachen MQL5-Handelsroboters kennengelernt, dessen zentrale Funktionen analysiert und deren Funktionsweise verstanden. Damit können Sie diesen Code anpassen oder eigene Expert Advisors entwickeln.

Folgen Sie uns auf Telegram

Fortrader contentUrl Suite 11, Second Floor, Sound & Vision House, Francis Rachel Str. Victoria Victoria, Mahe, Seychelles +7 10 248 2640568

More from this category

Alle Artikel

Recent educational articles

Alle Artikel

Empfehlungen der Redaktion

Alle Artikel