Wie man die Signale mit Hilfe vom Berater nach seinen Regeln kopieren soll?

Vladimir Karputov | 1 August, 2016

Inhaltsverzeichnis

 

Risikohinweis

Bevor Sie diese Methode verwenden, müssen Sie sich in erster Linie auf den gesunden Menschenverstand verlassen, da die Erhöhung des Verhältnisses des Kopierens die Erhöhung von Risiken bringt.

Beim aktiven Kopieren, überprüft das System periodisch, ob Positionen noch mit den Positionen des Anbieters übereinstimmen. Wenn eine Abweichung festgestellt wird, z.B. Order auf Anbieter-Konto geschlossen, wird das System die Abweichung versuchen zu beseitigen, bspw. Order auf Abonnement-Konto schließen. Im Gegensatz zur initialen Synchronisierung, wird der schwebende Profit in diesem Fall nicht überprüft. Sobald das Kopieren gestartet wurde, sollte der Handelsstrategie des Anbieters komplett gefolgt werden. Es ist nicht möglich oder sinnvoll nur einige Trades zu kopieren und andere zu ignorieren.

Wenn das System manuell erstellte Orders feststellt, bietet es an diese zu schließen oder schließt diese automatisch, wenn die Funktion "Synchronisierung ohne Bestätigung" aktiviert ist.

Die Methode der Erhöhung des Verhältnisses des Signal-Kopierens kann verwenden, wenn der Anbieter mit minimalen Lot handelt, in den Einstellungen bei Ihnen die Last auf Deposit in Höhe von 95% ist (dh die maximale Ausnutzung der Deposite), und dabei das Verhältnis des Kopierens ist noch zu klein, um ein Abonnement sinnvoll zu verwenden. Im Voraus das Verhältnis des Kopierens beim Abonnieren zu einem Signal zu erfahren, können Sie mit Hilfe des Artikels Signalrechner

Der präsentierte in diesem Artikel EA zum Kopieren der Trading-Signale kann kostenlos aus dem Markt heruntergeladen werden:


1. Vorbereitung

Bevor Sie beginnen, schauen Sie bitte die Tutorial-Videos an:

  1. Auswahl eines Handelssignals
  2. Abonnement zum Signal
  3. Die Miete einer virtuellen Hosting
  4. Die Migration des Abonnements und des Beraters in die virtuelle Hosting


1.1. Die Idee des Kopierers

Der Kopierer läuft auf einer virtuellen Hosting, auf einem Handelskonto, das auf das Signal abonniert ist. Seine Hauptaufgabe - ist es, die Position zu erhöhen, welche die Service "Signale" für angegebenen Mal öffnet. in Abb. 1 zeigt die Idee vom Kopierer, der zu dem Hedge-Konto verbunden ist:


in Abb. 1. Die Idee des Kopierers auf dem Hedge-Konto

in Abb. 2 zeigt die Arbeitsidee des Kopierers auf einem Handelskonto mit nettinger Berechnung der Positionen:

 

in Abb. 2 Die Idee des Kopierers am Netting-Konto 

Also, sobald der Service "Signale" erfolgreich eine Transaktion auf dem Konto des Teilnehmers schließt, der Kopierer schließt sofort eine Transaktion, deren Volumen nach der folgenden Formel bestimmt wird:

(Der Volumen der Transaktion, die vom Service "Signale" geschlossen wurde ) * "Deal multiply by"

Der Parameter "Deal multiply by" ist dafür verantwortlich, wie viel Mal es notwendig ist, die Transaktion zu erhöhen. Das wird in den Eingangsparameter eingestellt:

inputs

in Abb. 3. Eingangsparameter 

Bei der Arbeit auf dem Netting-Trading-Konto in MetaTrader 5 führen die Aktionen vom Kopierer zu einer Erhöhung des Volumens der kopierten Position. Auf dem Hedge-Trading-Konto in MetaTrader 5 führen die Aktionen vom Kopierer zur Eröffnung einer neuen Position mit erhörten Volumen. Im Folgenden wird ein Beispiel der Arbeit vom Kopierer für die Netting und Hedge-Konten in MetaTrader 5 bei ausgewähltem Parameter der Transaktionen-Erhöhung "Deal multiply by" dargestellt, das gleich ist:

Service-Aktionen "Signale" Die Aktionen vom Kopierer
auf dem Hedge-Konto
Die Aktionen vom Kopierer
auf Netting-Konto
Die Transaktion BUY EURUSD 0,01 Lot ist kopiert Geöffnet ist eine neue Position BUY EURUSD 0,05 Lot - also Teilnehmer hat zwei Positionen  BUY EURUSD 0,01 Lot und BUY EURUSD 0,06 Geöffnet ist Trade BUY EURUSD 0,05 Lot - und damit die Position des Teilnehmers BUY EURUSD 0,06 Lot

 

2. Service-Funktionen "Signale"

2.1. Native - Fremder

Da der Kopierer den Überblick über alle Transaktionen hält, die der Service "Signale" trägt, dann müssen Sie einige der Funktionen des Dienstes "Signale" kennen. Zum Beispiel begleitet dieser Service nur "ihre" Positionen - jene, die durch den Service kopiert wurden.

Der Service "Signale", bei der erfolgreichen Eröffnung einer Position beim Teilnehmer, schreibt in Kommentaren zu der Transaktion den Namen des Signals, der kopiert wurde, und in Magic Number der Transaktion - wird der eindeutige Identifikator geschrieben.

Anschließend wird, bei weiteren synchronisierten Abonnements, durch diesen Identifikator die Anerkennung der Transaktion durchgeführt, der durch den Service "Signale" geöffnet ist.

So wird der Kommentar für die Transaktion BUY 0,01 EURUSD aussehen, der vom Signal "Test3443431" kopiert wurde, wenn Sie mit der Maus die kopierte Transaktion in der "History" im Fenster "Extras" auswählen:

 

in Abb. 4. Kommentaren der kopierten Transaktion (im Titel "History")

Hier ist im Bild:

  1. "#69801797" — das Ticket der Transaktion;
  2. "Test3443431" — der Signal-Name, von dem diese Transaktion kopiert wurde;
  3. "361104976048745684" — Magic Number — Der Identifikator der Transaktion.

Im Titel "Handel" ist es sichtbar, dass die aktuelle Position des Teilnehmers die gleiche Beschreibung hat, aber ohne Ticket:


in Abb. 5. Kommentaren der kopierten Transaktion (Im Titel "Handel")

Mit anderen Worten, hält der Service "Signale" die Berechnung der Positionen auf der Seite des Teilnehmers durch das Feld Magic Number der Transaktion. Die berechneten Positionen werden als "seine" identifiziert. Und nur auf "seine" Positionen kann der Service "Signale" solche Handelsaktivitäten durchführen: den Volumen der Position ändern oder die Position schließen.

Die unberechneten Positionen werden als "fremde" identifiziert. Oberhalb dieser Positionen hat Service "Signale" keine Macht.

2.2. Soll man die Magic Number ersetzen, oder nicht?

Das Terminal MetaTrader 5 kann das sowohl das Hedge auch Netting-Trading-Konto des Teilnehmers anschließen. Je nach der Art des angeschlossenen Kontos wird das Verhalten der Kopierers bezüglich der Magic Number bei dem kopierten Elemente radikal anders sein. Um diese Frage zu beantworten, lassen Sie uns die folgende Abbildung betrachten:


in Abb. 6. Das Netting Konto, ohne Ersetzung der Magic Number 

Wie man auf dem Netting-Konto sieht, erhöht der Kopierer die Position, ohne Ersetzung der Magic Number - dies hat dazu geführt, dass die Position "fremd" für den Service "Signale" geworden ist. Das heißt,  die Arbeit des Kopierers am Netting-Konto ohne Ersetzung der Magic Number - ist ein Fehler. Also, aum Netting-Konto sollte der Kopierer mit zunehmender Position immer die Magic Number ersetzen. Und zugleich am Hedge-Konto ist das im Gegenteil: Mit der Erhöhung der Position sollten Sie Ihre Magic Number einsetzen.

2.3. Was wird mit der "fremden" Position passieren, wenn der Anbieter die Position geschlossen hat?

Am Beispiel eines Hedge-Kontos: zum Trading-Konto des Teilnehmers wurde die Position BUY 0,01 EURUSD kopiert. Dann hat der Teilnehmer sich entschieden, die Arbeit des Service zu ändern, und hat die Position BUY 0,01 EURUSD geöffnet. Während einer der nächsten Synchronisation hat "Signale" diesen Fehler gegeben:

Signal  '3447880': local positions do not correspond to signal provider [#85639429 buy 0.04 EURUSD 1.11697]

Das heißt, die Position  BUY 0,01 EURUSD, die der Teilnehmer manuell geöffnet hat, wurde vom "Signale" als "fremd" eingeschätzt. Nun wollen wir sehen, was passiert ist, wenn der Anbieter Ihre Position schließen wird: Das Service "Signale" schließt auch "seine" Position, aber die manuell geöffnete Position BUY 0.01 EURUSD  bleibt im Terminal. Übrigens über die Unzulässigkeit vom manuellen Eingriff in die Arbeit der Service "Signale" ist klar in den Regeln angegeben:

IV. Abonnement zu Signalen

   20. Die Durchführung der eigenen Handelsoperationen auf dem Konto, die zum Signal abonniert sind, ist es ein Eingriff und kann zu unvorhersehbaren Folgen führen.


3. Wie man die Erscheinung eines Trades identifizieren soll

Die Wahl der Entstehungsmethode der Transaktion hat auf einer Seite die Auswirkung auf die Reaktion des Kopierens, und auf der anderen Seite kann zu zusätzlichen finanziellen Belastungen für die Zahlung bei der Eröffnung der fehlerhaften Transaktion mit dem erhöhten Volumen führen.

Wir dürfen nicht vergessen, dass wir auf das Signal abonniert sind, was bedeutet, dass es über Ereignisse im Signalanbieter der Service "Signale" überwacht. Falls es erforderlich ist, wird dieser Service die Position / Positionen öffnen oder schließen. Jede Öffnung / Schließung einer Position / Positionen verursacht eine Änderung am Trading-Konto des Teilnehmers. Eben diese Änderung werden wir verfolgen und uns darüber informieren, wird  OnTradeTransaction().

3.1. Verfolgen durch OnTradeTransaction()

Warum haben wir OnTradeTransaction() ausgewählt, statt OnTrade()? Weil OnTradeTransaction() eine sehr nützliche Information über die Art der Handelstransaktion trägt. Von allen möglichen Arten der Transaktionen interessiert uns nur eine:

TRADE_TRANSACTION_DEAL_ADD — Das Hinzufügen der Transaktion zur History. Das wird als Ergebnis der Ausführung der Order oder Operationen mit dem Kontostand.

Das heißt, wartet der Kopierer auf den Moment, wenn die Transaktion zur History hinzugefügt wird,(und es ist eine Garantie für eine erfolgreiche Transaktion auf dem Teilnehmerkonto), und erst dann beginnt es die Situation zu verarbeiten. 


4. Wenn ein Abonnement möglich ist, und wenn nicht

Ein Abonnement kann nur erfolgreich sein, wenn beide Kontos das gleiche Berechnungssystem haben:

Abonnement Ergebnis
Provider - die Netting Berechnung, der Teilnehmer - die Hedge Berechnung

Der Versuch, den Service-Provider mit dem Netting-System der Berechnung auf dem Handelskonto mit dem Hedge-System der Berechnung zu abonnieren, wird gescheitert. 

2016.05.11 11:15:07.086 Signal  '*******': subscribe to signal [*****] started
2016.05.11 11:15:07.141 Signal  '*******': subscription/renewal prohibited

Wenn Provider ein Netting-Konto hat und der Teilnehmer ein Hedge-Konto, abonnieren zum Signal kann man nicht.

Provider - die Hedge Berechnung, der Teilnehmer 1 die Netting Berechnung

Der Versuch, den Service-Provider mit dem Hedge-System der Berechnung auf dem Handelskonto mit dem Netting-System der Berechnung zu abonnieren, wird gescheitert. 

2016.05.11 11:39:54.506 Signal  '*******': subscribe to signal [******] started
2016.05.11 11:39:54.560 Signal  '*******': subscription/renewal prohibited

Wenn Provider ein Hedge-Konto hat und der Teilnehmer ein Netting-Konto, abonnieren zum Signal kann man nicht.

Provider - die Hedge Berechnung, der Teilnehmer - die Hedge Berechnung Abonnement ist erfolgreich. 
Provider - die Netting Berechnung, der Teilnehmer - die Netting Berechnung Abonnement ist erfolgreich. 

5. Speichern wir Informationen über das Kopieren

Wo kann man besser die Informationen über das Kopieren speichern? Und eine globale Frage - es ist notwendig, diese Informationen zu speichern? In dieser Version des Kopierens habe ich entschieden, die Informationen darüber in der Struktur zu speichern. Die Struktur des Deklarieren:

//+------------------------------------------------------------------+
//| Structure of congruences of positions of the terminal and        |
//| positions of the copier                                          |
//+------------------------------------------------------------------+
struct correlation
  {
   long              POSITION_IDENTIFIER_terminal; // Position identifier (terminal)
   //+------------------------------------------------------------------+
   //| Position identifier is a unique number that is assigned          |
   //| to every newly opened position and doesn't change during         |
   //| the entire lifetime of the position.                             |
   //| Position turnover doesn't change its identifier.                 |
   //+------------------------------------------------------------------+
   double            POSITION_VOLUME_terminal;     // Volume of the position opened by the Signals service
   long              POSITION_IDENTIFIER_copier;   // Position identifier (copier)
   //+------------------------------------------------------------------+
   //| Position identifier is a unique number that is assigned          |
   //| to every newly opened position and doesn't change during         |
   //| the entire lifetime of the position.                             |
   //| Position turnover doesn't change its identifier.                 |
   //+------------------------------------------------------------------+
   ulong             DEAL_ticket;                  // Deal ticket, if the deal is executed.
  };

Die Struktur aller vier Elemente:  

  1. "POSITION_IDENTIFIER_terminal" — in diesem Element wird der Identifikator der Position gespeichert, die das Terminal (Service "Signale") eröffnet hat
  2. "POSITION_VOLUME_terminal" —  hier wird der Volumen der Position gespeichert, die das Terminal (Service "Signale") eröffnet hat
  3. "POSITION_IDENTIFIER_copier" — in diesem Element wird der Identifikator der Position gespeichert, die der Kopierer eröffnet hat
  4. "DEAL_ticket" — hier wird das Ticket der Transaktion geschrieben, das der Kopierer eröffnet hat, wenn die Transaktion erfolgreich beendet ist

Alle Aktionen führt der Kopierer nur aus der Funktion OnTradeTransaction durch, und nur dann, wenn die Art der Handelstransaktion TRADE_TRANSACTION_DEAL_ADD ist. Unter diesen Bedingungen, suchen wir immer einen Trade, der diese Transaktion gab, und erhalten seine Parameter:

//+------------------------------------------------------------------+ 
//| TradeTransaction function                                        | 
//+------------------------------------------------------------------+ 
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      double   deal_volume       =0;
      string   deal_symbol       ="";
      long     deal_type         =0;
      long     deal_magic        =0;
      long     deal_positions_id =0;
      string   deal_comment      ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_volume=HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_positions_id=HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);
         deal_comment=HistoryDealGetString(trans.deal,DEAL_COMMENT);
         //if(deal_magic==0 && SignalInfoGetString(SIGNAL_INFO_NAME)!=HistoryDealGetString(trans.deal,DEAL_COMMENT))
         //   return;
        }
      else
         return;
...

Die folgende Tabelle zeigt die Logik der Arbeit des Kopierers auf einem Netting-Konto und auf einem Hedge-Konto:

Die Markierung  bedeutet, dass es in diesem Strukturelement einen Eintrag gemacht wurde

Die Markierung  bedeutet, dass der Kopierer die Änderungen an Elementen der Struktur nicht gemacht hat

Terminal POSITION_IDENTIFIER terminal POSITION_VOLUME terminal POSITION_IDENTIFIER copier deal_ticket
Hedge. Netting. DEAL_ENTRY_IN
Die Suche nach dem Strukturelement  deal_ticket der Wert trans.deal.
Wenn es keine Übereinstimmung gibt: Erhöhen die Struktur auf 1 ... 0 0 0 0
... und wir finden es als Trade des Service — deshalb öffnen wir die Position (DEAL_VOLUME * das Verhältnis), und wennCTrade.ResultDeal() != 0 ist, dann schreiben wir ins Element POSITION_IDENTIFIER_terminal den WertDEAL_POSITION_ID, den Wert CTrade.ResultDeal() schreiben wir ins Element deal_ticket, und deal_volume — in POSITION_VOLUME_terminal. 0
Wenn wir es finden – bedeutet es, diese Trade, die ist vom Kopierer geöffnet, deshalb schreiben wir es DEAL_POSITOIN_ID ins Element POSITION_IDENTIFIER_copier.

Hedge. Netting. DEAL_ENTRY_OUT
Die Suche DEAL_POSITION_ID in Strukturelementen POSITION_IDENTIFIER_terminal и POSITION_IDENTIFIER_copier
Hedge.
... gefunden DEAL_POSITION_ID...
... ... in Elementen POSITION_IDENTIFIER_copier – machen wir nichts und verlasen es  ✔  ✔  ✔  ✔
... ... in Elementen POSITION_IDENTIFIER_terminal –...  ✔  ✔  ✔  ✔
... ... ... Gibt es diese Position? Wenn es gibt, dann schließen wir diese Position, die vom Kopierer geöffnet ist...  ✔  ✔  ✔  ✔
... ... ... ... öffnen wir die Position (Der Volumen der gefundenen Position * Verhältnis) und wenn es CTrade.ResultDeal() != 0 ist, dann schreiben wir den Wert CTrade.ResultDeal() ins Element deal_ticket.  ✔  ✔  ✔  ✔
... ... ... nicht, es gibt schon diese Position. Schließen wir die Position, die vom Kopierer geöffnet ist.  ✔  ✔  ✔  ✔
Netting.
... gefunden DEAL_POSITION_ID...
... ... im Element POSITION_IDENTIFIER_terminal – (in der Struktur in diesem Moment, bleibt der alte Volumen, der von "Signalen" geöffnet ist) berechnen wir den neuen Volumen und wenn es CTrade.ResultDeal() != 0 ist, dann schreiben wir den Wert CTrade.ResultDeal() ins Element deal_ticket.  ✔  ✔  ✔  ✔

Fazit

Wenn Sie zu einem Trading-Signal abonniert sind, mieteten ein eingebautes virtuelles Hosting, aber der Anbieter verkauft ein minimales (oder sehr kleines) Lot - Sie können ans virtuelles Hosting den Kopierer senden, der in diesem Artikel beschrieben wurde, und somit werden alle Transaktionen im Verhältnis zu den Einstellungen des Kopierers erhöhen.

Warnung: Die Datei des Kopierers "copier.mq5" und die Include-Datei "languages.mqh" müssen im gleichen Ordner sein.