Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1154

 

MT4

¿Qué es este artículo y para qué sirve, no encuentro una descripción en ningún sitio?

¿Cómo lo desactivo por defecto?


 
void OnStart()
  {
string text="Hello man";
   string keystr="ABCDEFG";
   uchar src[],dst[],key[];
//--- подготовка ключа шифрования
   StringToCharArray(keystr,key);
//--- подготовка исходного массива src[]
   StringToCharArray(text,src);
//--- вывод исходных данных
   PrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//--- шифрование массива src[] методом DES с 56-битным ключом key[]
   int res=CryptEncode(CRYPT_AES256,src,key,dst);
//--- проверка результата шифрования
   if(res>0)
     {
      //--- вывод шифрованных данных
      PrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst));
      //--- расшифровка данных массива dst[] методом DES с 56-битным ключом key[]
      res=CryptDecode(CRYPT_AES256,dst,key,src);
      //--- проверка результата
      if(res>0)
        {
         //--- вывод дешифрованных данных
         PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
        }
      else
         Print("Ошибка в CryptDecode. Код ошибки=",GetLastError());
     }
   else
      Print("Ошибка в CryptEncode. Код ошибки=",GetLastError());
  }
//+------------------------------------------------------------------+
string ArrayToHex(uchar &arr[],int count=-1)
  {
   string res="";
//--- проверка размера
   if(count<0 || count>ArraySize(arr))
      count=ArraySize(arr);
//--- преобразование в шестнадцатиричную строку
   for(int i=0; i<count; i++)
      res+=StringFormat("%.2X",arr[i]);
//---
   return(res);
  }

Estoy intentando ejecutar el ejemplo de criptografía del manual, peroutilizo el método CRYPT_AES256 en lugar deCRYPT_DES. El resultado es el error 4029 después del métodoCryptEncode

 
Dmitri Custurov:

Estoy intentando ejecutar el ejemplo de criptografía del manual, peroutilizo el método CRYPT_AES256 en lugar deCRYPT_DES. Como resultado, el error 4029 después del métodoCryptEncode

Lo he descubierto. Necesita una llave más cuidadosa))

 

¡Hola!

Soy tonto y no puedo resolverlo por mí mismo, por favor, aconsejadme cuál puede ser el problema o al menos indicadme la dirección correcta.

Diferentes indicadores están empezando a mostrar una parte diferente de la historia de forma sincronizada. Ocurre a veces, no todos los días.

Pensé que la razón es que los indicadores no procesan correctamente el historial cargado dinámicamente. He probado todo lo referente a la correcta actualización del indicador en el historial de actualizaciones, no sé qué más hay que hacer para evitarlo.

El corredor Alpari. MT5 build 2363 del 13.03.2020.

Las capturas de pantalla muestran primero la versión "fallida".

Luego la versión correcta después de la actualización manual.

//+------------------------------------------------------------------+
bool IsReadyForCalculate(const int rates_total,const int prev_calculated,const datetime &time[])
  {
   //--- подключение терминала и синхронизация данных
   if(TerminalInfoInteger(TERMINAL_CONNECTED))  
      if(!SymbolIsSynchronized(_Symbol) || 
         !SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED))   return(false);
   //--- некорректное значение prev_calculated
   if(prev_calculated<0)                  return(false);
   //---
   if(prev_calculated==0)     prev_time = time[rates_total-1];
   //--- произошли изменения в данных, но prev_calculated не сброшен в 0
   //--- или изменение времени не соответствует одному бару
   if(  (rates_total!=prev_calculated+1 &&
         rates_total!=prev_calculated &&
         prev_calculated!=0) ||
        (time[rates_total-1]>prev_time &&
         time[rates_total-2]!=prev_time))
     {
      loc_prev_calculated = 0;    // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
      return(true);
     }
   //--- корректный сценарий
   if(  (rates_total==prev_calculated   || rates_total==prev_calculated+1 || prev_calculated==0) &&
        (time[rates_total-1]==prev_time || time[rates_total-2]==prev_time))
     {
      loc_prev_calculated = prev_calculated;
      return(true);
     }
   //--- 
   return(false);       // верну false, пока не знаю, какие варианты ещё могут быть
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
  {
   if(!IsReadyForCalculate(rates_total,prev_calculated,time))     return(0);
//---
        // вызов функции зигзага
   
//--- return value of prev_calculated for next call
   prev_time = time[rates_total-1];
   return(rates_total);
  }
//+------------------------------------------------------------------+
Archivos adjuntos:
 

Hola.

Tengo esta pregunta en MQL5. ¿Cómo puedo forzar el inicio de la función OnChartEvent()? ¿Hay alguna forma estándar de hacerlo?

Para ello, utilizo la función ChartNavigate() y la ejecuto desde OnChartEvent(). Pero funciona de forma inestable - cuando entran muchos ticks, a menudo OnChartEvent() no se reinicia después de llamar a ChartNavigate() por alguna razón. No puedo entender cómo está conectado - ChartNavigate() y la tasa de llegada de los ticks, pero sin embargo sucede.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
inwinterborn:

¡Hola!

Soy tonto y no puedo resolverlo por mí mismo, por favor, aconsejadme cuál puede ser el problema o al menos indicadme la dirección correcta.


      loc_prev_calculated = 0;    // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
      return(true);

Tal vez añadí esto recientemente para nada...

Eliminado
loc_prev_calculated 

Lo he sustituido por...

      return(false);

Lo vigilaré.


Por favor, háblame de los indicadores estándar que vienen con la MT5, ¿cómo funcionan? ¿Se desploman como yo en las capturas de pantalla de arriba?

 

Buenos días a todos!
Estoy dominando la función doble OnTester() y la función TesterStatistics( ). Escribí un código sencillo para mi probador en MT4, que abre una orden cada día a las 10:00, a las 16:00, a las 20:00 y a las 01:00. Al final de la prueba, la función TesterStatistics( ) devuelve el valor de saldo más pequeño (es decir, la reducción relativa).

PROBLEMA

TesterStatistics( ) devuelve el valor de saldo más pequeño para TODAS las órdenes abiertas

PREGUNTA

¿Qué construcción del lenguaje se puede utilizar para que TesterStatistics() devuelva el valor de saldo más pequeño sólo para una orden abierta a una hora determinada, por ejemplo a las 16:00? En este caso, todas las órdenes especificadas en el código deben probarse simultáneamente. Esto significa que TesterStatistics debe seguir la dinámica del saldo para una sola orden abierta a las 16:00 y al final de la prueba, mostrar el valor del saldo mínimo sólo para la orden abierta a las 16:00.

Estaría muy agradecido si pudiera insertar la construcción de lenguaje requerida en mi código. Me permitirá comprender rápidamente el algoritmo de solución de mi problema.
Aquí está mi código.

int H;
double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
 
ANDREY:

¡Buenos días a todos!
He dominado el doble OnTester() y TesterStatistics( ). He escrito un código sencillo para mi probador en MT4, que abre una orden a las 10:00, a las 16:00, a las 20:00 y a las 01:00 cada día. Al final de la prueba, la función TesterStatistics devuelve el valor de saldo más pequeño (es decir, la reducción relativa).

PROBLEMA

TesterStatistics( ) devuelve el valor de saldo más bajo para TODAS las órdenes abiertas

PREGUNTA

¿Qué construcción del lenguaje se puede utilizar para que TesterStatistics() devuelva el valor de saldo más pequeño sólo para una orden abierta a una hora determinada, por ejemplo a las 16:00? En este caso, todas las órdenes especificadas en el código deben probarse simultáneamente. Es decir, TesterStatistics( ) debería seguir la dinámica del saldo de una sola orden abierta a las 16:00 y al final de la prueba, devolver el valor mínimo del saldo de la orden abierta a las 16:00 solamente.

Estaría muy agradecido, si pudiera insertar el lenguaje requerido en mi código. Esto me permitirá comprender muy rápidamente el algoritmo para resolver mi problema.
Aquí está mi código.

int H;
double  TesterStatistics( );
void OnTick()

¿Qué es?

 
 Сергей Таболин
:

¿Es esto lo que es?

Gracias por sus comentarios. Gracias a ti me he dado cuenta de que especificando la funciónTesterStatistics( ); junto con la declaración de la variable global H ... fue mi error. Lo he arreglado.

int H;
//double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
¡Buenos días! ¿Cómo puedo implementar la visualización de los datos de las barras altas y bajas en un gráfico? Y resaltar el mismo color.
Razón de la queja: