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
- Vorteile und Nachteile der Strategie
- Quellcode des Expert Advisors
- Allgemeine Dateistruktur
- Einbindung von Bibliotheken und Deklaration von Variablen
- Funktion OnInit() – Initialisierung des Roboters
- Funktion OnTick() – Verarbeitung neuer Kurse
- Funktion OnDeinit() – Deinitialisierung
- Wie funktioniert der Roboter insgesamt?
- Wichtige Hinweise für Einsteiger
- Möglichkeiten zur Verbesserung
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:
- Keine Notwendigkeit für aufwändige technische oder fundamentale Marktanalysen.
- Keine ständige Marktbeobachtung erforderlich – dies senkt den Stresspegel.
- Die Strategie lässt sich einfach automatisieren und eignet sich daher gut für algorithmische Handelssysteme.
Nachteile:
- Die Erfolgswahrscheinlichkeit beträgt lediglich 50 % – deutlich niedriger als bei den meisten professionellen Handelsstrategien.
- Die Ignorierung wichtiger wirtschaftlicher Indikatoren und technischer Signale erhöht das Risiko von Verlusten.
- 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;iTakeProfitundiStopLoss– 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:
SetExpertMagicNumber()– weist den Aufträgen eine eindeutige Kennung zu.SetDeviationInPoints()– legt den maximalen Schlupf fest.SetTypeFillingBySymbol()– konfiguriert die Auftragsausführungsart (z. B. „Marktpreis“).SetMarginMode()– aktiviert den Hedging-Modus (getrennte Long- und Short-Positionen zum selben Instrument).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
PositionsTotal()– gibt die Anzahl aktiver Positionen zurück;SymbolInfoDouble()– ruft aktuelle Bid- (Verkaufs-) und Ask- (Kauf-) Preise ab.
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()undMagic()– 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?
- Bei Start (
OnInit) werden die Handelsparameter konfiguriert. - 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.
- Beim Entfernen des Roboters (
OnDeinit) erfolgt eine Bereinigungsroutine (hier leer).
7. Wichtige Hinweise für Einsteiger
- Testphase: Vor dem Einsatz am Realgeldkonto sollte der Roboter auf einem Demo-Konto oder im Strategy Tester von MT5 getestet werden.
- Risiken: Die zufällige Richtungsentscheidung stellt eine hochriskante Strategie dar. In der Praxis sollten Filter (Indikatoren, Trendanalyse) eingesetzt werden.
- Parameteranpassung: Passen Sie
iStartLots,iTakeProfitundiStopLossan Ihren Handelsstil und Ihren Kontostand an. - MagicNumber: Stellen Sie sicher, dass
iMagicNumbernicht mit anderen Robotern auf dem Konto kollidiert. - Schlupf: Der Wert
iSlippagesollte 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.