Características del lenguaje mql5, sutilezas y técnicas - página 11

 
Leo59:
Gracias.
Dado que la "Orden es una orden de comercio", sólo las órdenes pendientes pueden clasificarse como "órdenes activas", y las "Posiciones - compra y venta" no son órdenes de comercio. ¿O me estoy "perdiendo algo"?

Una orden es una orden en ruso. Das una orden y puede ser cualquiera de las 8.

1, 2, 3, 4 -buy-stop, sell-stop, buy-limit y sell-limit - después de la activación de la orden aparece una posición

5, 6 - comprar o vender - no son órdenes

7, 8 - stopLoss y TakeProfit - estas son las órdenes, estas son las órdenes de las empresas de corretaje para salir del mercado.

Casos 1, 2, 3, 4 - órdenes pendientes

5, 6 - capturar el mercado), es decir, tomar una determinada posición en el mercado, es igual que en la guerra: cada uno tiene su propia posición en el frente donde fueron enviados por los comandantes

 
Leo59:
Gracias.
Dado que "una orden es una orden comercial", sólo las órdenes pendientes pueden clasificarse como "órdenes activas", y las "Posiciones - compra y venta" no son una orden comercial. ¿O me estoy "perdiendo algo"?
También puede ver la primera sección "Condiciones comerciales" en el enlace.
 
Vitaly Muzichenko:

5, 6 - comprar o vender - ya no son órdenes

El código siguiente muestra que se trata de órdenes reales.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Características del lenguaje mql5, sutilezas y trucos

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:
Las órdenes activas son órdenes comerciales que están pendientes de ejecución o cancelación, excepto las órdenes TP/SL y MarginCall. Las órdenes válidas pueden ser de COMPRA y VENTA.
Gracias.
Según tengo entendido, el término "orden activa" se refiere a las posiciones de COMPRA y/o VENTA, así como a las órdenes pendientes establecidas (aceptadas por un corredor).
Si tengo: posiciones largas y cortas abiertas, y límite de compra y stop de venta establecidos, entonces OrdersTotal() devolverá el valor =4. ¿Correcto?
 
Leo59:
Gracias.
Según tengo entendido, "orden activa" se refiere a las posiciones de COMPRA y/o VENTA, así como a las órdenes pendientes establecidas (aceptadas por el corredor).
Si tengo: posiciones largas y cortas abiertas, y límite de compra y tope de venta establecidos, entonces OrdersTotal() devolverá el valor =4, ¿verdad?
No.OrdersTotal() devolverá 2 (son órdenes pendientes Buy Limit y Sell Stop) y PositionsTotal() también devolverá 2 (posiciones Buy y Sell).
 
Vladimir Karputov:
No.OrdersTotal() devolverá 2 (son órdenes pendientes de Buy Limit y Sell Stop) y PositionsTotal() también devolverá 2 (posiciones de Buy y Sell).
)) ¡¡¡¡Ahora esto es cool!!!! ¿Qué devuelve la función OrdersTotal()?
 
Leo59:
)) ¡¡¡¡Eso sí que es cool!!!! ¿Qué devuelve la función OrdersTotal()?
Podemos utilizar la siguiente terminología: posición - algo que ya se ha comprado/vendido o se ha activado una orden pendiente, mientras que una orden - una orden pendiente para abrir una posición si el precio alcanza un determinado nivel.
 
Leo59:
)) ¡¡¡¡Eso sí que es cool!!!! ¿Qué devuelve la función OrdersTotal()?

Lee ya la ayuda :).

Estúdialo:

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

Aquí está el estado de la pestaña "Comercio":

comercio

Como puede ver hay dos posiciones abiertas (EURUSD compra 0.03 y USDCAD compra 0.02) y hay tres ORDENES LOCALES (USDJPY compra límite, USDJPY venta límite y EURUSD compra límite),

y una impresión del guión:

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
Archivos adjuntos:
 
Maxim Khrolenko:
Podemos adoptar la siguiente terminología: una posición es algo que ya ha sido comprado/vendido o manualmente o se ha activado una orden pendiente y una orden es una orden pendiente para abrir una posición si el precio alcanza un nivel especificado.
Todo ha sido aceptado desde hace tiempo, y antes de escribir la documentación, probablemente sería una buena idea leer el tutorial de Sergei Kovalev (está integrado en MQL4):


Así se puede construir un bloque en el que se analizan las órdenes de mercado y pendientes:

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

El valor inicial i=1 se especifica en la cabecera de la sentencia del bucle, y la condición para el final del bucle es la expresión i<=TotalOrdenes(). La función OrdersTotal() devuelve el importe total de las órdenes de mercado y pendientes, es decir, aquellas órdenes que se muestran en el Terminal en la pestaña de Comercio. Por lo tanto, el número de iteraciones en el bucle será igual al número de órdenes presentes en la operación.

 
Leo59:
Todo ha sido aceptado desde hace tiempo, y antes de escribir la documentación, probablemente no estaría de más leer el tutorial de Sergei Kovalev (está integrado en MQL4):


Así se puede construir un bloque en el que se analizan las órdenes de mercado y pendientes:

El valor inicial i=1 se especifica en la cabecera de la sentencia del bucle, y la condición para el final del bucle es la expresión i<=TotalOrdenes(). La función OrdersTotal() devuelve el importe total de las órdenes de mercado y pendientes, es decir, aquellas órdenes que se muestran en el Terminal en la pestaña de Comercio. Por lo tanto, el número de iteraciones en el bucle será el número de órdenes presentes en la operación.

No hay necesidad de recocido)

Este es el código de MT4 y no hay división de órdenes y posiciones - todo está mezclado en él