Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 11

 
Leo59:
Grazie!
Poiché "L'ordine è un ordine di compravendita", solo gli ordini in sospeso possono essere classificati come "ordini attivi", e le "Posizioni - comprare e vendere" non sono ordini di compravendita. O mi "manca qualcosa"?

Un ordine è un ordine in russo. Si dà un ordine e può essere qualsiasi di 8.

1, 2, 3, 4 -buystop, sellstop, bylimit e selllime - dopo l'attivazione dell'ordine appare una posizione

5, 6 - comprare o vendere - questi non sono ordini

7, 8 - stopLoss e TakeProfit - questi sono gli ordini; questi sono gli ordini delle società di brokeraggio per uscire dal mercato.

Casi 1, 2, 3, 4 - ordini pendenti

5, 6 - per catturare il mercato), cioè per prendere una certa posizione nel mercato, è proprio come in guerra: ognuno ha la sua posizione al fronte dove sono stati mandati dai comandanti

 
Leo59:
Grazie!
Dato che "Un ordine è un ordine commerciale", solo gli ordini in sospeso possono essere classificati come "ordini attivi", e le "Posizioni - comprare e vendere" non sono un ordine commerciale. O mi "manca qualcosa"?
Puoi anche vedere la prima sezione "Condizioni di trading" sul link.
 
Vitaly Muzichenko:

5, 6 - comprare o vendere - questi non sono più ordini

Il codice qui sotto mostra che questi sono gli ordini reali.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Caratteristiche del linguaggio mql5, sottigliezze e trucchi

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:
Gli ordini attivi sono ordini di compravendita che sono in attesa di esecuzione o cancellazione, ad eccezione degli ordini TP/SL e MarginCall. Gli ordini validi possono essere BUY e SELL.
Grazie!
Per quanto ho capito il termine "ordine attivo" si riferisce a posizioni di ACQUISTO e/o VENDITA così come a ordini pendenti impostati (accettati da un broker).
Se ho: posizioni Long e Short aperte, e Buy Limit e Sell Stop impostati, allora OrdersTotal() restituirà il valore =4. Giusto?
 
Leo59:
Grazie!
Da quanto ho capito, "ordine attivo" si riferisce a posizioni di ACQUISTO e/o VENDITA così come a ordini pendenti impostati (accettati dal broker).
Se ho: posizioni Long e Short aperte, e Buy Limit e Sell Stop impostati, allora OrdersTotal() restituirà il valore =4, giusto?
No.OrdersTotal() restituirà 2 (sono ordini pendenti Buy Limit e Sell Stop) e anche PositionsTotal() restituirà 2 (posizioni Buy e Sell).
 
Vladimir Karputov:
No.OrdersTotal() restituirà 2 (si tratta di ordini pendenti Buy Limit e Sell Stop) e anche PositionsTotal() restituirà 2 (posizioni Buy e Sell).
)) Questo è già cool!!!! Cosa restituisce la funzione OrdersTotal()?
 
Leo59:
)) Questo è cool!!!! Cosa restituisce la funzione OrdersTotal()?
Possiamo usare la seguente terminologia: posizione - qualcosa che è già stato comprato/venduto o un ordine pendente è stato attivato, mentre un ordine - un ordine pendente per aprire una posizione se il prezzo raggiunge un certo livello.
 
Leo59:
)) Questo è cool!!!! Cosa restituisce la funzione OrdersTotal()?

Leggete già l'aiuto :).

Studiatelo:

//+------------------------------------------------------------------+
//|                                    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++;
        }
  }
//+------------------------------------------------------------------+

Ecco lo stato della scheda "Commercio":

commercio

Come puoi vedere ci sono due posizioni aperte (EURUSD buy 0.03 e USDCAD buy 0.02) e ci sono tre ORDINI LOCALI (USDJPY buy limit, USDJPY sell limit e EURUSD buy limit),

e una stampa dello 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
 
Maxim Khrolenko:
Possiamo adottare la seguente terminologia: una posizione è qualcosa che è già stato comprato/venduto o manualmente o un ordine pendente è stato attivato e un ordine è un ordine pendente per aprire una posizione se il prezzo raggiunge un livello specificato.
Tutto questo è stato accettato da tempo, e prima di scrivere la documentazione, probabilmente varrebbe la pena di leggere il tutorial di Sergei Kovalev (è integrato in MQL4):


Ecco come si può costruire un blocco in cui si analizzano gli ordini a mercato e in sospeso:

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

Il valore iniziale i=1 è specificato nell'intestazione dell'istruzione del ciclo, e la condizione per la fine del ciclo è l'espressione i<=OrdersTotal(). La funzione OrdersTotal() restituisce l'importo totale degli ordini a mercato e in sospeso, cioè gli ordini che sono visualizzati nel terminale nella scheda Trade. Pertanto, il numero di iterazioni nel ciclo sarà uguale al numero di ordini presenti nella negoziazione.

 
Leo59:
Tutto è stato accettato da tempo, e prima di scrivere la documentazione, probabilmente non sarebbe male leggere il tutorial di Sergei Kovalev (è integrato in MQL4):


Ecco come si può costruire un blocco in cui si analizzano gli ordini a mercato e in sospeso:

Il valore iniziale i=1 è specificato nell'intestazione dell'istruzione del ciclo, e la condizione per la fine del ciclo è l'espressione i<=OrdersTotal(). La funzione OrdersTotal() restituisce l'importo totale degli ordini a mercato e in sospeso, cioè quegli ordini che sono visualizzati nel terminale nella scheda Trade. Pertanto, il numero di iterazioni nel ciclo sarà il numero di ordini che sono presenti nel commercio.

Non c'è bisogno di ricottura)

Questo è il codice MT4 e non c'è alcuna divisione di ordini e posizioni - tutto è mescolato insieme in esso

Motivazione: