Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 697

 
yaaarik777:

Guten Tag zusammen! Können Sie bitte mitteilen, wie man eine Auftragslöschung in einem EA einrichtet?

Die Situation stellt sich wie folgt dar:

Wir platzieren 2 schwebende Aufträge in verschiedenen Richtungen, sobald einer von ihnen ausgelöst wird, wird der andere entfernt und nicht mehr ausgestellt.

Ich wäre für jede Hilfe sehr dankbar.

Ich danke Ihnen.

Es gibt mehrere Möglichkeiten, dies zu tun. Eine davon ist die Verwendung vonOnTradeTransaction.

Beim Abfangen der Transaktion

HANDEL_TRANSAKTION_GESCHAEFT_HINZUFUEGEN

Fügen Sie die Transaktion der Historie hinzu. Wird infolge der Ausführung von Aufträgen oder Kontobewegungen durchgeführt.

und stellen Sie sicher, dass diese Transaktion ein Markteintritt ist:

DEAL_ENTRY_IN

Markteintritt


//+------------------------------------------------------------------+
//| 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;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
        }
      else
         return;
      if(deal_symbol==Symbol() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_IN)
           {
            CloseAll();
           }
     }
  }

Diese Transaktion findet statt, sobald der schwebende Auftrag ausgelöst und der Handel in die Historie aufgenommen wurde.

Sobald wir diese Transaktion abgefangen haben, müssen wir nur noch alle verbleibenden schwebenden Aufträge löschen:

//+------------------------------------------------------------------+
//| Close All Orders                                                 |
//+------------------------------------------------------------------+
void CloseAll()
  {
   Print(__FUNCTION__);
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_order.SelectByIndex(i))
         if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
            m_trade.OrderDelete(m_order.Ticket());
  }

Üblicher EA-Code (nur hier habe ich Magie gleich "0" angegeben - Sie sollten Ihre eigene Magie einstellen):

//+------------------------------------------------------------------+
//|                                       There will be only one.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade         m_trade;                      // trading object
COrderInfo     m_order;                      // pending orders object
//---
ulong          m_magic=0;                // magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| 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;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
        }
      else
         return;
      if(deal_symbol==Symbol() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_IN)
           {
            CloseAll();
           }
     }
  }
//+------------------------------------------------------------------+
//| Close All Orders                                                 |
//+------------------------------------------------------------------+
void CloseAll()
  {
   Print(__FUNCTION__);
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_order.SelectByIndex(i))
         if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
            m_trade.OrderDelete(m_order.Ticket());
  }
//+------------------------------------------------------------------+
Dateien:
 

Eine weitere Frage zum Ereignis OnDeinit:

wird dieser Code funktionieren:

void OnDeinit(const int reason)

{

if(Grund==REASON_REMOVE)

{

Code zum Schließen der Position(falls vorhanden)

}

}

Im Allgemeinen müssen wir wissen, ob es möglich ist, die Position in der OnDeinit-Ereignisbehandlung zu schließen

 

Guten Tag Experten, bitte teilen Sie Ihre Erfahrungen mit.

Es gibt eine Reihe von Werten, die ein Objekt/Feld widerspiegeln, d.h. wenn es eine Aufgabe gibt, dieses Objekt/Feld in irgendeiner Weise zu bezeichnen, was sind die möglichen Aktionen.

Wäre es zum Beispiel angemessen, dieses Feld in ein Kohonen-Kartennetz zu setzen, wenn das Volumen des Feldes Tausende von Zellen von x und y erreichen kann?

Vielleicht können Sie vorschlagen, wie man eines der zweidimensionalen Arrays (mit großer Dimensionalität) in ein Kohonen-Netzwerk einfügen kann.

Und ob Kohon für die Analyse geeignet ist - Rekursion von Arrays (Arrays in einem Array).

Oder vielleicht kann jemand helfen, die richtigen Fragen zu stellen


1 1 1 1 1 2 4 6 8
1 1 1 1 2 3 5 7 9
1 1 1 1 3 4 6 8 10
1 1 1 2 4 5 7 9 11
1 1 1 3 5 6 8 10 12
1 1 1 4 6 7 9 11 13
1 1 1 5 7 8 10 12 14
1 1 2 6 8 9 11 13 15
1 1 3 7 9 10 12 14 16
1 1 4 8 10 11 13 15 17
1 2 5 9 11 12 14 16 18
1 3 6 10 12 13 15 17 19
1 4 7 11 13 14 16 18 20
1 5 8 12 14 15 17 19 21
1 6 9 13 15 16 18 20 22
2 7 10 14 16 17 19 21 1
3 8 11 15 17 18 20 22 1
4 9 12 16 18 19 21 1 1
5 10 13 17 19 20 22 1 1
6 11 14 18 20 21 1 1 1
7 12 15 19 21 22 1 1 1
8 13 16 20 22 1 1 1 1
9 14 17 21 1 1 1 1 1
10 15 18 22 1 1 1 1 1
 
Vladimir Karputov:

Es gibt mehrere Möglichkeiten, dies zu tun. Eine ist die Verwendung vonOnTradeTransaction.

In fangen wir die Transaktion

HANDEL_TRANSAKTION_GESCHAEFT_HINZUFUEGEN

Fügen Sie die Transaktion der Historie hinzu. Wird infolge der Ausführung von Aufträgen oder Kontobewegungen durchgeführt.

und stellen Sie sicher, dass diese Transaktion ein Markteintritt ist:

DEAL_ENTRY_IN

Markteintritt


//+------------------------------------------------------------------+
//| 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;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
        }
      else
         return;
      if(deal_symbol==Symbol() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_IN)
           {
            CloseAll();
           }
     }
  }

Diese Transaktion findet statt, sobald der schwebende Auftrag ausgelöst und der Handel in die Historie aufgenommen wurde.

Sobald wir diese Transaktion erfasst haben, müssen wir nur noch alle ausstehenden offenen Aufträge löschen:

//+------------------------------------------------------------------+
//| Close All Orders                                                 |
//+------------------------------------------------------------------+
void CloseAll()
  {
   Print(__FUNCTION__);
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_order.SelectByIndex(i))
         if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
            m_trade.OrderDelete(m_order.Ticket());
  }

Generischer EA-Code (nur hier habe ich Magie gleich "0" angegeben - Sie sollten Ihre eigene Magie einstellen):

//+------------------------------------------------------------------+
//|                                       There will be only one.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade         m_trade;                      // trading object
COrderInfo     m_order;                      // pending orders object
//---
ulong          m_magic=0;                // magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| 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;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
        }
      else
         return;
      if(deal_symbol==Symbol() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_IN)
           {
            CloseAll();
           }
     }
  }
//+------------------------------------------------------------------+
//| Close All Orders                                                 |
//+------------------------------------------------------------------+
void CloseAll()
  {
   Print(__FUNCTION__);
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_order.SelectByIndex(i))
         if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
            m_trade.OrderDelete(m_order.Ticket());
  }
//+------------------------------------------------------------------+

Danke, aber wie sollte es in MQL4 implementiert werden? Ich entschuldige mich dafür, dass ich das nicht gleich gesagt habe.

 
yaaarik777:

Danke, aber wie formatiere ich es für MQL4? Ich entschuldige mich dafür, dass ich nicht gleich konkreter geworden bin.

Sie haben keine. Ich berate nicht über die alte Sprache und das Terminal. Stellen Sie Ihre Fragen über das alte Terminal im Abschnitt:MQL4 und MetaTrader 4 (22693)
 

Warum bekomme ich auf dem Aktien- und Terminmarkt einen Fehler, aber auf dem Devisen- und Rohstoffmarkt ist alles in Ordnung?

fehlgeschlagenes Verkaufslimit 1.00 USDRUB_TOM bei 63.8679 sl: 63.8829 tp: 63.8329 [Ungültiger Verfall]

 
-Aleks-:

Warum erhalte ich im Aktien- und Futures-Markt einen Fehler, während im Devisen- und Rohstoffmarkt alles in Ordnung ist?

fehlgeschlagenes Verkaufslimit 1.00 USDRUB_TOM bei 63.8679 sl: 63.8829 tp: 63.8329 [Ungültiger Verfall]

müssen Sie einen Parameter hinzufügen

request.type_time=ORDER_TIME_DAY;
 

Hallo Kollegen, ich habe eine Frage zu mql5:

Wie berechnet man den Gewinn für heute eröffnete Positionen (wenn die Position gestern eröffnet und heute geschlossen wurde, wird diese Position nicht berücksichtigt) ????

 
Dmitry Melnichenko:

Hallo Kollegen, ich habe eine Frage zu mql5:

Wie berechnet man den Gewinn für heute eröffnete Positionen (wenn die Position gestern eröffnet und heute geschlossen wurde, wird diese Position nicht berücksichtigt) ????

Offensichtlich durch Vergleich des Zeitpunkts der Positionseröffnung mit dem Zeitpunkt des Tagesbeginns.
 
Vitalie Postolache:
Offensichtlich, indem man den Zeitpunkt der Positionseröffnung mit dem Zeitpunkt des Tagesbeginns vergleicht.
Wenn die Position jedoch gestern eröffnet und heute geschlossen wurde, dann wird in der Historie eine Transaktion mit der heutigen Eröffnungszeit angezeigt, es wird lediglich die gestrige Position geschlossen! Oder liege ich da falsch?
Grund der Beschwerde: