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

 

Gracias, pero ella es

Vitaly Muzichenko:

iCustom para ayudar


iCustom es una buena solución para iCustom pero iCustom siempre ejecuta todo el código del indicador, y si necesito muchos parámetros del indicador en un EA (y es así) entonces en lugar de un cálculo del indicador obtendremos varios, lo que puede ralentizar significativamente el proceso hasta que se pierda el tick actual, me olvidé de las variables predefinidas.....

int tasas_total=Barras;

variable global definida

int prev_calculado=0;

se bloquea en el número de elementos de la matriz

 
ijonhson:

Lo siento, pero no entiendo por qué oncalculate debe pasar valores de variables predefinidas si son globales y también están disponibles

Vea un ejemplo

//+-------------------------------------------------------+
//|Параметры функции                             PROBA.mq4|
//+-------------------------------------------------------+
#property   strict

void OnStart()
{
 Alert(Сумма(2,5));
 
 int Сум=0;
 Сумма(2,5,Сум);  // Передаем в функцию 2 числа и получаем сумму
 Alert(Сум);
}

int Сумма(int a, int b)
{
  return a+b;
}

void Сумма(int a, int b, int & s)
{
  s= a+b;
}

Los parámetros de una función pueden ser de entrada - que le pasamos, y de salida - que nos devuelve

 
ijonhson: int rates_total=Bars; int prev_calculated=0;

Estas variables son necesarias para calcular toda la línea del indicador, pero se necesita un solo valor. Todo es mucho más sencillo. Analizar el programa de indicadores y determinar qué fórmula se utiliza para el cálculo. Y utiliza esta fórmula en el Asesor Experto

 

Chicos, decidme cómo implementar este algoritmo:

Hay una serie temporal con volumen Volumen

Quiero comparar el Volumen[1] para que sea mayor que cada una de las barras anteriores del Volumen[1] y especificar una ventana (número) de barras anteriores con una variable externa (extern int)


Escriba una muestra de código, si no es difícil

 
John Smith:

Chicos, decidme cómo implementar este algoritmo:

Hay una serie temporal con volumen Volumen

Quiero comparar el Volumen[1] para que sea mayor que cada una de las barras anteriores del Volumen[1] y especificar una ventana (número) de barras anteriores con una variable externa (extern int)


Escribir un ejemplo de código, si no es difícil

  for(int i=1; i<NumBar; i++) {
    ArrayResize(Buf, i);
    Buf[i-1] = Volume[i];
  }

 double min= Buf[ArrayMinimum(Buf)];
 double max= Buf[ArrayMaximum(Buf)];

 if(max < Volume[0]) { ... }
 
STARIJ:

¿Funcionó? ¿Cómo funcionaba antes?


Ha funcionado sin errores, parece que lo he quitado yo, por autorreemplazo vía ctrl+h, y no me he dado cuenta >_<. De todos modos, es probable que los Illuminati lo hayan hecho. Gracias de nuevo.

 
John Smith:

Chicos, decidme cómo implementar este algoritmo:

Hay una serie temporal con volumen Volumen

Quiero comparar el Volumen[1] para que sea mayor que cada una de las barras anteriores del Volumen[1] y especificar una ventana (número) de barras anteriores con una variable externa (extern int)


Escribir un ejemplo de código, si no es difícil

No es difícil. Lo escribí de memoria en las rodillas (puede que se me haya escapado algo)...

//+------------------------------------------------------------------+
bool IsLastVolumeTheLargest(const string symbol_name, const ENUM_TIMEFRAMES timeframe,const int start_pos,const int count)
  {
   long array[];  // Массив для хранения объёмов
   //--- если скопировалось меньше, чем нужно, вернём false
   if(CopyTickVolume(symbol_name,timeframe,start_pos,count,array)<count) return false;
   //--- вернём флаг того, что максимальный объём находится в последней ячейке массива (соответствует индексу start_pos)
   return ArrayMaximum(array)==count-1;
  }
//+------------------------------------------------------------------+
 

Hola. No puedo compartir el archivo. La tarea - necesito que el archivo de período más antiguo (por ejemplo, M20) se genere en М1 durante la prueba manual en el probador de МТ4 (MQL4). Para ello escribí un indicador basado en el script PeriodConverter. Como en el modo de prueba es imposible guardar el archivo (EURUSD20.csv) directamente en la carpeta Historial, el archivo se guarda en la carpeta compartida por todos los terminales - \MetaQuotes\Terminal\Common. A continuación, el script en bucle, que trabaja en un gráfico M1 estándar, copia los datos del archivo EURUSD20.csv al archivo EURUSD20.hst, situado en la carpeta History. El archivo EURUSD20.csv no puede abrirse en el script, si al mismo tiempo se abre en el indicador en el probador (5004 ERR_FILE_CANNOT_OPEN Error de apertura de archivo). Si se quita el indicador del probador, el archivo del script se abre y se copia sin problemas. El archivo se abre en el indicador de la siguiente manera: ExtHandle=FileOpen(c_símbolo+(cadena)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
El archivo en el script se abre de la siguiente manera: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ);
Por favor, indique mi error.

 
tvv:

Hola. No puedo compartir el archivo. La tarea - necesito que el archivo de período más antiguo (por ejemplo, M20) se genere en М1 durante las pruebas manuales en el probador de МТ4 (MQL4). Para ello escribí un indicador basado en el script PeriodConverter. Como en el modo de prueba es imposible guardar el archivo (EURUSD20.csv) directamente en la carpeta Historial, el archivo se guarda en la carpeta compartida por todos los terminales - \MetaQuotes\Terminal\Common. A continuación, el script en bucle, que trabaja en un gráfico M1 estándar, copia los datos del archivo EURUSD20.csv al archivo EURUSD20.hst, situado en la carpeta History. El archivo EURUSD20.csv no puede abrirse en el script, si al mismo tiempo se abre en el indicador en el probador (5004 ERR_FILE_CANNOT_OPEN Error de apertura de archivo). Si se quita el indicador del probador, el archivo del script se abre y se copia sin problemas. El archivo se abre en el indicador como sigue: ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_COMMON);
El archivo se abre en el script como sigue: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Por favor, señale mi error.

¿Lo has señalado?

 
Alexey Viktorov:

¿Lo has especificado?

No lo entiendo. Esta opción indica la ubicación del archivo - \MetaQuotes\Terminal\Common. Sin esta opción no podré coger el archivo que se generó en el probador. Sin esta opción el archivo será buscado en MQL4\Files - y no puedo poner el archivo del probador allí.

Razón de la queja: