Questions des débutants MQL5 MT5 MetaTrader 5 - page 996

 
Les gens aident. J'essaie d'obtenir le prix auquel une transaction a été ouverte. Au début, j'ai négocié par l'intermédiaire de CTrade mais le prix de résultat de la transaction était égal à zéro. J'ai commencé à trader via MqlTrade et result.price montrait de bons résultats dans Strategy Tester, mais il était égal à zéro dans Live. J'ai essayé avec OnTradeTransaction, mais il est trop lent dans le trading en direct et affiche zéro lorsque le trading automatique est arrêté. Quels sont les moyens d'obtenir le prix auquel la transaction d'achat a été effectuée ?
 
mikhail_shmakov:
Les gens aident. J'essaie d'obtenir le prix auquel une transaction a été ouverte. Au début, j'ai négocié par l'intermédiaire de CTrade mais le prix de résultat de la transaction était égal à zéro. J'ai commencé à trader via MqlTrade et result.price montrait de bons résultats dans Strategy Tester, mais il était égal à zéro dans Live. J'ai essayé avec OnTradeTransaction, mais il est trop lent dans le trading en direct, affichant zéro et montrant le dernier prix du trade lorsque le trading automatique est arrêté. Quels sont les moyens d'obtenir le prix auquel la transaction d'achat a été effectuée ?
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;      // Тикет встречной позиции 
  };
Que voulez-vous dire par "dans des échanges très rapides" ? OnTradeTransaction fonctionne pour chaque transaction. Il vous suffit de séparer le type de transaction et de prendre le prix à TRADE_TRANSACTION_DEAL_ADD
Документация по 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); 
  }
Bonjour à tous les programmeurs. Veuillez m'aider à modifier cette fonction. La fonction de la référence MQL5 ci-dessus. Comment lui faire calculer le nombre de toutes les positions ouvertes pour un Magic donné ?
 
Kolya32:
Bonjour à tous les programmeurs. Veuillez m'aider à modifier cette fonction. J'ai déjà introduit cette fonction dans la référence MQL5. Que dois-je faire pour qu'elle calcule le nombre de postes ouverts pour Magic ?
Nous devrions au moins changer les Ordres*** en Positions*** et ensuite vérifier.
 
Alexey Viktorov:
Changez au moins les Ordres*** en Positions*** partout et vérifiez ensuite.

Cela semble fonctionner)) Nous pouvons ajouter cette fonction à MQL5)) Bien qu'il soit probablement trop tôt, je la testerai)

//+------------------------------------------------------------------+ 
//| Получает текущее количество открытых позиций с указанным 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:

Cela semble fonctionner)) Vous pouvez ajouter cette fonction au manuel MQL5)) Bien qu'il soit probablement trop tôt, je teste toujours)

Si vous ajoutez chaque petite chose de ce genre au manuel, celui-ci deviendra un dépotoir. Désolé, il ne s'agit pas de la qualité des changements que vous avez faits.
 
mikhail_shmakov:
Les gens aident. J'essaie d'obtenir le prix auquel une transaction a été ouverte. Au début, j'ai utilisé CTrade, mais trade.resultprice était égal à zéro. J'ai commencé à trader avec MqlTrade et result.price montrait de bons résultats dans Strategy Tester, mais il était égal à zéro dans Live. J'ai essayé avec OnTradeTransaction, mais il est trop lent dans le trading en direct, affichant zéro et montrant le dernier prix du trade lorsque le trading automatique est arrêté. Quels sont les moyens d'obtenir le prix auquel la transaction d'achat a été effectuée ?

OrderSend envoie une commande. Il faut ensuite attendre son exécution et que la transaction correspondante apparaisse dans l'historique.

Afin de faire tout cela correctement, il faut soit être bon en OnTradeTransaction, soit écrire un code assez lourd pour OrderSend une fois.

Dans le second cas, CTrade fonctionnera également comme souhaité.

 

Quel est l'analogue de Digits qui renverrait le nombre de décimales après la virgule qui détermine la précision de la mesure du prix du symbole graphique sélectionné ?

 
Aleksey Vyazmikin:

Quel est l'analogue de Digits qui renverrait le nombre de décimales après la virgule qui détermine la précision de la mesure du prix du symbole graphique sélectionné ?

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

Merci !