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

 
Boss11:

Buenos días, queridos usuarios del foro.

Por favor, ayúdenme con la siguiente tarea:

Necesito obtener los datos del indicador en mt4 usando mql, por ejemplo MA5 con 1d timeframe, a partir de las 14.30 de anteayer.

Es decir, si ejecutara el script de iMA anteayer a las 14.30 horas, no se plantearía ninguna cuestión, pero cómo lo consigo hoy.

al menos dime dónde cavar

Es muy sencillo. Es necesario establecer 7 parámetros para calcular el iMA. El primer parámetro, el nombre del símbolo, es obvio. Como segundo, marco temporal, establece M1. El tercer parámetro - el período - establecer tantas veces como sea necesario, cuántos días es más de un minuto. El cuarto parámetro - shift = 0. Los dos siguientes parámetros -el método de promediación y el tipo de precio- ya los conoces. El último es el número de compás. Por favor, calcule el número de compás si sabe el tiempo que necesita. ¡Eso es todo! Vuelve a comprobarlo haciendo cálculos para los plazos M5 y M15. Tal vez incluso para la M30.

 
STARIJ:

Es muy sencillo. Para calcular el iMA se necesitan 7 parámetros. El primer parámetro, el nombre del símbolo, es obvio. Como segundo parámetro, marco temporal, establece M1. El tercer parámetro - el período - establecer tantas veces como sea necesario, cuántos días es más de un minuto. El cuarto parámetro - shift = 0. Los dos siguientes parámetros -el método de promediación y el tipo de precio- ya los conoces. El último es el número de compás. Por favor, calcule el número de compás si sabe el tiempo que necesita. ¡Eso es todo! Vuelve a comprobarlo haciendo cálculos para los plazos M5 y M15. Tal vez incluso para la M30.

Por desgracia, no es fácil. Si tomamos la MA5, marco de tiempo 1440 (1 día), seleccionamos la barra número 2 (anteayer), obtendremos la MA5 para la apertura o el cierre de la última vela, pero no el momento 14.30. Y eso es lo que tenemos que especificar. Una vez más. Los indicadores técnicos se calculan a partir de varias velas, se abren a las 00.00 (si hablamos de un día), se cierran a las 23.59, pero la última vela (si es de barra 0) no se cierra, y se toma el último precio de la barra 0 para su cálculo. Si la MA está en la barra cero, esto es fácil, pero si no está en la barra cero sino en la mitad del día anterior, ¿qué debemos hacer? Cómo podemos calcular МА en la mitad del día anterior en TF 1440?

 
Artyom Trishkin:

¡Muchas gracias! Me pondré a escribir el código :) Te haré saber los resultados.

 
Boss11:

Por desgracia, no es fácil. Si tomamos la MA5, marco de tiempo 1440 (1 día), seleccionamos la barra número 2 (anteayer), obtendremos la MA5 para la apertura o cierre de la última vela, pero no el momento 14.30. Y eso es lo que tenemos que especificar. Una vez más. Los indicadores técnicos se calculan a partir de varias velas, se abren a las 00.00 (si hablamos de un día), se cierran a las 23.59, pero la última vela (si es de barra 0) no se cierra, y se toma el último precio de la barra 0 para su cálculo. Si la MA está en la barra cero, esto es fácil, pero si no está en la barra cero sino en la mitad del día anterior, ¿qué debemos hacer? Cómo puedo calcular МА en la mitad del día anterior en TF 1440?


Es muy sencillo

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));
}

Así

 

¿Alguna idea de cómo organizar el envío de señales por script?

 

Necesito la ayuda de los entendidos

Tengo un código fuente de EA, compiló en 2014 y todo estaba bien.

He decidido escribir una nueva cuenta y compilar el EA en ella, pero no quiere compilar

Tengo 23 errores como estos ( } )

¿Qué debo hacer y qué ha cambiado desde 2014?

 
Boss11:

Por desgracia, no es fácil. Si tomamos la MA5, marco de tiempo 1440 (1 día), seleccionamos la barra número 2 (anteayer), obtendremos la MA5 para la apertura o cierre de la última vela, pero no el momento 14.30. Y eso es lo que tenemos que especificar. Una vez más. Los indicadores técnicos se calculan a partir de varias velas, se abren a las 00.00 (si hablamos de un día), se cierran a las 23.59, pero la última vela (si es de barra 0) no se cierra, y se toma el último precio de la barra 0 para su cálculo. Si la MA está en la barra cero, esto es fácil, pero si no está en la barra cero sino en la mitad del día anterior, ¿qué debemos hacer? Cómo puedo calcular МА en la mitad del día anterior en TF 1440?

Es muy sencillo. Para calcular el iMA se necesitan 7 parámetros. El primer parámetro, el nombre del símbolo, es obvio. Como segundo parámetro, el marco temporal, establece M1. El tercer parámetro - el período - establecer tantas veces como sea necesario, cuántos días es más de un minuto. El cuarto parámetro - shift = 0. Los dos siguientes parámetros -el método de promediación y el tipo de precio- ya los conoces. El último es el número de compás. Por favor, calcule el número de compás si sabe el tiempo que necesita. ¡Eso es todo! Vuelve a comprobarlo haciendo cálculos para los plazos M5 y M15. Tal vez incluso para la M30.
 

Hola. Gracias aSTARIJ y aArtyom Trishkin por la última consulta. Pero como todavía soy un novato, me surgen otras preguntas. Por ejemplo, lo siguiente. Utilizo la siguiente función para abrir sólo una posición en una barra:

void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }

E inmediatamente surge una pregunta: ¿Por qué tengo que enviar una variable estática "al principio del tiempo" cada vez que accedo a la función? Al fin y al cabo, acepta el valor cero por sí mismo en la primera llamada, y luego deja que almacene el valor de la barra cero anterior hasta la siguiente llamada, en lugar de ponerse a cero. Tal vez se pueda simplificar esta sencilla función. Sin embargo, yo mismo tengo miedo de meter la pata. Y una pregunta más sobre esta función: ¿no será que la expresiónNew_Time=Time[0]; no capta el milisegundo en que se abre una nueva barra? ¿Qué pasará entonces? Gracias.

 
novichok2018:

Hola. Gracias también aSTARIJ por la última consulta. Pero como todavía soy un novato, me surgen otras preguntas. Por ejemplo, lo siguiente. Utilizo la siguiente función para abrir sólo una posición en una barra:

E inmediatamente surge una pregunta: ¿Por qué tengo que enviar una variable estática "al principio del tiempo" cada vez que accedo a la función? Al fin y al cabo, acepta el valor cero por sí mismo en la primera llamada, y luego deja que almacene el valor de la barra cero anterior hasta la siguiente llamada, en lugar de ponerse a cero. Tal vez se pueda simplificar esta sencilla función. Sin embargo, yo mismo tengo miedo de meter la pata. Y una pregunta más sobre esta función: ¿no será que la expresiónNew_Time=Time[0]; no capta el milisegundo en que se abre una nueva barra? ¿Qué pasará entonces? Gracias.

Y puedes leer cuántas veces se inicializa una variable estática. Y la propia pregunta desaparecerá por lo absurda que es ;)
 
novichok2018:

Hola. Gracias aSTARIJ y aArtyom Trishkin por la última consulta. Pero como todavía soy un novato, me surgen otras preguntas. Por ejemplo, lo siguiente. Utilizo la siguiente función para abrir sólo una posición en una barra:

Y enseguida surge una pregunta: ¿Por qué tengo que enviar una variable estática "al principio del tiempo" cada vez que accedo a la función? Al fin y al cabo, acepta el valor cero por sí mismo en la primera llamada, y luego deja que almacene el valor de la barra cero anterior hasta la siguiente llamada, en lugar de ponerse a cero. Tal vez se pueda simplificar esta sencilla función. Sin embargo, yo mismo tengo miedo de meter la pata. Y tengo una pregunta más respecto a esta función: ¿no es posible que la expresiónNew_Time=Time[0]; no capte el milisegundo en que se abre una nueva barra? ¿Qué pasará entonces? Gracias.


En cuanto a la segunda pregunta,

si la primera garrapata no atrapa, la segunda lo hará.

Razón de la queja: