¿Qué quiere conseguir exactamente? ¿Quiere saber la hora de la última operación(tipo de operación "fuera del mercado")? ¿O necesita saber la hora de cierre de una posición en el historial de operaciones?
Es necesario conocer la hora de la última posición cerrada en el historial de operaciones.
El código que escribí funcionará en MQL5, aunque enganché la bibliotecafxsaber funciona código mt4, pero aún así, la pregunta sigue siendo, ¿no puedo hacer la funciónOrderCloseTime() en MQL5? Sin embargo, será mejor que lo deje. Tengo más bien una pregunta para los desarrolladores. No tengo que responder. He leído la historia en la rama. Hasta ahora no he entendido muchas cosas, quizás con el tiempo reconsidere mi opinión sobre el lenguaje MQL5.
Necesito saber la hora de la última posición cerrada en el historial de operaciones.
El código que escribí funcionará en MQL5, aunque he enganchado la bibliotecafxsaber, el código mt4 sigue funcionando, pero la pregunta sigue siendo, ¿no puedo hacer la función OrderCloseTime() en MQL5? Sin embargo, será mejor que lo deje. Tengo más bien una pregunta para los desarrolladores. No tengo que responder. He leído la historia en la rama. Hasta ahora no he entendido muchas cosas, quizás con el tiempo reconsidere mi opinión sobre el lenguaje MQL5.
Es muy sencillo. Sólo hay que leerlo primero y luego sacar conclusiones :)
Necesito saber la hora de la última posición cerrada en el historial de operaciones.
El código que escribí funcionará en MQL5, aunque he enganchado la bibliotecafxsaber, el código mt4 sigue funcionando, pero la pregunta sigue siendo, ¿no puedo hacer la función OrderCloseTime() en MQL5? Sin embargo, será mejor que lo deje. Tengo más bien una pregunta para los desarrolladores. No tengo que responder. He leído la historia en la rama. Todavía no entiendo muchas cosas, quizás con el tiempo reconsidere mi opinión sobre el lenguaje MQL5.
Utilice un método muy sencillo (sobre todo porque en el 99% de las cuentas de cobertura el tipo de operación es "salida del mercado", es decir, el cierre de la posición).
Captura en línea de la transacciónTRADE_TRANSACTION_DEAL_ADD- añade la transacción al historial, comprueba que ha sido de COMPRA o de VENTA, comprueba que ha sido una transacción de salida del mercadoDEAL_ENTRY_OUT
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_ticket =0;
long deal_order =0;
long deal_time =0;
long deal_time_msc =0;
long deal_type =-1;
long deal_entry =-1;
long deal_magic =0;
long deal_reason =-1;
long deal_position_id =0;
double deal_volume =0.0;
double deal_price =0.0;
double deal_commission =0.0;
double deal_swap =0.0;
double deal_profit =0.0;
string deal_symbol ="";
string deal_comment ="";
string deal_external_id ="";
if(HistoryDealSelect(trans.deal))
{
deal_ticket =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
deal_order =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
deal_time =HistoryDealGetInteger(trans.deal,DEAL_TIME);
deal_time_msc =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_magic =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
deal_reason =HistoryDealGetInteger(trans.deal,DEAL_REASON);
deal_position_id =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);
deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
deal_price =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
deal_commission =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
deal_swap =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
deal_profit =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_comment =HistoryDealGetString(trans.deal,DEAL_COMMENT);
deal_external_id =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
}
elsereturn;
ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
if(deal_symbol==ИМЯ ВАШЕГО СИМВОЛА && deal_magic==НОМЕР ВАШЕГО MAGIC)
{
if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
{
if(deal_entry==DEAL_ENTRY_OUT)
{
*** ***
}
}
}
}
}
Generé un simple Asesor Experto usando el Asistente VQL5, el código se da a continuación. Ayúdenme a entender por qué la función "Expiración de órdenes pendientes (en barras)" no funciona, traducida como "Expiración de órdenes pendientes (en barras)". He establecido cualquier valor de Signal_Expiration de 1 a 1000, pero la orden pendiente sigue existiendo sólo en una barra. También adjunto la configuración de los parámetros.
Para las pruebas, estoy utilizando una cuenta demo en el terminal Metatrader 5, build 2136.
Sinceramente, Vladimir.
//+------------------------------------------------------------------+//| EA_MasterMQL5.mq5 |//| Copyright 2019, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2019, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| Include |//+------------------------------------------------------------------+#include <Expert\Expert.mqh>
//--- available signals#include <Expert\Signal\SignalITF.mqh>
//--- available trailing#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+//| Inputs |//+------------------------------------------------------------------+//--- inputs for expertinputstring Expert_Title ="EA_MB_MasterMQL5"; // Document nameulong Expert_MagicNumber =1473; //bool Expert_EveryTick =false; ////--- inputs for main signalinputint Signal_ThresholdOpen =0; // Signal threshold value to open [0...100]inputint Signal_ThresholdClose =0; // Signal threshold value to close [0...100]inputdouble Signal_PriceLevel =0.0; // Price level to execute a dealinputdouble Signal_StopLevel =50.0; // Stop Loss level (in points)inputdouble Signal_TakeLevel =50.0; // Take Profit level (in points)inputint Signal_Expiration =4; // Expiration of pending orders (in bars)inputint Signal_ITF_GoodHourOfDay=-1; // IntradayTimeFilter(-1,...) Good hourinputint Signal_ITF_BadHoursOfDay=8389119; // IntradayTimeFilter(-1,...) Bad hours (bit-map)inputint Signal_ITF_GoodDayOfWeek=-1; // IntradayTimeFilter(-1,...) Good day of weekinputint Signal_ITF_BadDaysOfWeek=0; // IntradayTimeFilter(-1,...) Bad days of week (bit-map)inputdouble Signal_ITF_Weight =1.0; // IntradayTimeFilter(-1,...) Weight [0...1.0]//--- inputs for moneyinputdouble Money_FixRisk_Percent =10.0; // Risk percentage//+------------------------------------------------------------------+//| Global expert object |//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+//| Initialization function of the expert |//+------------------------------------------------------------------+intOnInit()
{
//--- Initializing expertif(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//--- failedprintf(__FUNCTION__+": error initializing expert");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Creating signal
CExpertSignal *signal=new CExpertSignal;
if(signal==NULL)
{
//--- failedprintf(__FUNCTION__+": error creating signal");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//---
ExtExpert.InitSignal(signal);
signal.ThresholdOpen(Signal_ThresholdOpen);
signal.ThresholdClose(Signal_ThresholdClose);
signal.PriceLevel(Signal_PriceLevel);
signal.StopLevel(Signal_StopLevel);
signal.TakeLevel(Signal_TakeLevel);
signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalITF
CSignalITF *filter0=new CSignalITF;
if(filter0==NULL)
{
//--- failedprintf(__FUNCTION__+": error creating filter0");
ExtExpert.Deinit();
return(INIT_FAILED);
}
signal.AddFilter(filter0);
//--- Set filter parameters
filter0.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
filter0.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
filter0.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
filter0.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
filter0.Weight(Signal_ITF_Weight);
//--- Creation of trailing object
CTrailingNone *trailing=new CTrailingNone;
if(trailing==NULL)
{
//--- failedprintf(__FUNCTION__+": error creating trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add trailing to expert (will be deleted automatically))if(!ExtExpert.InitTrailing(trailing))
{
//--- failedprintf(__FUNCTION__+": error initializing trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set trailing parameters//--- Creation of money object
CMoneyFixedRisk *money=new CMoneyFixedRisk;
if(money==NULL)
{
//--- failedprintf(__FUNCTION__+": error creating money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add money to expert (will be deleted automatically))if(!ExtExpert.InitMoney(money))
{
//--- failedprintf(__FUNCTION__+": error initializing money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set money parameters
money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parametersif(!ExtExpert.ValidationSettings())
{
//--- failed
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Tuning of all necessary indicatorsif(!ExtExpert.InitIndicators())
{
//--- failedprintf(__FUNCTION__+": error initializing indicators");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- okreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Deinitialization function of the expert |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+//| "Tick" event handler function |//+------------------------------------------------------------------+voidOnTick()
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+//| "Trade" event handler function |//+------------------------------------------------------------------+voidOnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+//| "Timer" event handler function |//+------------------------------------------------------------------+voidOnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
2019.09.09 18:03:27.865 Terminal MetaTrader 5 x64 build 2138 iniciado (MetaQuotes Software Corp.)

2019.09.09 18:03:27.866 Terminal Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i7-3770K @ 3.50GHz, Memoria: 20544 / 24520 Mb, Disco: 145 / 237 Gb, GMT+2
2019.09.09 18:03:27.866 Terminal C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
La visión habitual de mi ME:
Lo cierro después del trabajo, nada depende de cómo lo cierre.
La próxima vez que abra el ME, se verá así:
Ver - Barras de herramientas se puede configurar todo.
Todo se repite tras el apagado.
2019.09.09 18:03:27.865 Terminal MetaTrader 5 x64 build 2138 iniciado (MetaQuotes Software Corp.)
2019.09.09 18:03:27.866 Terminal Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i7-3770K @ 3.50GHz, Memoria: 20544 / 24520 Mb, Disco: 145 / 237 Gb, GMT+2
2019.09.09 18:03:27.866 Terminal C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
La visión habitual de mi ME:
Lo cierro después del trabajo, nada depende de cómo lo cierre.
La próxima vez que abra el ME, se verá así:
Ver - Barras de herramientas se puede configurar todo.
Todo se repite tras el apagado.
Ahora pulse F12
2019.09.09 18:03:27.865 Terminal MetaTrader 5 x64 build 2138 iniciado (MetaQuotes Software Corp.)
2019.09.09 18:03:27.866 Terminal Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i7-3770K @ 3.50GHz, Memoria: 20544 / 24520 Mb, Disco: 145 / 237 Gb, GMT+2
2019.09.09 18:03:27.866 Terminal C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
La visión habitual de mi ME:
Lo cierro después del trabajo, nada depende de cómo lo cierre.
La próxima vez que abra el ME, se verá así:
Ver - Barras de herramientas se puede configurar todo.
Tras la desconexión, todo se repite.
Intenta abrir la Carpeta de Datos allí ve a \config, cierra la terminal y el MetaEditor, borra el archivo metaeditor.ini
Ahora pulse F12
Esto ha funcionado.
Muchas gracias.
Pruebe a abrir la carpeta de datos allí ir a \config, cerrar el terminal y MetaEditor, borrar el archivo metaeditor.ini
F12 funcionó, así que no se necesita nada más.
Gracias por la ayuda.
F12 ha funcionado, así que no hace falta nada más.
Gracias por toda su ayuda.
Vaya. ¡No sabía de la existencia de F12 (expandir a pantalla completa) para el MetaEditor 5!
¿Qué quiere conseguir exactamente? ¿Quiere saber la hora de la última operación(tipo de operación "fuera del mercado")? ¿O necesita saber la hora de cierre de una posición en el historial de operaciones?
Es necesario conocer la hora de la última posición cerrada en el historial de operaciones.
El código que escribí funcionará en MQL5, aunque enganché la bibliotecafxsaber funciona código mt4, pero aún así, la pregunta sigue siendo, ¿no puedo hacer la funciónOrderCloseTime() en MQL5? Sin embargo, será mejor que lo deje. Tengo más bien una pregunta para los desarrolladores. No tengo que responder. He leído la historia en la rama. Hasta ahora no he entendido muchas cosas, quizás con el tiempo reconsidere mi opinión sobre el lenguaje MQL5.
Necesito saber la hora de la última posición cerrada en el historial de operaciones.
El código que escribí funcionará en MQL5, aunque he enganchado la bibliotecafxsaber, el código mt4 sigue funcionando, pero la pregunta sigue siendo, ¿no puedo hacer la función OrderCloseTime() en MQL5? Sin embargo, será mejor que lo deje. Tengo más bien una pregunta para los desarrolladores. No tengo que responder. He leído la historia en la rama. Hasta ahora no he entendido muchas cosas, quizás con el tiempo reconsidere mi opinión sobre el lenguaje MQL5.
Es muy sencillo. Sólo hay que leerlo primero y luego sacar conclusiones :)
Necesito saber la hora de la última posición cerrada en el historial de operaciones.
El código que escribí funcionará en MQL5, aunque he enganchado la bibliotecafxsaber, el código mt4 sigue funcionando, pero la pregunta sigue siendo, ¿no puedo hacer la función OrderCloseTime() en MQL5? Sin embargo, será mejor que lo deje. Tengo más bien una pregunta para los desarrolladores. No tengo que responder. He leído la historia en la rama. Todavía no entiendo muchas cosas, quizás con el tiempo reconsidere mi opinión sobre el lenguaje MQL5.
Utilice un método muy sencillo (sobre todo porque en el 99% de las cuentas de cobertura el tipo de operación es "salida del mercado", es decir, el cierre de la posición).
Captura en línea de la transacciónTRADE_TRANSACTION_DEAL_ADD- añade la transacción al historial, comprueba que ha sido de COMPRA o de VENTA, comprueba que ha sido una transacción de salida del mercadoDEAL_ENTRY_OUT
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia
Preguntas de los principiantes MQL5 MT5 MetaTrader 5
MrBrooklin, 2019.09.09:50
¡Buenos días a todos y grandes beneficios!
Generé un simple Asesor Experto usando el Asistente VQL5, el código se da a continuación. Ayúdenme a entender por qué la función "Expiración de órdenes pendientes (en barras)" no funciona, traducida como "Expiración de órdenes pendientes (en barras)". He establecido cualquier valor de Signal_Expiration de 1 a 1000, pero la orden pendiente sigue existiendo sólo en una barra. También adjunto la configuración de los parámetros.
Para las pruebas, estoy utilizando una cuenta demo en el terminal Metatrader 5, build 2136.
Sinceramente, Vladimir.