OnTradeTransaction-Verarbeitung - Seite 8

 
fxsaber:

Sehen Sie sich dieses Video ab 01:35 und 03:35 an.


Wozu brauche ich deine selbstgemachten Sachen? Sie verblüffen mich. Mit solchen Programmierkenntnissen können Sie den OnTradeTransaction-Handler nicht verstehen

 
Alexey Viktorov:

Wozu brauche ich deine selbstgemachten Sachen? Sie verblüffen mich. Mit solchen Programmierkenntnissen können Sie den OnTradeTransaction-Handler nicht verstehen

Es ist schwer, mit jemandem zu reden, der sich die Aufgabe nicht einmal vorstellen kann.

 
Alexey Viktorov:

Gibt es also keine Positionen, oder stehen sie in Anführungszeichen?

Es ist eine ganz normale Situation, wenn es im Sinne des Netting keine Position gibt (d.h. Gesamtposition == 0,0).

Und aus der Sicht von zwei EAs - jeder hat seine eigene offene Position.

Für ein einzelnes Symbol kann es mehr als einen Expert Advisor geben. Außerdem können einige Geschäfte von Hand gemacht werden.

 
JRandomTrader:

Es ist eine ganz normale Situation, wenn es im Sinne des Netting keine Position gibt (d.h. Gesamtposition == 0,0).

Und aus der Sicht von zwei Beratern - jeder hat seine eigene offene Position.

Für ein einzelnes Symbol kann es mehr als einen Expert Advisor geben. Außerdem können einige Geschäfte von Hand gemacht werden.

Die Frau nahm das Geld aus dem Nachttisch und kaufte einen Fernseher. Der Ehemann nahm den Fernseher, verkaufte ihn und legte das Geld in den Nachttisch. In Bezug auf das Netting gibt es kein Fernsehen. Und nach Ihrer Logik hat die Frau den Fernseher und das Geld im Nachttisch. Sie entscheiden also, ob sie einen neuen Fernseher kaufen oder das ganze Geld für Getränke ausgeben wollen.

Oder haben sie alle einen Fernseher? Schließlich hat sie jeder von ihnen in den Händen gehalten. Übertreiben.


Wenn ein Berater eine Position eröffnet und der andere sie schließt, ist sie weg... Vergessen Sie sie... Es gibt keine Position.

 
Alexey Viktorov:

Die Frau nahm das Geld aus dem Nachttisch und kaufte einen Fernseher. Der Ehemann nahm den Fernseher, verkaufte ihn und legte das Geld in den Nachttisch. In Bezug auf das Netting gibt es kein Fernsehen. Und nach Ihrer Logik hat die Frau den Fernseher und das Geld im Nachttisch. Sie entscheiden also, ob sie einen anderen Fernseher kaufen oder das Geld ausgeben wollen.

Oder hatte jeder von ihnen ein Fernsehgerät? Schließlich hat jeder von ihnen schon einmal eine in den Händen gehalten. Ich übertreibe.


Wenn ein Berater eine Position eröffnet und der andere sie schließt, ist sie weg... Vergessen Sie sie... Es gibt keine Position.

Es gibt keine Position.

Aber innerhalb seiner Logik vertritt jeder EA eine andere Position. Zum Beispiel wird der eine - "long term" - den Verlust aussitzen, während der andere - "scalper" - gleichzeitig auf den Gegentrend setzen wird.

 
JRandomTrader:

Es gibt keine Position.

Aber innerhalb der Grenzen ihrer Logik vertritt jeder EA seinen eigenen Standpunkt. Der eine - der "Langfristige" - wird zum Beispiel Verluste abwarten, und der andere - der "Scalper" - wird auf einen Gegentrend setzen.

Offensichtlich versuchen Sie, die Logik von zwei Hedge-Strategien auf das Netting anzuwenden. Die logischere Reihenfolge wäre wie folgt.

Ein Scalper, der auf einen Gegentrend setzt, schließt eine Position und setzt eine Limit-Order zum erwarteten TP-Preis für seine imaginäre Position. Und wenn dieser Endschalter funktioniert, wird die Position vollständig wiederhergestellt, ABER!!! mit einem anderen Ticket. Es ist also nicht ganz korrekt, sie als Fortsetzung dieser geschlossenen Position zu betrachten, und langfristig wird EA sie nicht als solche erkennen können.

Es ist eine andere Sache, ob der Scalper mit einem kleineren Volumen arbeitet. Dann bleibt das Ticket gleich, auch wenn sich der Eröffnungspreis ändert. Versuchen Sie generell nicht, die Strategie einfach auf das Netting für Hedges zu übertragen, da dabei nichts Gutes herauskommen wird. Die Analogie wird funktionieren, aber die Maßnahmen sollten anders sein. Die Besonderheiten des Netting sollten berücksichtigt werden.

 
Alexey Viktorov:

Offensichtlich versuchen Sie, die Logik von zwei Hedge-Strategien auf das Netting anzuwenden. Eine logischere Reihenfolge wäre wie folgt.

Ein Scalper, der auf einen Gegentrend setzt, wird die Position schließen und eine Limit-Order zum erwarteten TP-Preis für seine imaginäre Position setzen. Und wenn dieser Endschalter funktioniert, wird die Position vollständig wiederhergestellt, ABER!!! mit einem anderen Ticket. Es ist also nicht ganz korrekt, sie als Fortsetzung dieser geschlossenen Position zu betrachten, und langfristig wird EA sie nicht als solche erkennen können.

Etwas ganz anderes ist es, wenn der Scalper mit kleineren Werten arbeitet. Dann bleibt das Ticket zumindest gleich, auch wenn sich der Eröffnungspreis geändert hat. Versuchen Sie generell nicht, die Netting-Strategie einfach auf Hedging zu übertragen, das bringt nichts. Die Analogie wird funktionieren, aber die Maßnahmen sollten anders sein. Die Besonderheiten des Netting sollten berücksichtigt werden.

Dies ist nur ein Beispiel für den Scalper und den Long Riser, es kann viele EAs auf dem Symbol geben, und sie können unterschiedliche Lots haben.

"Der Scalper schließt eine Position in einem Gegentrend und setzt einen Limit-Stop auf den Preis des erwarteten TP für seine imaginäre Position. - Der Scalper geht jedoch selbst davon aus, dass er eine "imaginäre Position" hat.

Und die Tatsache, dass die Gesamtposition das Ticket geändert hat - also der langfristige Berater braucht es nicht, er weiß bereits, dass er seine eigene Position hat, die nicht mit der Gesamtposition zusammenhängt.

So arbeitet jeder Expert Advisor unabhängig davon, wer sonst noch mit ihm auf diesem Symbol arbeitet, nichts davon weiß oder nicht wissen will.

Und ja, ich versuche nicht, Strategien zur Absicherung zu übertragen, denn ich habe gleich mit MT5, FORTS und Netting angefangen. Ich wollte nur, dass mehrere Roboter auf dem Symbol handeln können und trotzdem in der Lage sind, Hände zu handeln, ohne sie zu stören.

 

JRandomTrader:

Aber für sich selbst glaubt der Verschwender, er habe eine "imaginäre Position".

Das ist es, was ich meine, man muss eine andere Logik für Netting aufbauen. Es sollte keine imaginären Positionen geben. Ich habe mich nur so ausgedrückt, weil ich kein anderes Wort finden konnte, damit Sie mich verstehen. Bei einer Glattstellung werden das Gesamtvolumen der Position und der neue Preis der offenen Position berücksichtigt, bei einer teilweisen Glattstellung dasselbe und der Preis und das Volumen werden berücksichtigt.

 
Alexey Viktorov:

Das ist es, was ich sagen will: Sie müssen eine andere Logik für das Netting entwickeln. Es sollte keine imaginären Positionen geben. Ich habe das nur gesagt, weil ich kein anderes Wort finden konnte, damit Sie mich verstehen. Bei einer Glattstellung werden das Gesamtvolumen der Position und der neue Eröffnungskurs berücksichtigt; bei einer teilweisen Glattstellung gilt dasselbe und es werden der Gesamtpreis und das Gesamtvolumen berücksichtigt.

Dann müssen wir eine gewisse Interaktion zwischen den Robotern herstellen und die Handlungen der "Nachbarn" berücksichtigen, die heute dieselben sind und morgen vielleicht anders aussehen. Und es ist unklar, welche Vorteile dies bringen wird.

Der Algorithmus des Roboters benötigt eine imaginäre Position: Wenn er sie geöffnet hat, sollte er sie schließen.

 
JRandomTrader:

Dann muss ich eine Art von Interaktion zwischen den Robotern schaffen und "Nachbarn" berücksichtigen, die heute einer sind und morgen vielleicht ein anderer. Und es ist unklar, welche Vorteile dies bringen wird.

Der Algorithmus des Roboters benötigt eine imaginäre Position: Wenn er sie geöffnet hat, sollte er sie auch schließen.

Um die Dinge zu vereinfachen, ja. Ich stimme zu.

Dann hat der "Verkehrsleiter" das Problem und seine Maßnahmen nicht vollständig dargelegt.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

OnTradeTransaction-Verarbeitung

Ilja Kind, 2019.02.07 20:08

Guten Abend.

Leute, bitte helft mir, das zu klären. Das Problem ist wahrscheinlich nicht neu, aber ich habe keine eindeutige Lösung gefunden (weder in der Praxis noch in Foren).

Ich lasse 2 verschiedene Roboter im Terminal auf 2 verschiedenen Instrumenten laufen. Die Magie ist überall anders. Der Roboter setzt Pending-Limits und die Prozedur OnTradeTransaction erlaubt es mir, eine Transaktion zu erkennen und Pending-Stop-Orders mit dieser Transaktion zu platzieren.

Nachfolgend finden Sie den Code für das Handelsgeschäft

case TRADE_TRANSACTION_DEAL_ADD:
        {
         drop_info2("TRADE_TRANSACTION_DEAL_ADD\r\n"+TransactionDescription(trans));
         if((trans.deal_type==DEAL_TYPE_BUY || trans.deal_type==DEAL_TYPE_SELL) && trans.order!=0)
           {
            if(getIsDealOfExpert(trans.deal)) //функция проверки принадлежности сделки к роботу
              {
               drop_info2("Сделка наша");
               analyzeFilledOrder(trans.order,trans.volume); //процедура по выставлению отложенных стоп ордеров
              }
           }
        }
      break;

Dies ist der Code der Funktion, die prüft, ob das Geschäft zu einem Roboter gehört

bool getIsDealOfExpert(ulong dealTicket)
     {
      if(HistoryDealSelect(dealTicket) && HistoryDealGetInteger(dealTicket,DEAL_MAGIC)==magic_number && HistoryDealGetString(dealTicket,DEAL_SYMBOL)==symbol)
         return true;
      else
         return false;
     }

Dies ist der Code des Verfahrens für schwebende Stop-Aufträge

void analyzeFilledOrder(ulong orderTicket,double volume)
  {
   bool isFindOrder=false;
   string fullComment;
   ENUM_ORDER_TYPE orderType;
   if(getIsOrderOfExpert(orderTicket,true)) //Если ордер из сделки уже в истории
     {
      fullComment=HistoryOrderGetString(orderTicket,ORDER_COMMENT);
      orderType=ENUM_ORDER_TYPE(HistoryOrderGetInteger(orderTicket,ORDER_TYPE));
      isFindOrder=true; //локальная переменная, если нашли в истории
     }
   if(!isFindOrder && getIsOrderOfExpert(orderTicket,false)) //Если не нашли ордер в истории и ордер есть не в истории
     {
      fullComment=OrderGetString(ORDER_COMMENT); 
      orderType=ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE));
      isFindOrder=true; //локальная переменная, если нашли не в истории
     }
   if(isFindOrder) //если хоть где-то нашли, то выставляем отложенные стоп ордера
     {
     //выставляем стоп ордера

Dies ist der Code der Funktion für die Suche nach dem Auftrag in der Historie und aus der Historie

bool getIsOrderOfExpert(ulong OrderTicket,bool isHistory)
     {
      bool is_expert=false;
      //если ордер находится в истории
      if(isHistory)
        {
         if(HistoryOrderSelect(OrderTicket) && HistoryOrderGetInteger(OrderTicket,ORDER_MAGIC)==magic_number && HistoryOrderGetString(OrderTicket,ORDER_SYMBOL)==symbol)
            is_expert=true;
        }
      else
        {
         if(OrderSelect(OrderTicket) && OrderGetInteger(ORDER_MAGIC)==magic_number && OrderGetString(ORDER_SYMBOL)==symbol)
            is_expert=true;
        }
      return is_expert;
     }

Ich trage die Informationen über die eingehenden Transaktionen in der Reihenfolge ihres Eingangs im Terminal in das Protokoll ein. Jetzt habe ich ein Problem, das ich beim Handel mit einem Demokonto hatte:

Manchmal kommen Transaktionen in der folgenden Reihenfolge: TRADE_TRANSACTION_ORDER_DELETE, dann TRADE_TRANSACTION_DEAL_ADD, dann TRADE_TRANSACTION_HISTORY_ADD. In diesem Fall werden Stop-Aufträge häufig nicht nach der Ausführung eines Geschäfts erteilt. Ich vermute, dass dies daran liegt, dass der Auftrag bereits gelöscht wurde, aber noch nicht in die Historie aufgenommen wurde. Das bedeutet, dass wir die Bestellung aus dem Geschäft weder in der Historie noch im Terminal finden können. Es ist zwar zweifelhaft, aber Tatsache ist, dass keine Stop-Order platziert wird, weil der Roboter sie nicht findet, nachdem er in allen Dimensionen nach der Order gesucht hat(isFindOrder=false). Die Reihenfolge der Transaktionen kann korrekt sein, aber der Auftrag ist trotzdem nicht zu finden. In allen Fällen erkennt der Roboter die Transaktion korrekt, kommt aber nicht dazu, Aufträge zu erteilen. Esgibt aber auch Fälle, in denen er korrekt arbeitet und Aufträge erteilt werden.

Ich habe verschiedene Ansätze ausprobiert, nichts funktioniert. Ich denke nun daran, zu Beginn der anstehenden Auftragserteilung ein 1-Sekunden-Intervall einzufügen. Ich weiß nicht, wo ich sonst noch graben soll.

Bitte teilen Sie uns Ihre Erfahrungen und Ideen mit.

Was bedeuten Stoppaufträge? Für die gesamte Position oder nur für den Teil, mit dem dieser Expert Advisor arbeitet?
Grund der Beschwerde: