Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 697
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¡Buenos días a todos! ¿Puede usted por favor aconsejar cómo establecer un borrado de órdenes en un EA?
La situación es la siguiente:
Colocamos 2 órdenes pendientes en diferentes direcciones, en cuanto una de ellas se dispara, la otra se elimina y deja de estar expuesta.
Estaría muy agradecido por cualquier ayuda.
Gracias.
Hay varias formas de hacerlo. Uno de ellos es el uso deOnTradeTransaction.
Al captar la transacción
TRADE_TRANSACTION_DEAL_ADD
Añade la transacción al historial. Realizado como resultado de la ejecución de una orden o de operaciones de saldo de cuenta.
y asegurarse de que esta transacción es una entrada en el mercado:
DEAL_ENTRY_IN
Entrada en el 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 operación se llevará a cabo una vez que la orden pendiente se haya activado y la operación se haya introducido en el historial.
Una vez que hayamos capturado esta transacción, sólo tenemos que eliminar todas las órdenes pendientes que nos quedan:
//| 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 común de EA (sólo aquí he especificado la magia igual a "0" - usted debe establecer su propia 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());
}
//+------------------------------------------------------------------+
Otra pregunta sobre el evento OnDeinit:
este código funcionará:
void OnDeinit(const int reason)
{
if(reason==REASON_REMOVE)
{
código para cerrar la posición(si la hay)
}
}
En general, necesitamos saber si es posible cerrar la posición en el manejo del evento OnDeinit
Buenas tardes expertos, por favor compartan sus experiencias.
Hay una matriz de valores, refleja algún objeto/campo, es decir, si hay una tarea para designar este objeto/campo de alguna manera, cuáles son las acciones posibles.
Por ejemplo, ¿sería apropiado poner esta matriz en la red de mapas de Kohonen, si el volumen de la matriz puede alcanzar miles de celdas de x e y?
Tal vez puedas sugerir cómo meter una de las matrices bidimensionales (con gran dimensionalidad) en una red Kohonen.
Y si Kohon es adecuado para el análisis - recursión de arrays (arrays en un array).
O tal vez alguien puede ayudar a poner las preguntas correctas
Hay varias formas de hacerlo. Una de ellas es utilizarOnTradeTransaction.
En la captura de la transacción
TRADE_TRANSACTION_DEAL_ADD
Añade la transacción al historial. Realizado como resultado de la ejecución de una orden o de operaciones de saldo de cuenta.
y asegurarse de que esta transacción es una entrada en el mercado:
DEAL_ENTRY_IN
Entrada en el 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 operación se llevará a cabo una vez que la orden pendiente se haya activado y la operación se haya introducido en el historial.
Una vez que hayamos capturado esta transacción, sólo tenemos que eliminar todas las órdenes pendientes:
//| 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 de EA (sólo aquí he especificado la magia igual a "0" - usted debe establecer su propia 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());
}
//+------------------------------------------------------------------+
Gracias, pero ¿cómo debería implementarse en MQL4? Me disculpo por no haber especificado de inmediato.
Gracias, pero ¿cómo lo formateo para MQL4? Me disculpo por no haber sido más específico de inmediato.
¿Por qué me sale un error en el mercado de valores y de futuros y todo va bien en el de divisas y materias primas?
venta fallida límite 1.00 USDRUB_TOM a 63.8679 sl: 63.8829 tp: 63.8329 [Vencimiento inválido].
¿Por qué me sale un error en el mercado de valores y de futuros, pero todo va bien en el de divisas y materias primas?
límite de venta fallido 1.00 USDRUB_TOM a 63.8679 sl: 63.8829 tp: 63.8329 [Vencimiento inválido].
hay que añadir un parámetro
Hola compañeros, tengo una pregunta sobre mql5:
Cómo calcular el beneficio de las posiciones abiertas hoy (si la posición se abrió ayer y se cerró hoy, esta posición no se tiene en cuenta) ????
Hola compañeros, tengo una pregunta sobre mql5:
Cómo calcular el beneficio de las posiciones abiertas hoy (si la posición se abrió ayer y se cerró hoy, esta posición no se tiene en cuenta) ????
Obviamente, comparando la hora de apertura de la posición con la hora de inicio de la jornada.