Caractéristiques du langage mql5, subtilités et techniques - page 11

 
Leo59:
Merci !
Puisque "L'ordre est un ordre de transaction", seuls les ordres en attente peuvent être classés comme "ordres actifs", et les "Positions - achat et vente" ne sont pas des ordres de transaction. Ou est-ce que je "rate quelque chose" ?

Un ordre est un ordre en russe. Vous donnez un ordre et il peut être n'importe lequel des 8.

1, 2, 3, 4 -buystop, sellstop, bylimit et selllime - après le déclenchement de l'ordre, une position apparaît.

5, 6 - acheter ou vendre - ce ne sont pas des ordres.

7, 8 - stopLoss et TakeProfit - ce sont les ordres ; ce sont les ordres des sociétés de courtage pour sortir du marché.

Affaires 1, 2, 3, 4 - ordres en suspens

5, 6 - s'emparer du marché), c'est-à-dire prendre une certaine position sur le marché, c'est comme à la guerre : chacun a sa propre position au front où il a été envoyé par les commandants

 
Leo59:
Merci !
Étant donné qu'"un ordre est un ordre commercial", seuls les ordres en attente peuvent être classés comme "ordres actifs", et les "positions - achat et vente" ne sont pas des ordres commerciaux. Ou est-ce que je "rate quelque chose" ?
Vous pouvez également consulter la première section "Conditions commerciales" sur le lien.
 
Vitaly Muzichenko:

5, 6 - acheter ou vendre - ce ne sont plus des ordres.

Le code ci-dessous montre que ce sont les commandes réelles.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Caractéristiques du langage mql5, subtilités et astuces

fxsaber, 2017.02.25 16:30

// Триггер срабатывания SL/TP - работает только на демо/реале (не в тестере).
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if ((Trans.type == TRADE_TRANSACTION_ORDER_ADD) &&
       PositionSelectByTicket(Trans.position) && OrderSelect(Trans.order) &&
       (PositionGetInteger(POSITION_TYPE) == 1 - OrderGetInteger(ORDER_TYPE)))
  {
    const double Price = OrderGetDouble(ORDER_PRICE_OPEN);
    
    if (Price == PositionGetDouble(POSITION_TP))
      Print("Position #" + (string)Trans.position + " - triggered TP.");    
    else if (Price == PositionGetDouble(POSITION_SL))
      Print("Position #" + (string)Trans.position + " - triggered SL.");    
  }
}
 
fxsaber:
Les ordres actifs sont des ordres de transaction qui sont en attente d'exécution ou d'annulation, à l'exception des ordres TP/SL et MarginCall. Les ordres valables peuvent être des ordres d'ACHAT et de VENTE.
Merci !
D'après ce que je comprends, le terme "ordre actif" fait référence aux positions d'ACHAT et/ou de VENTE ainsi qu'aux ordres en attente fixés (acceptés par un courtier).
Si j'ai : des positions longues et courtes ouvertes, et une limite d'achat et un arrêt de vente définis, alors OrdersTotal() renverra la valeur =4, n'est-ce pas ?
 
Leo59:
Merci !
Si je comprends bien, l'expression "ordre actif" fait référence aux positions d'achat et/ou de vente ainsi qu'aux ordres en attente fixés (acceptés par le courtier).
Si j'ai : des positions longues et courtes ouvertes, et une limite d'achat et un arrêt de vente définis, alors OrdersTotal() retournera la valeur =4, n'est-ce pas ?
Non.OrdersTotal() renverra 2 (il s'agit d'ordres d' achat limite et de vente stop en attente ) et PositionsTotal() renverra également 2 (positions d'achat et de vente).
 
Vladimir Karputov:
Non.OrdersTotal() renverra 2 (il s'agit d'ordres d' achat limite et de vente stop en attente ) et PositionsTotal() renverra également 2 (positions d'achat et de vente).
)) C'est déjà cool !!!! Que renvoie la fonction OrdersTotal() ?
 
Leo59:
)) Ça, c'est cool !!!! Que renvoie la fonction OrdersTotal() ?
Nous pouvons utiliser la terminologie suivante : position - quelque chose qui a déjà été acheté/vendu ou un ordre en attente a été déclenché, tandis qu'un ordre - un ordre en attente pour ouvrir une position si le prix atteint un certain niveau.
 
Leo59:
)) Ça, c'est cool !!!! Que renvoie la fonction OrdersTotal() ?

Lisez déjà l'aide :).

Étudiez-le :

//+------------------------------------------------------------------+
//|                                    OrdersTotalPositionsTotal.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo  m_position;                   // trade position object
COrderInfo     m_order;                      // pending orders object
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int total=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
        {
         //if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
         Print("position ",total,": ",m_position.Symbol()," ",EnumToString(m_position.PositionType()),
               " ",DoubleToString(m_position.Volume(),2)," ",DoubleToString(m_position.PriceOpen(),8));
         total++;
        }
   total=0;
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
        {
         //if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
         Print("pending order ",total,": ",m_order.Symbol()," ",EnumToString(m_order.OrderType()),
               " ",DoubleToString(m_order.VolumeInitial(),2)," ",DoubleToString(m_order.PriceOpen(),8));
         total++;
        }
  }
//+------------------------------------------------------------------+

Voici l'état de l'onglet "Commerce" :

commerce

Comme vous pouvez le voir, il y a deux positions ouvertes (EURUSD acheter 0.03 et USDCAD acheter 0.02) et il y a trois ORDRES LOCAUX (USDJPY acheter limite, USDJPY vendre limite et EURUSD acheter limite),

et une impression du script :

2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 0: USDCAD POSITION_TYPE_BUY 0.02 1.32797000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   position 1: EURUSD POSITION_TYPE_BUY 0.03 1.06088000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 0: EURUSD ORDER_TYPE_BUY_LIMIT 0.03 1.05879000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 1: USDJPY ORDER_TYPE_SELL_LIMIT 0.01 112.71100000
2017.02.28 20:14:43.804 OrdersTotalPositionsTotal (EURUSD,H1)   pending order 2: USDJPY ORDER_TYPE_BUY_LIMIT 0.01 111.74500000
Dossiers :
 
Maxim Khrolenko:
Nous pouvons adopter la terminologie suivante : une position est quelque chose qui a déjà été acheté/vendu ou déclenché manuellement ou un ordre en attente et un ordre est un ordre en attente pour ouvrir une position si le prix atteint un niveau spécifié.
Tout cela a été accepté depuis longtemps, et avant d'écrire de la documentation, il serait probablement utile de lire le tutoriel de Sergei Kovalev (il est intégré à MQL4) :


C'est ainsi que l'on peut construire un bloc dans lequel les ordres de marché et les ordres en attente sont analysés :

   for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {                                    
         // Здесь должен выполняться ..
         // ..анализ характеристик ордеров
        }
     }                                        //Конец тела цикла

La valeur initiale i=1 est spécifiée dans l'en-tête de l'instruction de boucle, et la condition pour la fin de la boucle est l'expression i<=OrdersTotal(). La fonction OrdersTotal() renvoie le montant total des ordres au marché et en attente, c'est-à-dire les ordres qui sont affichés dans le terminal dans l'onglet Trade. Par conséquent, le nombre d'itérations dans la boucle sera égal au nombre d'ordres présents dans la transaction.

 
Leo59:
Tout a été accepté depuis longtemps, et avant d'écrire de la documentation, cela ne ferait probablement pas de mal de lire le tutoriel de Sergei Kovalev (il est intégré à MQL4) :


C'est ainsi que l'on peut construire un bloc dans lequel les ordres de marché et les ordres en attente sont analysés :

La valeur initiale i=1 est spécifiée dans l'en-tête de l'instruction de boucle, et la condition pour la fin de la boucle est l'expression i<=OrdersTotal(). La fonction OrdersTotal() renvoie le montant total des ordres au marché et en attente, c'est-à-dire les ordres qui sont affichés dans le terminal dans l'onglet Trade. Par conséquent, le nombre d'itérations dans la boucle sera le nombre d'ordres présents dans la transaction.

Il n'est pas nécessaire de recuire)

Il s'agit du code MT4 et il n'y a pas de division des ordres et des positions - tout est mélangé dans ce code.

Raison: