Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1436

 

¡Hola!


¿Cómo se ve en MQL5 el código que permite al Asesor Experto operar a ciertas horas? No puedo portarlo desde MQL4.


void OnTick()

{

double PriceBid=MarketInfo(0,MODE_BID);

double time = Hora() + Minuto()*0.01;

Comentario("datum ",inpoint,

"\n", "paso ",iter,

"n", "tiempo ",tiempo,

"n", "precio", Oferta,

"\n", "precio", PrecioOferta);

if(time <= Stop_work_time)

{

//if(Type==BUY || Type==ALL)newbuyorder();

//if(Tipo==VENDER || Tipo==ALL)nuevopedidodeventa();

en();

taketop();

stoporders();

conectado();

delorders();

}

else

{

taketop();

delorders();

}

}

Archivos adjuntos:
kachinmind.mq4  38 kb
 
EfremovSergey permite a un Asesor Experto operar a ciertas horas? No puedo portarlo desde MQL4.


void OnTick()

{

double PriceBid=MarketInfo(0,MODE_BID);

double tiempo = Hora() + Minuto()*0.01;

Comentario("datum ",inpoint,

"{n", "paso ",iter,

"n", "tiempo",tiempo,

"n", "precio", Oferta,

"\n", "precio", PrecioOferta);

if(time <= Stop_work_time)

{

//if(Tipo==BUY || Tipo==ALL)nuevopedido();

//if(Tipo==VENDER || Tipo==ALL)nuevopedido de venta();

en();

taketop();

stoporders();

conectado();

delorders();

}

si no

{

taketop();

delorders();

}

}

La implementación de esta tarea en mq5 puede repetirse utilizando

MqlDateTime
 

¡Buenos días y buen humor a todos!

¡¡¡Estimados expertos!!! ¿Podrían decirme qué es lo que falla en este código (la parte donde aparece el error periódicamente está resaltada en amarillo)?

//+------------------------------------------------------------------+
//|                                            Proba (version_1).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- Global variables
MqlRates pArray[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(pArray,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!DownwardTrendline())
     {
      Print("Ошибка при создании линии DownwardTrendline!!! ", GetLastError());
      return;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool DownwardTrendline()
  {
   int candles=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   CopyHigh(_Symbol,_Period,0,candles,pHigh);
   int candleHigh = ArrayMaximum(pHigh,0,candles);
   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
   ObjectDelete(0,"DnwardTrendline");
   ObjectCreate(0,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,
                pArray[candleHigh].high,pArray[0].time,pArray[0].high);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
   return(true);
  }
//+------------------------------------------------------------------+

Por qué periódicamente, luego funciona en el probador de estrategias, luego no funciona y en el log aparece este mensaje:


Saludos, Vladimir.

 
MrBrooklin #:

¡Buenos días y buen humor a todos!

¡¡¡Estimados expertos!!! Por favor, decidme qué falla en este código (la parte del código donde aparece el error periódicamente está resaltada en amarillo):

Por qué periódicamente, luego funciona en el probador de estrategias, luego no funciona y en el log aparece este mensaje:


Saludos, Vladimir.

Ponga un cheque después de la línea

   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

si Data < 1 algo, de alguna manera gritar.

 
Alexey Viktorov #:

Ponga una marca después de la línea

si Data < 1 algo, gritar de alguna manera.

Buenos días Alexey, ¡gracias por la sugerencia! Voy a intentarlo ahora.

Saludos, Vladimir.

 

En lugar de:

   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

Lo puse:

   if(CopyRates(_Symbol,_Period,0,candles,pArray)==-1)
     {
      Print("Ошибка копирования исторических данных в массив pArray[]!!!", GetLastError());
      return(false);
     }

y todo funcionó. Dibuja lalínea de manera constante y como debe ser, pero sólo ahora en cada nuevo inicio del Asesor Experto en el probador de estrategias aparecen mensajes periódicamente:

2023.01.20 11:23:37.064 2022.01.03 03:21:49   Ошибка копирования исторических данных в массив pArray[]!!!4003
2023.01.20 11:23:37.064 2022.01.03 03:21:49   Ошибка при создании линии DownwardTrendline!!! 4003

¿Esto, entonces de alguna manera afectará negativamente el código o puedo "olvidarme" de él?

Saludos, Vladimir.

 
MrBrooklin probador de estrategias:

¿Esto, entonces, de alguna manera afecta negativamente el código o puedo "olvidarme" de él?

Saludos, Vladimir.

¿Qué te impide hacer esto

bool .....()
{
if(Data>0)
{
..................
................

return true;
}
return false;
}
 
Vladimir Deryagin #:

¿Qué te impide hacerlo?

¡Hola, Vladimir! Es la edad. Los cerebros no son tan flexibles y rápidos como los jóvenes. )))

Gracias por su opción.

Saludos, Vladimir.

P.D. Arreglado. ¡¡¡Todo funciona perfectamente!!! Una vez más, ¡muchas gracias a todos por vuestra ayuda!
 
Quien me puede ayudar, en el Expert Advisor quiero determinar el valor del MACD D1 [1] si es positivo o negativo para dar la definición de dos variables. Todo esto en MQL5.
 

Ya lo he comentado muchas veces, usa un script para cargar el historial, atorníllalo al robot para que se ejecute al arrancar, comprueba el historial al instante y si falta, lo carga

Es raro que el propio terminal no lo haga perfectamente.

En el pasado tenía errores constantes en la obtención de asas.

Debo añadir, que también puedes especificar la profundidad del historial en el script.