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

 
ryzhak.vladimir:

Hola, hay una serie de precios de cierre de las barras de 30 minutos de EURUSD desde el 01.01.2012 hasta el 31.12.2012. Lo consigo con la función CopyClose. Pero CopyClose[0] no es igual al precio de cierre de la última barra del 31.12.2012 en el terminal, si abro el gráfico. Por favor, dígame qué estoy haciendo mal. Por qué los precios de CopyClose y el precio real en el gráfico no coinciden

Antes de llamar a Close_buf[0] debe utilizar ArraySetAsSeries. Una vez, durante todo el funcionamiento del código EA/Script/indicador.

ArraySetAsSeries(Close_buf,true);
 
fyords:

ArraySetAsSeries debe utilizarse antes de llamar a Close_buf[0]. Una vez, durante toda la duración del código EA/script/indicador.

Sigue sin coincidir, muestra 1,32308 en lugar de 1,31964 (precio de cierre de la última barra en 2012)

//+------------------------------------------------------------------+
//|                                                    simpleBet.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
double Close_buf[];//динамический массив для хранения значений закрытия баров
string my_symbol = "EURUSD";//валютная пара
ENUM_TIMEFRAMES my_timeframe = PERIOD_M30;//таймфрейм
datetime testTimeStart = D'2012.01.01';
datetime testTimeEnd = D'2012.12.31';
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---    
     CopyClose(my_symbol,my_timeframe,testTimeStart,testTimeEnd,Close_buf); 
     ArraySetAsSeries(Close_buf,true);
     Print(Close_buf[0]);
  }
//+------------------------------------------------------------------+
 
ryzhak.vladimir:

Sigue sin coincidir, muestra 1,32308 en lugar de 1,31964 (precio de cierre de la última barra en 2012)

Usted establece
datetime testTimeEnd = D'2012.12.31';
Y si se pone
datetime testTimeEnd = D'2012.12.31 23:59:59';
 
Sí, ha funcionado, ¡gracias! Aunque todavía no está claro por qué los precios sólo coinciden cuando se da la fecha exacta, hasta los segundos
 
ryzhak.vladimir:
Sí, ha funcionado, ¡gracias! Sin embargo, todavía no entiendo por qué los precios sólo coinciden cuando se especifica la fecha exacta hasta los segundos

Probablemente porque el 2012.12.31 por defecto es el 2012.12.31 00:00:00, no el 2012.12.31 24:00

 
La cita de la documentación sobre la función CopyBuffer:"Los elementos de datos a copiar (buffer de indicadores con índice buffer_num) se cuentan desde la posición de inicio del presente al pasado, es decir, la posición de inicio igual a 0 significa la barra actual (valor del indicador para la barra actual). " Pero en la práctica, para tener la barra actual en el elemento 0, tenemos que aplicar ArraySetAsSeries(Close_buf,true). Pero está escrito en la documentación que por defecto copia la última barra del elemento 0. ¿Por qué hay tanta diferencia?
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ryzhak.vladimir: Cita de la documentación sobre la función CopyBuffer:"Los elementos de los datos copiados (buffer del indicador con índice buffer_num) se cuentan desde la posición de inicio del presente al pasado, es decir, la posición de inicio igual a 0 significa la barra actual (valor del indicador para la barra actual). " Pero en la práctica, para tener la barra actual en el elemento 0, tenemos que aplicar ArraySetAsSeries(Close_buf,true). Pero está escrito en la documentación que por defecto copia la última barra del elemento 0. ¿Por qué hay tanta diferencia?
Mira la figura más de cerca. ¿Dónde se está copiando el elemento 'start_pos'?
 
Se enfrenta al problema de la dirección psicológica.
Escribí un EA de tendencia y parece tener éxito. Ahora estoy escribiendo un EA plano y... Esta es la 5ª vez que este EA se reduce al anterior, como si estuviera atascado con un solo algoritmo. Todo comienza como "nuevo", pero después de que el algoritmo está estructurado, comienzo a escribir un EA que comienza a ajustarse al primero (exitoso) de todas las maneras posibles.

Si alguien se ha enfrentado a algo así, que me diga cómo "deshacerse" del imponente algoritmo, que sólo hace bajar el depósito del piso.
 
Lester: Si usted ha enfrentado con una mierda tal - dime cómo "deshacerse" del algoritmo imponente, que en el piso sólo drena el depósito.
No me he encontrado con algo así, pero para un cambio general de atención, intenta estudiar los algoritmos de otras personas.
 
Lester:

Se enfrenta al problema de la dirección psicológica.
Escribí un EA de tendencia y parece tener éxito. Ahora estoy escribiendo un EA plano y... Esta es la 5ª vez que este EA se reduce al anterior, como si estuviera atascado con un solo algoritmo. Todo comienza como "nuevo", pero después de que el algoritmo está estructurado, comienzo a escribir un EA que comienza a ajustarse al primero (exitoso) en todas las formas posibles.

Si alguien se ha enfrentado a algo así, que me diga cómo "deshacerse" del algoritmo, que lo único que hace es bajar el depósito del piso.
Su operador no tiene un problema psicológico, sino un problema de sistema: la falta de señales precisas de diferencia entre la tendencia y el plano. Una vez que entiendas este punto, todo te saldrá bien.
Razón de la queja: