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

 
Igor Zakharov:

Utilice el indicador ATR

Gracias, pero sigo sin entender cómo se puede utilizar en mi caso.

Alguien lanzó un enlace a CopyRates (Gracias, lamentablemente el comentario ha sido eliminado), así que estoy tratando de entender iVolume() es la diferencia entre el precio alto y bajo o algo más?

Es decir, en mi caso (según entiendo) puedo crear un array de datos mensuales y semanales y luego promediar los valores, etc.

 
Alexander Layzerevich:

tratando de entender iVolume() ¿es la diferencia entre el precio alto y el precio bajo o algo más?

estos son volúmenes de ticks, haga clic derecho en el gráfico en MT y seleccione mostrar volúmenes - los histogramas aparecerán en la parte inferior del gráfico - esto es todo

https://docs.mql4.com/ru/series/ivolume

iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Значение тикового объема бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
 
Igor Makanu:

estos son los volúmenes de los ticks, haga clic con el botón derecho del ratón en el gráfico en MT y seleccione mostrar volúmenes - los histogramas aparecerán en la parte inferior del gráfico - estos son

https://docs.mql4.com/ru/series/ivolume

Muchas gracias por la aclaración.

Así que queda lo siguiente: Cree 2 matrices Altay Baja para calcular los datos del mes y 2 matricesAlta y Baja para calcular los de la semana.

Luego se promedia todo, etc.

Intentaré implementarlo todo en el código...

Tengo otra pregunta: ¿Cuál es la mejor manera de calcular el último mes y la última semana?

A juzgar por el ejemplo :

Referencia por posición inicial y número de elementos necesarios

intCopiarAlto(
stringsymbol_name,// nombre del símbolo
ENUM_TIMEFRAMEStimeframe,// período
intstart_pos,//donde empezar
intcuenta,// cuántos copiamos
doublehigh_array[]// matriz para copiar los precios máximos
);

timeframe = PERIOD_D1;

start_pos = 1; // barra anterior

count = 30; // 30 días (mes)

 
Alexander Layzerevich:

Otra pregunta: ¿Cuál es la mejor manera de contar el último mes y la última semana?

Es mejor ponerle fecha, ya que hay saltos de bares y fines de semana en los que no hay bares, así que esto ayudará:

Обращение по начальной и конечной датам требуемого интервала времени

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   datetime         start_time,       // с какой даты
   datetime         stop_time,        // по какую дату
   double           high_array[]      // массив для копирования максимальных цен
   );

https://docs.mql4.com/ru/series/copyhigh

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Функция получает в массив high_array исторические данные максимальных цен баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар. При копировании заранее неизвестного количества...
 
Igor Makanu:

Sería mejor fechar, ya que hay saltos (citas) de bares y fines de semana en los que no hay bares, eso ayudaría:

https://docs.mql4.com/ru/series/copyhigh

Gracias, sólo cómo dejar que el EA (Robot) saber qué fecha para empezar y dónde parar.

Me resulta más fácil contar 30 velas (30 días) desde el 1. O 7 candelabros (días).

Tengo este código:

//************************************************************************************************/
double iPointOrderStep()
{
double Awerage30 = 0, SummAwerage30 = 0;
double Awerage7 = 0, SummAwerage7 = 0;

double High30[], Low30[], High7[], Low7[];
//----------------Для месяца---------------------------
int iHigh30 = CopyHigh(Symbol(),PERIOD_D1,1,30,High30);
int iLow30 = CopyLow(Symbol(),PERIOD_D1,1,30,Low30);
//----------------Для недели---------------------------
int iHigh7 = CopyHigh(Symbol(),PERIOD_D1,1,7,High7);
int iLow7 = CopyLow(Symbol(),PERIOD_D1,1,7,Low7);

for(int i=0;i<30;i++) 
   {
      SummAwerage30 += (High30[i]-Low30[i]);
   }
for(int i=0;i<7;i++) 
   {
      SummAwerage7 += (High7[i]-Low7[i]);
   }

   Awerage30 = SummAwerage30/30;
   Awerage7 = SummAwerage7/7;
   
   double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2),0);
   return (iPointOrderStep/6);
}
//************************************************************************************************/

Pero lamentablemente da un valor = 0.

¿Puede decirme dónde está el error...

Y también...

¿Cómo hacer el cálculo una vez a la semana al inicio de la sesión o cuando se reinicie el terminal?

 
Alexander Layzerevich:

Gracias, pero aún no he entendido cómo se puede utilizar en mi caso.

La esencia del ATR es la altura media de las barras durante un periodo. También podría usar MA(alta)-MA(baja). Es más fácil que desdoblar el rebasamiento

 
Igor Zakharov:

La esencia del ATR es la altura media de las barras durante un periodo. También podría utilizar MA(high)-MA(low). Es más fácil que invertir el rebasamiento

es decir, según el Ejemplo

intiATR(
stringsymbol,// nombre del símbolo
ENUM_TIMEFRAMESperiodo,// periodo
intma_period// periodo de media
);

double Awerage30= iATR(Symbol(),PERIOD_D1, 30); este será el valor numérico medio de 30 días ?

 
Alexander Layzerevich:

es decir, según el Ejemplo

intiATR(
stringsymbol,// nombre del símbolo
ENUM_TIMEFRAMESperiodo,// periodo
intma_period// periodo de media
);

double Awerage30= iATR(Symbol(),PERIOD_D1, 30); será el valor medio de 30 días ?

No son días naturales. 30 días hacia atrás (domingos, sábados)

A juzgar por la función sin desplazamiento de parámetros que estás haciendo en el 5, y has hecho una pregunta en el 4 :)

 
Igor Zakharov:

Sólo que no los de calendario. Barras de 30 días hacia atrás (domingos, sábados)

A juzgar por la función sin el parámetro de desplazamiento que está haciendo en el 5 y usted hizo la pregunta en el 4 :)

Esta rama es para ambos terminales. Especialmente con las mismas funciones.

 
Artyom Trishkin:
Esta rama está en ambas terminales. Especialmente con las mismas funciones.

¿Hay que corregir el título entonces?