Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1497
- Avaliação:
- Publicado:
- 2017.03.28 12:46
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
O Expert Advisor mostra um exemplo de resolução de um problema, isto é: como determinar o momento em que foi ativada a ordem pendente.
Funcionamento do EA: na função OnTradeTransaction() esperamos a transação com o tipo "TRADE_TRANSACTION_DEAL_ADD":
TRADE_TRANSACTION_DEAL_ADD | Adicionando transações ao histórico. É realizado como resultado da execução de ordens ou ao efetuar transações com o saldo da conta. |
Uma vez que "capturamos" tal transação, imediatamente digitamos o sinalizador "bln_find_order" de pesquisa da ordem e atribuímos à variável "ul_find_order" o bilhete da ordem:
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//+------------------------------------------------------------------+
//| TRADE_TRANSACTION_DEAL_* |
//| The following fields in MqlTradeTransaction structure |
//| are filled for trade transactions related to deals handling |
//| (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE |
//| and TRADE_TRANSACTION_DEAL_DELETE): |
//| •deal - deal ticket; |
//| •order - order ticket, based on which a deal has been performed;|
//| •symbol - deal symbol name; |
//| •type - trade transaction type; |
//| •deal_type - deal type; |
//| •price - deal price; |
//| •price_sl - Stop Loss price (filled, if specified in the order, |
//| •based on which a deal has been performed); |
//| •price_tp - Take Profit price (filled, if specified |
//| in the order, based on which a deal has been performed); |
//| •volume - deal volume in lots. |
//| •position - the ticket of the position that was opened, |
//| modified or closed as a result of deal execution. |
//| •position_by - the ticket of the opposite position. |
//| It is only filled for the out by deals |
//| (closing a position by an opposite one). |
//+------------------------------------------------------------------+
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
bln_find_order=true; // true -> you should look for a order
ul_find_order=trans.order;
}
}
Em OnTick() nós sempre verificamos o estado do sinalizador "bln_find_order" e logo que o sinalizador é igual a true, começamos a pesquisa da ordem.
- Primeiro, tentamos encontrar o bilhete para esta ordem
- Se a tentativa for bem-sucedida (o que significa que a ordem já foi registrada no histórico), determinaremos o tipo desta ordem. Para tratar da propriedade da ordem a partir do histórico, é necessário utilizar HistoryOrderGetInteger.
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(bln_find_order) // true -> you should look for a order
{
static long counter=0;
Print("Attempt number ",counter);
ResetLastError();
if(HistoryOrderSelect(ul_find_order))
{
long type_order=HistoryOrderGetInteger(ul_find_order,ORDER_TYPE);
if(type_order==ORDER_TYPE_BUY_LIMIT || type_order==ORDER_TYPE_BUY_STOP ||
type_order==ORDER_TYPE_SELL_LIMIT ||type_order==ORDER_TYPE_SELL_STOP)
{
Print("The pending order ",ul_find_order," is found! Type of order is ",
EnumToString((ENUM_ORDER_TYPE)HistoryOrderGetInteger(ul_find_order,ORDER_TYPE)));
bln_find_order=false; // true -> you should look for a order
counter=0;
return;
}
else
{
Print("The order ",ul_find_order," is not pending");
bln_find_order=false; // true -> you should look for a order
return;
}
}
else
{
Print("Order ",ul_find_order," is not find, error#",GetLastError());
}
counter++;
}
}
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/17610

Dsl (linhas de sinal intermitentes) - RSI.

Canal de Keltner construído sobre o valor médio do oscilador XCCX em forma de vela

Indicador MACD na versão da linha de sinal intermitente (DSL).

Retorna o lucro da posição em pontos com base no histórico de negociação.