Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 697
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
Bom dia a todos! Pode, por favor, aconselhar como definir a eliminação de uma encomenda numa EA?
A situação é a seguinte:
Colocamos 2 ordens pendentes em direcções diferentes, assim que uma delas dispara, a outra é retirada e já não é exibida.
Ficaria muito grato por qualquer ajuda.
Obrigado.
Há várias maneiras de o fazer. Uma delas está a utilizar aOnTradeTransaction.
Ao apanhar a transacção
TRADE_TRANSACTION_DEALDEAL_ADD
Acrescentar a transacção à história. Executadas como resultado da execução de ordens ou de transacções de saldos de contas.
e certificar-se de que esta transacção é uma entrada no mercado:
DEAL_ENTRY_IN
Entrada no mercado
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- 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)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
Esta transacção terá lugar assim que a ordem pendente for accionada e a transacção tiver sido introduzida na história.
Depois de termos apanhado esta transacção, só precisamos de eliminar todas as nossas restantes ordens pendentes:
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
Código EA comum (apenas aqui especifiquei magia igual a "0" - deve definir a sua própria magia):
//| There will be only one.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade m_trade; // trading object
COrderInfo m_order; // pending orders object
//---
ulong m_magic=0; // magic number
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- 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)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
//+------------------------------------------------------------------+
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
//+------------------------------------------------------------------+
Outra questão sobre o evento OnDeinit:
este código irá funcionar:
nulo OnDeinit(const int razão)
{
if(reason===REASON_REMOVE)
{
código para fechar a posição(se houver)
}
}
Geralmente, precisamos de saber se é possível fechar a posição no tratamento de eventos OnDeinit
Boa tarde peritos, por favor partilhem as vossas experiências.
Existe um conjunto de valores, que reflecte algum objecto/campo, ou seja, se existe uma tarefa para designar este objecto/campo de alguma forma, quais são as acções possíveis.
Por exemplo, seria apropriado colocar esta matriz na rede de mapas de Kohonen, se o volume da matriz puder atingir milhares de células de x e y?
Talvez possa sugerir como enfiar uma das matrizes bidimensionais (com grande dimensionalidade) numa rede Kohonen.
E se Kohon é adequado para análise - recorrência de matrizes (matrizes numa matriz).
Ou talvez alguém possa ajudar a fazer as perguntas certas
Há várias maneiras de o fazer. Uma delas é utilizar aOnTradeTransaction.
Em nós apanhamos a transacção
TRADE_TRANSACTION_DEALDEAL_ADD
Acrescentar a transacção à história. Executadas como resultado da execução de ordens ou de transacções de saldos de contas.
e certificar-se de que esta transacção é uma entrada no mercado:
DEAL_ENTRY_IN
Entrada no mercado
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- 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)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
Esta transacção terá lugar assim que a ordem pendente for accionada e a transacção tiver sido introduzida na história.
Depois de termos apanhado esta transacção, só precisamos de eliminar todas as ordens pendentes:
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
Código genérico EA (apenas aqui especifiquei magia igual a "0" - deve definir a sua própria magia):
//| There will be only one.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CTrade m_trade; // trading object
COrderInfo m_order; // pending orders object
//---
ulong m_magic=0; // magic number
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- 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)
{
long deal_entry =0;
long deal_type =0;
string deal_symbol ="";
long deal_magic =0;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
}
else
return;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_IN)
{
CloseAll();
}
}
}
//+------------------------------------------------------------------+
//| Close All Orders |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of open positions
if(m_order.SelectByIndex(i))
if(m_order.Symbol()==Symbol() && m_order.Magic()==m_magic)
m_trade.OrderDelete(m_order.Ticket());
}
//+------------------------------------------------------------------+
Obrigado, mas como deve ser implementado na MQL4? Peço desculpa por não especificar de imediato.
Obrigado, mas como posso formatá-lo para a MQL4? Peço desculpa por não ter sido mais específico de imediato.
Porque é que apanho um erro no mercado de acções e futuros, mas está tudo bem no mercado cambial e de mercadorias?
limite de venda falhado 1,00 USDRUB_TOM a 63,8679 sl: 63,8829 tp: 63,8329 [Validade inválida]
Porque é que apanho um erro no mercado de acções e futuros e tudo está bem em forex e mercadorias?
limite de venda falhado 1,00 USDRUB_TOM a 63,8679 sl: 63,8829 tp: 63,8329 [Validade inválida]
é necessário acrescentar um parâmetro
Olá colegas, tenho uma pergunta sobre o mql5:
Como calcular o lucro das posições abertas hoje (se a posição foi aberta ontem e fechada hoje, então esta posição não é tida em conta) ????
Olá colegas, tenho uma pergunta sobre o mql5:
Como calcular o lucro das posições abertas hoje (se a posição foi aberta ontem e fechada hoje, então esta posição não é tida em conta) ????
Obviamente, comparando a hora de abertura da posição com a hora do início do dia.