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

 
Menschen helfen. Ich versuche, den Preis zu ermitteln, zu dem ein Handel eröffnet wurde. Zuerst habe ich über CTrade gehandelt, aber der trade.resultprice war gleich Null. Ich habe angefangen, über MqlTrade zu handeln und result.price zeigte gute Ergebnisse im Strategy Tester, aber es war gleich Null in Live. Ich habe es mit OnTradeTransaction versucht, aber es ist zu langsam im Live-Handel und zeigt Null an, wenn der automatische Handel gestoppt ist. Welche Möglichkeiten gibt es, den Preis zu ermitteln, zu dem der Kauf abgeschlossen wurde?
 
mikhail_shmakov:
Menschen helfen. Ich versuche, den Preis zu ermitteln, zu dem ein Handel eröffnet wurde. Zuerst habe ich über CTrade gehandelt, aber der trade.resultprice war gleich Null. Ich habe angefangen, über MqlTrade zu handeln und result.price zeigte gute Ergebnisse im Strategy Tester, aber es war gleich Null in Live. Ich habe es mit OnTradeTransaction versucht, aber es ist zu langsam im Live-Handel und zeigt Null an, wenn der automatische Handel gestoppt ist. Welche Möglichkeiten gibt es, um den Preis zu ermitteln, zu dem der Kauf abgeschlossen wurde?
struct MqlTradeTransaction 
  { 
   ulong                         deal;             // Тикет сделки 
   ulong                         order;            // Тикет ордера 
   string                        symbol;           // Имя торгового инструмента 
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции 
   ENUM_ORDER_TYPE               order_type;       // Тип ордера 
   ENUM_ORDER_STATE              order_state;      // Состояние ордера 
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки 
   ENUM_ORDER_TYPE_TIME          time_type;        // Тип ордера по времени действия 
   datetime                      time_expiration;  // Срок истечения ордера 
   double                        price;            // Цена  
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера 
   double                        price_sl;         // Уровень Stop Loss 
   double                        price_tp;         // Уровень Take Profit 
   double                        volume;           // Объем в лотах 
   ulong                         position;         // Тикет позиции 
   ulong                         position_by;      // Тикет встречной позиции 
  };
Was meinen Sie mit "in sehr schnellen Geschäften"? OnTradeTransaction funktioniert bei jedem Handel. Sie müssen nur die Art der Transaktion trennen und den Preis bei TRADE_TRANSACTION_DEAL_ADD übernehmen.
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями...
 

//+------------------------------------------------------------------+ 
//| Получает текущее количество отложенных ордеров с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 
int GetOrdersTotalByMagic(long const magic_number) 
  { 
   ulong order_ticket; 
   int total=0; 
//--- пройдем по всем отложенным ордерам 
   for(int i=0;i<OrdersTotal();i++) 
      if((order_ticket=OrderGetTicket(i))>0) 
         if(magic_number==OrderGetInteger(ORDER_MAGIC)) total++; 
//--- 
   return(total); 
  }
Hallo, liebe Programmierer. Bitte helfen Sie mir, diese Funktion zu ändern. Die Funktion aus der obigen MQL5-Referenz: Wie kann man sie dazu bringen, die Anzahl aller offenen Positionen für eine bestimmte Magic zu berechnen?
 
Kolya32:
Hallo, liebe Programmierer. Bitte helfen Sie mir, diese Funktion zu ändern. Ich habe diese Funktion bereits in MQL5 Reference eingeführt. Was muss ich tun, damit sie die Anzahl der offenen Positionen für Magic berechnet?
Wir sollten zumindest Orders*** in Positions*** ändern und dann prüfen.
 
Alexey Viktorov:
Ändern Sie zumindest überall Aufträge*** in Positionen*** und prüfen Sie dann.

Es scheint zu funktionieren)) Wir können diese Funktion zu MQL5 hinzufügen)) Obwohl es wahrscheinlich zu früh ist, werde ich es testen)

//+------------------------------------------------------------------+ 
//| Получает текущее количество открытых позиций с указанным ORDER_MAGIC      | 
//+------------------------------------------------------------------+ 

int GetPositionsTotalByMagic(long const magic_number)  
  { 
   ulong position_ticket; 
   int total=0; 
//--- пройдем по всем открытым позициям 
   for(int i=0;i<PositionsTotal();i++) 
      if((position_ticket=PositionGetTicket(i))>0) 
         if(magic_number==PositionGetInteger(POSITION_MAGIC)) total++; 
//--- 
   return(total); 
  } 
 
Kolya32:

Es scheint zu funktionieren)) Sie können diese Funktion zum MQL5-Handbuch hinzufügen)) Obwohl es wahrscheinlich zu früh ist, bin ich noch am Testen)

Wenn man jede Kleinigkeit wie diese in das Handbuch aufnimmt, wird das Handbuch zu einer Müllhalde. Entschuldigung, es geht nicht um die Qualität der von Ihnen vorgenommenen Änderungen.
 
mikhail_shmakov:
Menschen helfen. Ich versuche, den Preis zu ermitteln, zu dem ein Handel eröffnet wurde. Zuerst habe ich CTrade verwendet, aber trade.resultprice war gleich Null. Ich habe angefangen, über MqlTrade zu handeln und result.price zeigte gute Ergebnisse im Strategy Tester, aber es war gleich Null in Live. Ich habe es mit OnTradeTransaction versucht, aber es ist zu langsam im Live-Handel und zeigt Null an, wenn der automatische Handel gestoppt ist. Welche Möglichkeiten gibt es, um den Preis zu ermitteln, zu dem der Kauf abgeschlossen wurde?

OrderSend sendet eine Bestellung. Dann müssen wir auf die Ausführung warten und darauf, dass der entsprechende Handel in der Historie erscheint.

Um das alles richtig zu machen, muss man entweder OnTradeTransaction gut beherrschen oder einmal einen ziemlich umfangreichen Code für OrderSend schreiben.

Im zweiten Fall funktioniert CTrade ebenfalls wie gewünscht.

 

Wie lautet das Analogon für Digits, das die Anzahl der Dezimalstellen nach dem Komma zurückgibt, die die Genauigkeit der Kursmessung des ausgewählten Diagrammsymbols bestimmt?

 
Aleksey Vyazmikin:

Wie lautet das Analogon für Digits, das die Anzahl der Dezimalstellen nach dem Komma zurückgibt, die die Genauigkeit der Kursmessung des ausgewählten Diagrammsymbols bestimmt?

SymbolInfoInteger("XXXYYY",SYMBOL_DIGITS);
 
Artyom Trishkin:

Ich danke Ihnen!

Grund der Beschwerde: