Características da linguagem mql5, subtilezas e técnicas - página 11

 
Leo59:
Obrigado!
Como "Ordem é uma ordem de negociação", apenas ordens pendentes podem ser classificadas como "ordens activas", e "Posições - comprar e vender" não são ordens para uma negociação. Ou estou a "perder alguma coisa"?

Uma ordem é uma ordem em russo. Você dá uma ordem e pode ser qualquer uma de 8.

1, 2, 3, 4 -buy-stop, sell-stop, buy-limit e sell-limit - após a ordem ser accionada aparece uma posição

5, 6 - comprar ou vender - estes não são pedidos

7, 8 - stopLoss e TakeProfit - estas são as ordens, estas são as ordens das corretoras para sair do mercado.

Casos 1, 2, 3, 4 - ordens pendentes

5, 6 - para capturar o mercado), ou seja, para tomar uma certa posição no mercado, é como na guerra: cada um tem a sua própria posição na frente onde foi enviado pelos comandantes

 
Leo59:
Obrigado!
Como "Uma ordem é uma ordem de negociação", apenas ordens pendentes podem ser classificadas como "ordens activas", e "Posições - comprar e vender" não são uma ordem de negociação. Ou estou a "perder alguma coisa"?
Você também pode consultar a primeira seção "Termos de Negociação ".
 
Vitaly Muzichenko:

5, 6 - comprar ou vender - estas já não são encomendas

O código abaixo mostra que estas são as ordens reais.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Características da linguagem mql5, subtilezas e truques

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:
Ordens activas são ordens de negociação que estão pendentes de execução ou cancelamento, excepto para ordens TP/SL e MarginCall. As encomendas válidas podem ser COMPRAS e VENDAS.
Obrigado!
Até onde entendo o termo "ordem activa" refere-se a posições de COMPRA e/ou VENDA, bem como a ordens pendentes definidas (aceites por um corretor).
Se eu tiver: posições Long e Short abertas, e Limite de Compra e Stop de Venda definidos, então OrdersTotal() retornará valor =4. Certo?
 
Leo59:
Obrigado!
Como eu entendo, "ordem activa" refere-se a posições de COMPRA e/ou VENDA, bem como ordens pendentes definidas (aceites pelo corretor).
Se eu tiver: posições Long e Short abertas, e Limite de Compra e Stop de Venda definidos, então OrdersTotal() irá retornar valor =4, certo?
Não.OrdensTotal() retornará 2 (são ordens pendentes de Buy Limit e Sell Stop) e PositionsTotal() também retornará 2 (posições de Buy e Sell).
 
Vladimir Karputov:
Não.OrdensTotal() retornará 2 (estas são ordens pendentes de Buy Limit e Sell Stop) e PositionsTotal() também retornará 2 (posições de Buy e Sell).
)) Agora isto é legal!!!! O que a função OrdersTotal() retorna?
 
Leo59:
)) Isso é fixe, !!!!. Mas o que a função OrdersTotal() retorna?
Podemos usar a seguinte terminologia: posição - algo que já foi comprado/vendido ou uma ordem pendente foi acionada, enquanto uma ordem - uma ordem pendente para abrir uma posição se o preço atingir um determinado nível.
 
Leo59:
)) Isso é fixe, !!!!. O que é que a função OrdersTotal() retorna?

Leia já a ajuda :).

Estuda-o:

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

Aqui está o status do separador "Comércio":

comércio

Como pode ver, existem duas posições abertas (EURUSD compra 0,03 e USDCAD compra 0,02) e existem três ORDENS LOCAIS (limite de compra USDJPY, limite de venda USDJPY e limite de compra EURUSD),

e uma impressão do guião:

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
Arquivos anexados:
 
Maxim Khrolenko:
Podemos adotar a seguinte terminologia: uma posição é algo que já foi comprado/vendido ou manualmente ou uma ordem pendente foi acionada e uma ordem é uma ordem pendente para abrir uma posição se o preço atingir um nível especificado.
Tudo foi aceito há muito tempo, e antes de escrever a documentação, provavelmente seria uma boa idéia ler o tutorial de Sergei Kovalev (ele está embutido no MQL4):


É assim que se pode construir um bloco no qual são analisadas as ordens de mercado e pendentes:

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

O valor inicial i=1 é especificado no cabeçalho da instrução do laço, e a condição para o fim do laço é a expressão i<=OrdersTotal(). Função OrdensTotal() retorna a quantidade total de ordens de mercado e pendentes, ou seja, aquelas ordens que são exibidas no Terminal na guia Negociação. Portanto, o número de iterações no laço será igual ao número de ordens presentes no negócio.

 
Leo59:
Tudo foi aceito há muito tempo, e antes de escrever a documentação, provavelmente não faria mal ler o tutorial de Sergei Kovalev (está embutido no MQL4):


É assim que se pode construir um bloco no qual são analisadas as ordens de mercado e pendentes:

O valor inicial i=1 é especificado no cabeçalho da instrução do laço, e a condição para o fim do laço é a expressão i<=OrdersTotal(). Função OrdensTotal() retorna a quantidade total de ordens de mercado e pendentes, ou seja, aquelas ordens que são exibidas no Terminal na guia Negociação. Portanto, o número de iterações no laço será o número de ordens que estão presentes no negócio.

Não há necessidade de recozer)

Este é o código MT4 e não há divisão de ordens e posições - tudo está misturado nele

Razão: