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

 
STARIJ:

El cruce de MA se produce entre barras - cogió un claro ejemplo

La MA de las barras a la izquierda y a la derecha del cruce es diferente del precio en el punto de cruce. Entiendo que el que pregunta quiere el valor en el punto exacto de cruce en lugar del valor en una de las barras vecinas. Este valor exacto puede obtenerse mediante interpolación lineal, ya que la MA entre barras se construye como segmentos de línea recta. O tomar las coordenadas de cada MA en barras adyacentes. Construye analíticamente 2 rectas y calcula su punto de intersección. Se puede calcular considerando 2 triángulos similares. Surge una pregunta contraria: ¿por qué lo necesitamos? ¿Son los costes proporcionales al valor del resultado? Al fin y al cabo, los puntos de intersección se moverán si los parámetros del MA se modifican mínimamente. Lo más probable es que lo exija el director del proyecto del curso

Gracias por la aclaración, entiendo que no es fácil de hacer
 
missha32:

No puedo encontrar el error en mis cálculos.
Necesito encontrar el máximo y el mínimo del día anterior, pero por alguna razón el mínimo fue el día anterior

Es mejor utilizar CopyHigh y CopyLow con el periodo PERIOD_D1 y la barra o el tiempo correspondiente.

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
 
missha32: Necesito encontrar el máximo y el mínimo del día anterior, pero por alguna razón el mínimo está en el día anterior
  // iHigh и iLow дают макс и мин цены указанного бара. Если PERIOD_D1, то целых суток  если 1 то вчерашних последних завершенных суток

   Alert("Максимум вчерашнего дня = ", iHigh(_Symbol, PERIOD_D1, 1));
   Alert("Минимум  вчерашнего дня = ", iLow(_Symbol,  PERIOD_D1, 1));
Cualquier barra de cualquier Timeframe contiene información generalizada del correspondiente intervalo de barras de Timeframes inferiores: Máximo; Mínimo; Hora de apertura igual al tiempo de la primera barra del intervalo; Hora de cierre igual al tiempo de la última barra del intervalo; Volumen igual a la suma de los volúmenes de las barras del intervalo. Más concretamente, esta información está contenida en las respectivas matrices
 
STARIJ:
Cualquier barra de cualquier Timeframe contiene información generalizada del correspondiente intervalo de barras de Timeframes inferiores: máximo, mínimo, hora de apertura y cierre y volumen igual a la suma de los volúmenes de las barras inferiores. Más concretamente, esta información está contenida en las matrices correspondientes

Lo haría, pero es posible que no pueda calcular los datos usando más algoritmos, ya que tendría que buscar otros valores de ayer y sería una tarea volver a escribir las funciones.

Si pudieras decirme dónde está el error en mi código, no lo entiendo. Cuando intento mostrar el número de barras todas encajan, pero cuando intento obtener el máximo o el mínimo, no muestra lo que debería.

 
missha32:

Lo haría, pero puede que no sea capaz de calcular los datos porque tendría que buscar otros valores de ayer y sería un coñazo volver a escribir las funciones.

Si pudieras decirme dónde está el error en mi código, no lo entiendo. Cuando muestro el número de barras en la pantalla, todo converge, pero cuando intento obtener el máximo o el mínimo, no muestra lo que debería.

Has hecho tanto lío que no puedo ni siquiera darle sentido. Una montaña de conversiones de uno a otro...

¿Y todo para encontrar el máximo y el mínimo del día?

¿Qué es lo que no te funciona?

//+------------------------------------------------------------------+
double GetPriceMaximum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены High: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
double GetPriceMinimum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены Low: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

¿Necesitas saber los máximos del día? Por favor:

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,0);

¿Necesita saber el máximo de ayer? Fácil:

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,1);

¿Necesitas saber el mínimo de anteayer? No hay problema:

double min_price=GetPriceMinimum(Symbol(),PERIOD_D1,2);

Bueno, podrías tomar el camino más fácil y utilizar funciones cuádruples puras:

double price_max=iHigh(Symbol(),PERIOD_D1,1);

Pero yo no aconsejaría - usando nuevas construcciones de lenguaje, te preparas a ti mismo y a tu código para que algún día no se soporte el cuádruple, y la autodisciplina y todo eso ;)

 
Artyom Trishkin:

Has hecho un lío tan grande que es difícil de ordenar. Una montaña de conversiones de una cosa a otra...

¿Todo para encontrar los altos y bajos del día?

¿Qué es lo que no te funciona?

¿Necesitas saber los máximos del día? Por favor:

¿Necesita saber el máximo de ayer? Fácil:

¿Necesitas saber el mínimo de anteayer? No hay problema:

Bueno, podrías tomar el camino más fácil y utilizar funciones cuádruples puras:

Pero yo no aconsejaría - usando nuevas construcciones de lenguaje, te preparas a ti mismo y a tus códigos que algún día el cuádruple no será soportado, y la autodisciplina y todo eso ;)

Yo mismo he encontrado un error ( toda la falta de atención malinterpretó los parámetros iHighest, iLowest ).

Así que no es adecuado ya que necesitará otros cálculos de ayer

 
missha32:

He encontrado el error yo mismo (toda la falta de atención ha hecho que se malinterpreten los parámetros iHighest,iLowest).

Esto no es adecuado ya que se necesitarán otros cálculos de ayer

No entiendo por qué se le impide obtener los datos de forma sencilla y natural para otros cálculos.
 
missha32 cada señal roja de compra y cada señal azul de venta para permitir el llenado en cada señal

if(Red ) OrderSend( ... Buy ...) ; if( Blue ) OrderSend( ... Sell ...) ;

Sólo lo contrario, vender en la parte superior, comprar en la parte inferior...

La función OnInit (la antigua que pedía el init) se ejecuta al inicio del indicador (al cambiar de marco temporal, recompilar, ...). Todas las variables utilizadas deben tener un valor asignado. La línea SetIndexDrawBegin(0,i-1) está presente en la función OnInit; hay que asignar un valor a la variable i o utilizar una constante

 
STARIJ:

if(Red ) OrderSend( ... Buy ...) ; if( Blue ) OrderSend( ... Sell ...) ;

Sólo lo contrario, vender en la parte superior, comprar en la parte inferior...

La función OnInit (la antigua que pedía el init) se ejecuta al inicio del indicador (al cambiar de marco temporal, recompilar, ...). Todas las variables utilizadas deben tener un valor asignado. En la función OnInit, está la línea SetIndexDrawBegin(0,i-1); hay que asignar un valor a la variable i o utilizar una constante

Para ser sincero, no entiendo nada, soy nuevo en la programación de Mql4, así que por favor ayúdame con el código.
 
missha32:
Para ser sincero, no entiendo nada, soy nuevo en la programación de Mql4, si no te importa ayudarme con el código.

El código suele ayudar en el trabajo autónomo.

Aquí - el algoritmo o para corregir sus errores. Pero no para volver a escribir para ti.