Características da linguagem mql5, subtilezas e técnicas - página 11
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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
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"?
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
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.");
}
}
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.
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?
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 (estas são ordens pendentes de Buy Limit e Sell Stop) e PositionsTotal() também retornará 2 (posições de Buy e Sell).
)) Isso é fixe, !!!!. Mas o que a função OrdersTotal() retorna?
)) 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":
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 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
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.
É assim que se pode construir um bloco no qual são analisadas as ordens de mercado e pendentes:
{ //отражённым в терминале
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.
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