Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

TradeState - Der Umschalter des Handelnmodus des Experten je nachdem, in welcher Zeit es ist. - Bibliothek für den MetaTrader 5

Ansichten:
927
Rating:
(44)
Veröffentlicht:
2016.09.26 18:41
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Haben Sie jemals versucht, die Arbeit Ihres Handelsexperten zu beschränken, je nachdem, in welcher Zeit es ist? Zum Beispiel, wie man sicherstellen soll, damit der Experte Handelsaktionen während der Nachtsitzung nicht machen würde? Oder, wenn Sie in der Sektion des eiligen Marktes der Moskauer Börse handeln, ist es mal passiert, dass Sie alle Positionen vor dem Handelnschluss im Markt oder vor dem Wochenende geschlossen haben? Und was ist, wenn die Varianten noch komplizierte sind? Zum Beispiel, wie soll man es machen, damit Ihr Experte bis 19.00 Uhr Positionen schließen und öffnen konnte, und nach 19.00 Uhr keine neuen Trades nicht abschließen konnte? In der Tat kann man eine solche flexible Konfiguration erstellen. Ein spezielles Modul CTradeState hilft Ihnen dabei.

Wie funktioniert CTradeState? Das Modul gibt einen von sechs Handelsbedingungen zurück, die mit Hilfe ENUM_TRADE_STATE beschrieben wurden:

//+------------------------------------------------------------------+
//| Es definiert den Handeln-Zustand des Experten                           |
//+------------------------------------------------------------------+
enum ENUM_TRADE_STATE
{
   TRADE_BUY_AND_SELL,              // Kaufen und Verkaufen sind erlaubt.
   TRADE_BUY_ONLY,                  // Nur Kaufen sind erlaubt. Verkaufen sind nicht gestattet.
   TRADE_SELL_ONLY,                 // Nur Verkaufen sind erlaubt. Kaufen sind nicht gestattet.
   TRADE_STOP,                      // Handeln ist nicht gestattet. Sofort alle Positionen schließen. Neue Eingangssignale nicht annehmen.
   TRADE_WAIT,                      // Die Kontrolle über den geöffneten Positionen wird verloren. Neue Signale werden abgelehnt. Das ist nützlich bei Momenten, in den Neuigkeiten veröffentlicht werden.
   TRADE_NO_NEW_ENTRY               // Eingangssignale werden abgelehnt. Allerdings die offenen Positionen werden nach kommerzieller Logik begleitet. 
};

In seinem Experten müssen Sie den einen oder anderen Satz von Aktionen machen, je nachdem, welche Art vom Modifikator Ihnen CTradeState aus dieser Struktur zurückgibt (der Wert wird die Methode GetTradeState zurückgegeben).

Bevor Sie Handelsmodus verwenden, müssen sie feststellen, wofür Sie die Methode SetTradeState aufrufen müssen. Der Prototyp der Methode SetTradeState sieht folgendermaßen aus:

//+------------------------------------------------------------------+
//| Der setzt den Handelszustand TradeState                      |
//| INPUT:                                                           |
//| time_begin  - Die Uhrzeit, ab der der Handelszustand      |
//|               gilt.                                         |
//| time_end    - Die Uhrzeit, vor der der Handelszustand gilt    |
//| day_of_week - Der Tag in der Woche, an dem die Setzung des Handelszustands |
//|               durchgeführt werden kann. entspricht den Modifikatoren   |
//|               ENUM_DAY_OF_WEEK oder dem Modifikator ALL_DAYS_OF_WEEK |
//| state       - Handelszustands.                                |
//| Vorsicht, die Datumskomponente in time_begin und time_end werden abgelehnt.  |
//+------------------------------------------------------------------+
void CTradeState::SetTradeState(datetime time_begin,datetime time_end, int day_of_week, ENUM_TRADE_STATE state);

Zum Beispiel, damit das Modul des Handelszustands den Modifikator TRADE_WAIT (Die Kontrolle über den offenen Positionen wird unterbrochen, die neuen Positionen werden nicht geöffnet) zwischen 18.45 Uhr bis einschließlich 18.49 Uhr zurückgibt, muss SetTradeState mit den folgenden Parametern aufgerufen werden:

TradeState.SetTradeState(D'18:45', D'18:59', ALL_DAYS_OF_WEEK, TRADE_WAIT);

Sie können nicht nur den Zeitbeginn und das Ende des Handelsmodus eingeben, sondern auch den Tag der Woche, für den das Modus gilt. Wenn der gesetzte Modus für alle Tage der Woche eingegeben werden muss, müssen Sie den Modifikator ALL_DAYS_OF_WEEK verwenden. Wenn Sie das Handelsmodus nur für einen bestimmten Tag der Woche setzen wollen, wählen Sie einen Wert aus der System-Enumeration ENUM_DAY_OF_WEEK in der Variable day_of_week.

Um den aktuellen Handelsmodus zu erhalten, verwenden Sie die Methode GetTradeState.

Als Beispiel beschreiben wir eine Kombination aus Modus, die nützlich für das Handeln in der Sektion des eiligen Marktes der Moskauer Börse sein kann:

Zeit Modus Beschreibung
10:00 - 10:01 TRADE_WAIT Die Öffnungszeit des Marktes. Der Moment der Öffnung wird durch eine hohe Volatilität und starken Preissteigerungen geprägt. Die Handelsaktivitäten in diesen Momenten sind mit einem hohen Risiko verbunden, so dass ist es die ersten Minuten des Handels besser, auf das Handeln zu verzichten, weswegen man den Experten in diesem Moment lieber um das Wartungsmodus umstellen soll.
14:00 - 14:03 TRADE_WAIT Die Einführungszeit der Zwischen-Clearing. Während dieser Zeit funktioniert der Markt nicht, deshalb muss der Handelsexperte auch im Modus TRADE_WAIT gesetzt werden.
18:45 - 18:49 TRADE_WAIT Die Einführungszeit der Haupt-Clearing. In diesem Moment ist der Markt auch geschlossen und das Handeln ist nicht gestattet. Es gilt das Modus TRADE_WAIT.
23:50 - 9:59 TRADE_WAIT Der Markt ist geschlossen, das Handeln ist nicht gestattet. Das Modus des Experten TRADE_WAIT.
Freitag, von 15:00 TRADE_NO_NEW_ENTRY Freitag — der letzte Handelstag in der Woche. Um keine offenen Positionen am Wochenende zu lassen, müssen Sie sie am letzten Tag des Handels schließen. Deshalb macht es keinen Sinn, um neue Positionen am letzten Handelstag zu öffnen, wenn sie sowieso in ein paar Stunden wieder geschlossen werden müssen. Eben zu diesen Zwecken wird das Modus NO_NEW_ENTRY verwendet. Jeden Freitag, von 15:00 Uhr, werden neue Eingangssignale abgelehnt. Die geltenden Positionen können nur geschlossen werden.
Freitag, 23:40-23:50 TRADE_STOP Die Zeit, die vor der Schließung des Marktes auftritt. Zu dieser Zeit müssen alle Positionen geschlossen werden. Der Experte im Modus TRADE_STOP schließt seine offene Position um 23.40 Uhr und schaltet den Wartungsmodus.
Samstag, Sonntag TRADE_WAIT Am Wochenende wird keine Handeln durchgeführt. Wegen der Verschiebung einiger Feiertage an Samstagen können sie Arbeitstage werden. An diesen Tagen arbeitet man an der Börse. Dies passiert sehr selten, und diese "Arbeitstage" sollten aufgrund der geringen Volatilität und der statistischen Unsicherheit vermieden werden. Das Handeln an diesen Tagen muss verboten sein, unabhängig davon, ob es ein Arbeitstag ist oder nicht.

 

Anwendungsbeispiel. Diese Modus-Kombination wird durch die folgende Reihe von Anrufen SetTradeState definiert (zum Beispiel in Form eines Skripts):

//+------------------------------------------------------------------+
//|                                               TestTradeState.mq5 |
//|                                 Copyright 2015, Vasiliy Sokolov. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vasiliy Sokolov."
#property link      "http://www.mql5.com"
#property version   "1.00"
#include <Strategy\TradeState.mqh>

CTradeState TradeState(TRADE_BUY_AND_SELL);  // Standardmäßig setzen wir Buy And Sell
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TradeState.SetTradeState(D'15:00', D'23:39', FRIDAY, TRADE_NO_NEW_ENTRY);
   TradeState.SetTradeState(D'10:00', D'10:01', ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'14:00', D'14:03', ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'18:45', D'18:59', ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'23:50', D'23:59', ALL_DAYS_OF_WEEK, TRADE_STOP);
   TradeState.SetTradeState(D'0:00',  D'9:59',  ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(D'23:40', D'23:49', FRIDAY, TRADE_STOP);
   TradeState.SetTradeState(D'00:00', D'23:59', SATURDAY, TRADE_WAIT);
   TradeState.SetTradeState(D'00:00', D'23:59', SUNDAY, TRADE_WAIT);
   
   printf("10:00 - " + EnumToString(TradeState.GetTradeState(D'10:00')));
   printf("14:01 - " + EnumToString(TradeState.GetTradeState(D'14:01')));
   printf("18:50 - " + EnumToString(TradeState.GetTradeState(D'18:50')));
   printf("23:50 - " + EnumToString(TradeState.GetTradeState(D'23:51')));
   printf("Friday, > 15:00 - " + EnumToString(TradeState.GetTradeState(D'2015.11.27 15:00')));
   printf("Saturday - " + EnumToString(TradeState.GetTradeState(D'2015.11.28')));
   printf("Sunday - " + EnumToString(TradeState.GetTradeState(D'2015.11.29')));
   printf("Default State - " + EnumToString(TradeState.GetTradeState(D'11:40')));
}
//+------------------------------------------------------------------+

Als Überprüfung im gleichen Skript wird das Modus ausgedruckt, der entsprechend einer oder anderer Zeit gemacht wird.

Wichtig ist zu verstehen, dass das vorgeschlagene Modul nur ein Hilfsmittel ist. Selbst die Entscheidung über den Stop des Handelns (und die Schließung aller Positionen) muss der Experte selbst treffen. Allerdings mit der Hilfe dieses Moduls ist es genug, eine andere Zeitzone und Handelsmodus für einen oder anderen bestimmten Experten zu erstellen.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/14335

PA_Oscillator PA_Oscillator

Der einfache Oszillator, der die Änderungsgeschwindigkeit des Indikators MACD zeigt, die in Form eines zweifarbigen Histogramms gemacht wurde.

VolatilityQualitySign VolatilityQualitySign

Der Semaphore Signalindikator mit der Verwendung eines Algorithmus des Indikators VolatilityQuality.

PA_Oscillator_HTF PA_Oscillator_HTF

Der Indikator PA_Oscillator mit der Veränderungsmöglichkeit des Timeframes des Indikators in den Eingangsparametern.

LinearMomentum_HTF LinearMomentum_HTF

Der Indikator LinearMomentum mit der Veränderungsmöglichkeit des Timeframes des Indikators in den Eingangsparametern.