Diskussion zum Artikel "Die Transaktionen des Handels Anfrage- und Antwortstrukturen, Beschreibung und Protokollierung" - Seite 8

 
MrBrooklin #:

Wie hat dieser Event-Handler also nach einem Handelstag eine offene Position gefunden?

Mit freundlichen Grüßen, Vladimir.

Wunder gibt es nicht. Du hast die Logik gemacht. Du solltest sehen, warum ... Wonach hast du im Handler gesucht, als er ausgelöst wurde? Wie hast du gesucht ... Und was genau hat es ausgelöst.

Es gibt ein Ereignis - der Handler signalisiert. In ihm müssen Sie diese Ereignisse filtern ...

Aber im Allgemeinen habe ich mich nicht auf diese Handler verlassen. Ich kontrollierte den Unterschied zwischen dem vergangenen und dem aktuellen Zustand. Und darauf basierend. Ich traf Entscheidungen darüber, was zu tun ist.

 
Artyom Trishkin #:
Alexej antwortet. Das hängt von dem Makler ab.

Ist das eine Aussage oder eine Vermutung? Ich stelle die Frage nicht, weil ich nichts anderes zu tun habe. Ich möchte sie verstehen.

Mit freundlichen Grüßen, Vladimir.

 
Artyom Trishkin #:
Es gibt keine Wunder.

Das sagte auch mein erster Elektronik-Mentor, als er im regionalen Computer-Service-Zentrum arbeitete (zu Zeiten der UdSSR). Ich stimme mit ihm und mit Ihnen völlig überein. Es muss also eine logische Erklärung für das Problem geben. Und einmal in 8 Monaten, in denen ich den Expert Advisor auf einem echten Konto gehandelt habe. Deshalb versuche ich, es herauszufinden, um jede Möglichkeit einer solchen Situation auszuschließen.

Mit freundlichen Grüßen, Vladimir.

 

Ich werde versuchen, diese Variante der Funktion OnTradeTransaction() im wirklichen Leben zu verwenden, damit der Expert Advisor immer eine offene Position findet. Ich habe den Teil des Codes gelb markiert, der ausschließen soll, dass eine offene Position "aus den Augen verloren" wird:

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // Struktur der Handelstransaktion
   const MqlTradeRequest&        request, // Struktur der Anfrage
   const MqlTradeResult&         result   // Antwortstruktur
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void Open_Add_Position()
  {
//--- wenn eine Position mit einem Medjik und Ticket der letzten offenen Position vom aktuellen Symbol ausgewählt wird
   if((PositionSelectByTicket(pos_ticket) || PositionSelect(_Symbol)) &&
      PositionGetString(POSITION_SYMBOL)==_Symbol &&
      PositionGetInteger(POSITION_MAGIC)==Magic_Number)
     {
      ....... тогда выполняем определённые действия с целью открытия дополнительной позиции
     }
  }

Im Testprogramm funktioniert es gut, ich werde sehen, wie es sich im realen Handel verhält.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin offene Position findet. Ich habe den Teil des Codes gelb hervorgehoben, der ausschließen soll, dass eine offene Position "aus dem Blickfeld gerät":

Im Test funktioniert es gut, ich werde sehen, was im realen Handel passiert.

Mit freundlichen Grüßen, Vladimir.

Vladimir, es gibt keine Verbindung zwischen diesen Funktionen. Wenn Sie die Funktion OpTradeTransaction() entfernen, funktioniert der Code genau so.

Wenn die Strategie die Eröffnung mehrerer Positionen und Konten vorsieht, kann dieser Teil des Codes

if((PositionSelectByTicket(pos_ticket) || PositionSelect(_Symbol)) &&

eine Menge Schaden anrichten.

 
Alexey Viktorov #:

Vladimir, es gibt keine Verbindung zwischen diesen Funktionen. Entfernen Sie die Funktion OpTradeTransaction() und der Code funktioniert genau so.

Wenn die Strategie sieht für die Eröffnung mehrerer Positionen und hadge-Konto, dann dieser Teil des Codes

eine Menge Schaden anrichten.

Alexey, ich danke Ihnen für die ständige Aufforderung und helfen mir bei der Verbesserung der EA-Code. Nun zur Sache. Ja, ich habe ein Hedge-Konto und es können mehrere Positionen eröffnet werden. Die Verbindung zwischen OpTradeTransaction() und dem Teil des Codes, den Sie vorschlagen zu löschen, ist direkt. In OpTradeTransaction() erhalte ich das Positionsticket und seinen Eröffnungskurs, den ich für die Eröffnung zusätzlicher Positionen verwenden kann. Bis jetzt hat alles perfekt funktioniert. Das Problem trat auf, als der Expert Advisor eine offene Position einmal nicht "sah". Ich habe es vorher nicht bemerkt und dachte, dass das Problem nur einmal auftrat, aber nachdem ich es durch die Historie laufen ließ und mir den Ausdruck genauer ansah, wurde mir klar, dass es mehr als einmal und nicht zweimal auftrat. Ich habe es vorher einfach nicht bemerkt, aber jetzt ist mir klar geworden, dass das Problem manchmal auftrat, wenn eine Position von einer Handelssitzung zur nächsten verschoben wurde. Ich betone - manchmal. Und warum? Ich kann es selbst nicht herausfinden. Mein Forex-Händler hat einen Rollover zwischen den Handelssitzungen. Vielleicht liegt es daran, vielleicht auch nicht. Ich weiß es nicht. Ich habe jetzt eine ähnliche Situation, aber mir fehlt noch eine Bedingung, um eine zusätzliche Position zu eröffnen. Ich möchte den neuen Code testen und sehen, ob er Schaden anrichtet oder nicht. Ich habe keine Angst, ein Experiment durchzuführen, denn es wird nicht schlimmer sein, zumal ich bereits gelernt habe, schlechte Situationen mit meinen Händen zu "lösen". Ich stoppe einfach die Arbeit der beiden Roboter und eröffne eine Position zu dem Preis, den ich brauche.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Alexey, ich danke dir für deine ständigen Anregungen und deine Hilfe bei der Verbesserung des EA-Codes. Nun zur Sache. Ja, ich habe ein Hedge-Konto und es können mehrere Positionen eröffnet werden. Die Verbindung zwischen OpTradeTransaction() und dem Teil des Codes, den Sie vorschlagen zu löschen, ist direkt. In OpTradeTransaction() erhalte ich das Positionsticket und den Eröffnungskurs, den ich für die Eröffnung weiterer Positionen verwenden kann. Bis jetzt hat alles perfekt funktioniert. Das Problem trat auf, als der Expert Advisor einmal eine offene Position nicht "sah". Ich habe es vorher nicht bemerkt und dachte, dass das Problem nur einmal auftrat, aber nachdem ich es durch die Historie laufen ließ und mir den Ausdruck genauer ansah, wurde mir klar, dass es mehr als einmal und nicht zweimal auftrat. Ich hatte es vorher einfach nicht bemerkt, und jetzt ist mir klar geworden, dass das Problem manchmal auftrat, wenn eine Position von einer Handelssitzung zur nächsten verschoben wurde. Ich betone - manchmal. Und warum? Ich kann es selbst nicht herausfinden. Mein Forex-Händler hat einen Rollover zwischen den Handelssitzungen. Vielleicht liegt es daran, vielleicht auch nicht. Ich weiß es nicht. Ich habe jetzt eine ähnliche Situation, aber mir fehlt noch eine Bedingung, um eine zusätzliche Position zu eröffnen. Ich möchte den neuen Code testen und sehen, ob er Schaden anrichtet oder nicht. Ich habe keine Angst, ein Experiment durchzuführen, denn es wird nicht schlimmer sein, zumal ich bereits gelernt habe, schlechte Situationen mit meinen Händen zu "lösen". Ich stoppe einfach die Arbeit beider Roboter und eröffne eine Position zu dem Preis, den ich brauche, von Hand.

Mit freundlichen Grüßen, Vladimir.

Das Problem ist, dass PositionSelect(_Symbol) nicht unbedingt die letzte Position auswählt. Wenn Sie also in OnTradeTransaction() kein Positionsticket erhalten haben, laufen Sie Gefahr, eine Entscheidung auf der Grundlage falscher Daten zu treffen.

 
Alexey Viktorov #:

Das Problem ist, dass PositionSelect(_Symbol) nicht unbedingt die letzte Position auswählt. Wenn Sie also in OnTradeTransaction() kein Positionsticket erhalten, laufen Sie Gefahr, eine Entscheidung auf der Grundlage falscher Daten zu treffen.

Vielen Dank für den Hinweis. Ich werde darüber nachdenken und sehen, wie es im realen Handel schaden kann. Ich kann der Idee, die Funktion OnTradeTransaction() aufzugeben, noch nicht zustimmen. Wir müssen das Problem gründlich verstehen und dann eine endgültige Entscheidung treffen.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Danke für den Tipp. Ich werde darüber nachdenken und sehen, wie es im echten Handel schaden kann. Ich kann noch nicht zustimmen, die Funktion OnTradeTransaction() aufzugeben. Ich muss das Problem erst gründlich verstehen und dann eine endgültige Entscheidung treffen.

Mit freundlichen Grüßen, Vladimir.

Ich habe nicht gesagt, dass ich es ablehnen soll. Aber die Vorteile einer solchen Verwendung sind gleich Null.

 
Alexey Viktorov #:
Entfernen Sie die Funktion OpTradeTransaction(), und der Code funktioniert genau so

Nach meinem Verständnis ist das Löschen einer Funktion so, als würde man sich weigern, sie zu benutzen. Es spielt keine Rolle, wer und wie Sie es sagen, Hauptsache, Sie finden es heraus. : )

Mit freundlichen Grüßen, Vladimir.