Diskussion zum Artikel "Erstellen eines Market-Making-Algorithmus in MQL5"

 

Neuer Artikel Erstellen eines Market-Making-Algorithmus in MQL5 :

Wie arbeiten die Market Maker? Betrachten wir dieses Problem und erstellen wir einen primitiven Market-Making-Algorithmus.

Viele Menschen denken, dass ein Market Maker überhaupt keine Risiken trägt. Dies ist jedoch nicht der Fall. Das Hauptrisiko eines Market Makers ist das Bestandsrisiko. Dieses Risiko besteht darin, dass sich eine Position stark in eine Richtung bewegen kann, ohne dass die Möglichkeit besteht, sie zu verkaufen und mit dem Spread Geld zu verdienen. Wenn zum Beispiel eine rasende Menge einen Vermögenswert verkauft, ist der Market Maker gezwungen, das gesamte Angebot aufzukaufen. Infolgedessen geht der Kurs ins Minus und treibt den MM in die Verlustzone. 

Die Unternehmen versuchen, dieses Risiko zu vermeiden, indem sie spezielle Gleichungen zur Zentrierung der Spreads verwenden und den optimalen Preis für den An- und Verkauf ermitteln. Dies ist jedoch nicht immer möglich. Selbst wenn der Preis nicht optimal ist, ist es die Aufgabe der MM, den Markt mit Liquidität zu versorgen, und diese Aufgabe müssen sie erfüllen, auch wenn sie vorübergehend mit Verlust arbeiten. 

Autor: Yevgeniy Koshtenko

 

Vielen Dank, Eugene, für diesen Artikel! Viele Lücken in meinem Wissen über den Währungsmarkt sind fast vollständig gefüllt.

Es gibt nur eine einzige Nuance: Einige Leser Ihres Artikels können den Expert Advisor im Strategietesternicht starten, wenn das zu testende Währungspaar ein Suffix oder Präfix hat. Sie sollten dies berücksichtigen und in den Einstellungen der Expert Advisor-Parameter angeben.

Aber so - alles ist SUPER!!!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Vielen Dank, Eugene, für diesen Artikel! Viele Lücken im Puzzle meines Wissens über den Devisenmarkt haben sich fast vollständig gefüllt.

Es gibt nur eine einzige Nuance: Einige Leser Ihres Artikels können den Expert Advisor im Strategietesternicht starten, wenn das zu testende Währungspaar ein Suffix oder Präfix hat. Sie sollten dies berücksichtigen und es in den Einstellungen der Expert Advisor-Parameter angeben.

Ansonsten - alles SUPER!!!

Mit freundlichen Grüßen, Vladimir.

Herzlichen Dank! Ich werde morgen mit Präfixen bei einem anderen Broker prüfen. Wenn etwas, werde ich einen Zusatz machen)

 

Eugene, gestern habe ich mir den Code des Expert Advisors nicht genau angesehen, da ich mich mehr für den Textteil des Artikels interessiert habe, daher habe ich keine Frage zu dem gelb markierten Teil des Codes gestellt:

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountOrders(string symb,ENUM_ORDER_TYPE type)
  {
   int count=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(OrderGetTicket(i)))
        {
         if(OrderGetInteger(ORDER_TYPE)==type && PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
            count++;
        }
     }
   return(count);
  }

Ich habe Ihre Warnung sofort beachtet: Hier sind die Funktionen zum Zählen von offenen Aufträgen und offenen Positionen. CountOrders und CountTrades befassen sich mit dem Zählen von offenen Aufträgen und Positionen für ein bestimmtes Symbol unter Berücksichtigung der magischen EA-Nummer. Sie werden im Code noch nicht verwendet, aber sie werden in zukünftigen Versionen verwendet werden, wenn ich endlich eine normale Funktion zum Zentrieren des Spreads zwischen den Limits schreibe....

Aber ich verstehe nicht ganz - war das Ihre Idee oder sollte es anders sein?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin offenen Positionen. CountOrders und CountTrades befassen sich mit dem Zählen von offenen Aufträgen und Positionen für ein bestimmtes Symbol unter Berücksichtigung der magischen EA-Nummer. Sie werden im Code noch nicht verwendet, aber sie werden in zukünftigen Versionen verwendet werden, wenn ich endlich eine normale Funktion zur Zentrierung des Spreads zwischen den Limits schreibe....

Aber ich verstehe das nicht ganz - war das Ihre Idee oder sollte es anders sein?

Mit freundlichen Grüßen, Vladimir.

Es war beabsichtigt - sonst kann der Expert Advisor anfangen, die Aufträge seines Magiers mit anderen zu verwechseln) Symb soll in Zukunft eine Mehrwährungsversion des Expert Advisors machen. Ich habe es noch nicht geschafft, es zu machen)))))

 
Yevgeniy Koshtenko #:

Es ist beabsichtigt - denn sonst kann der EA anfangen, die Aufträge seines Zauberers mit anderen zu verwechseln) Durch symb ist es beabsichtigt, eine Mehrwährungsversion des EA in der Zukunft zu machen. Ich habe noch nicht in der Lage gewesen, es zu machen)))))

Bei Orders ist alles klar, aber warum werden in dieser Funktion Symbol- und Magierpositionen geprüft? ))

Mit freundlichen Grüßen, Vladimir.

 

Dies ist eine Schande für MQ, kein Artikel. Wie kann es sein, dass so etwas veröffentlicht werden darf?

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int CountTrades(string symb)
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb && PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            count++;
           }
        }
     }
   return(count);
  }

PositionGetTicket(i) gibt laut Dokumentation"die Funktion ein Ticket einer Position nach Index in der Liste der offenen Positionen zurück und wählt diese Position automatisch für die weitere Arbeit mit ihr aus...". Und warum sollte man mit der Funktion PositionSelectByTicket eine Position nach ihrem Ticket auswählen, wenn sie bereits ausgewählt ist? Bringen Sie Neueinsteigern bei, wie man es nicht macht?

Die Bemerkung von Vladimir ist durchaus fair. Und Ihre Antwort hat damit überhaupt nichts zu tun... Warum das Symbol und die POSITION-Magie prüfen, wenn wir mit der Funktion order???? arbeiten?

 

Abgesehen vom Code hat mir auch der Textteil nicht gefallen.

Das ist Blödsinn, das ist nichts weiter als ein Stück Papier.

Es ist ein interessantes Thema, kein Argument.

Was für einen Markt schaffen wir da, was soll das bringen?

Die Tatsache, dass es nicht möglich war, sie zu schaffen, ist eine Tatsache, denn dem Autor fehlte die Matrix.

Und davon gibt es eine Menge da draußen.

Man muss mindestens noch ... zehn Jahre darüber nachdenken, vielleicht schaffen wir es dann.

als ein Anfang und als ein Weg zur Verbesserung - ok, darin unterstütze ich.

 

Renat Akhtyamov #:

Was für eine Art von Market-Making schaffen wir da, was ist der Sinn?

Dass es nicht möglich war, es zu schaffen, ist eine Tatsache, denn dem Autor fehlte die notwendige Matrix

Sie sollten denArtikel nicht schräg lesen, sondern vom Anfang bis zum Ende, also vollständig, dann werden sich solche Fragen nicht stellen.

Der Kritik von Alexey Viktorov an der Verwendung der FunktionPositionSelectByTicket(), wenn ein Ticket bereits ohne diese Funktion ausgewählt wurde, stimme ichvoll zu. Übrigens habe ich selbst nicht darauf geachtet.

Aber trotzdem vielen Dank für den Artikel!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

DerArtikel sollte nicht diagonal, sondern von Anfang bis Ende, d.h. vollständig gelesen werden, dann stellen sich solche Fragen nicht.

Der Kritik von Alexey Viktorov an der Verwendung der Funktion PositionSelectByTicket () , wenn ein Ticket bereits ohne diese Funktion ausgewählt wurde, stimme ich voll zu. Übrigens habe ich selbst nicht darauf geachtet.

Aber trotzdem vielen Dank für den Artikel!

Mit freundlichen Grüßen, Vladimir.

Es wird nicht ein Ticket ausgewählt, sondern eine Position, um mit deren Eigenschaften mittels entsprechender Funktionen zu arbeiten.

 
Alexey Viktorov #:

Es wird nicht ein Ticket ausgewählt, sondern eine Position, um mit deren Eigenschaften über die entsprechenden Funktionen zu arbeiten.

Hallo Alexej, danke für die Klarstellung. )) Als ich meine Nachricht geschrieben habe, habe ich mich auf die gleiche Dokumentation gestützt (gelb markiert):

Функция возвращает тикет позиции по индексу в списке открытых позиций и автоматически выбирает эту позицию для дальнейшей работы с ней 
при помощи функций PositionGetDouble, PositionGetInteger, PositionGetString.

ulong  PositionGetTicket(
   int  index      // Nummer in der Liste der Einträge
   );

Параметры

index

[in]  Индекс позиции в списке открытых позиций, начиная с 0.

Возвращаемое значение

Тикет позиции. В случае неудачного выполнения возвращает 0.

Mit freundlichen Grüßen, Vladimir.