Ayuda con el indicador ADR con horas específicas
Ayuda con el indicador ADR con horas específicas

 

Publi

Resultados 1 al 10 de 10

Tema: Ayuda con el indicador ADR con horas específicas

  1. #1
    Estoy buscando ayuda con un rango de interior.

    Quiero un indicador que muestre el rango durante x días (ADR) pero solo entre horas específicas.

    Entonces, por ejemplo, se puede configurar en un rango promedio de 5 días (excluyendo el domingo) pero solo para las horas 5 p. m. - 8 a. m., por lo que si se coloca en el gráfico, se obtendrá el rango promedio del mercado EURGBP durante sus horas de cierre.

    No soy un codificador, pero puedo hacer un poco de lo básico, así que si alguien puede señalarme un indicador similar, estoy dispuesto a quedarme atrapado.

    Saludos

    Consola

  2.                         
    Publicidad
  3. #2
    Esto debería ser. Nota: El resultado aparecerá como comentario en la esquina superior izquierda. Todos los horarios están en formato de 24 horas, GMT. Compilar como indicador. Código insertado #property indicador_chart_window extern int days = 5;/días extern int desde = 17;/hora de inicio; formato 24h, GMT extern int a = 8;/hora de parada, inclusive; formato 24h, GMT doble adr = 0; doble prev_adr = 0; doble más alto, más bajo; extensión doble = 1; bool dentro = falso; máscara bool#91;24#93;; cambio int, cambio0 = 0; int h, i, time_span; void init() { if (to gt;= from) time_span = to - from; else time_span = 24 - desde hasta; for (i = 0; i lt; 24; i ) mask#91;i#93; = falso; h = desde; for (i = 0; i lt;= time_span; i ) { mask#91;h#93; = verdadero; h ; si (h gt;= 24) h = 0; }/omitir el período si ya comenzó/h = iTime(NULL, PERIOD_H1, shift0); h = (h % 86400)3600; while (máscara#91;h#93; == verdadero) { shift0 ; h—; } if (Dígitos == 5 || Dígitos == 3) ext = 10; dirección(); } void deinit() { Comentario(); } void Adr() { shift = shift0; dirección = 0; más alto = -1;/número lo suficientemente bajo, más bajo que cualquier precio posible más bajo = 1000000000;/número lo suficientemente grande, más alto que cualquier precio posible para (i = 0; i lt; días; shift ) {/verificar el domingo/h = iTime(NULL, PERIOD_H1, shift); if (TimeDayOfWeek(h) == 0) continuar;/extraer hora/h = (h % 86400)3600; if (máscara#91;h#93; == verdadero) { dentro = verdadero;/encuentra el más alto, el más bajo/if (iHigh(NULL, PERIOD_H1, shift) gt; más alto) más alto = iHigh(NULL, PERIOD_H1, shift); if (iLow(NULL, PERIOD_H1, shift) lt; más bajo) más bajo = iLow(NULL, PERIOD_H1, shift); } else if (dentro == verdadero) { dentro = falso; adr = mayor - menor; más alto = -1;/número lo suficientemente bajo, más bajo que cualquier precio posible más bajo = 1000000000;/número lo suficientemente grande, más alto que cualquier precio posible i ;/un día menos/} } if (prev_adr != adr) Comment(ADR: , adrPointdaysext); adr_anterior = adr; }

  4. #3
    Hola mmm 1. Si se inicia el período actual, debe ignorarse y usar períodos anteriores solo 2. He editado el código para excluir un viernes, pero si puede hacer que funcione en un viernes de una hora más corta, sería genial. Gracias por tu contribución. Estoy usando el indicador para darme un rango de mercado cerrado de GBPEUR y luego miro el índice IG en los binarios para que no esté por encima o no toque el mercado a las 8 a. 5% Gracias por su ayuda hasta ahora. Consola

  5. #4
    De hecho, fallará en determinadas circunstancias. Lo siento por eso, en la lucha por el código más corto olvidé las situaciones especiales cuando: (1) el cálculo se inicia dentro del período de interés. (2) el plazo se acorta, es decir, el viernes. Pero haré una versión más robusta. Sin embargo, debe especificar cómo proceder en la situación (1): ¿El período en curso debe contarse como período completo (uno de los cinco días) o debe excluirse?

  6. #5
    mmm, me disculpo, no siendo un codificador, no entendí dónde se estaba imprimiendo el valor. Ese código funciona muy bien después de haberlo revisado esta noche. Gracias

  7. #6

    Cita Iniciado por ;
    Gracias por el aporte mmm, no soy mucho más que un codificador de cortar y pegar, así que después de jugar durante unas horas intentándolo, puse un trabajo en el foro de MQL4. Saludos por la ayuda Conosle
    ¿Está diciendo que el programa que le di no hace lo que necesita, es decir, imprime el rango promedio en pips para un número determinado de días y entre horas determinadas? He probado brevemente su funcionalidad e imprime un resultado (razonable) en la pestaña de experto (como dije, no es algo elegante allí, solo el cálculo y una impresión simple). Lo único es que no he probado su precisión, es decir, si el valor es correcto. Para eso, uno tiene que calcular el valor manualmente (digamos para 1 o 2 días o los cinco...) y comparar.

  8. #7
    Gracias por el aporte mmm, no soy mucho más que un codificador de cortar y pegar, así que después de jugar durante unas horas intentándolo, puse un trabajo en el foro de MQL5. Saludos por la ayuda Conosle

  9. #8
    Este es el código con el que comencé, actualmente mostrará el ADR durante 5 días. Quiero cambiarlo para poder especificar la hora del día que se usará en el cálculo, por ejemplo, ¿solo se calcula en los últimos 5 días entre las 5:00 p. m. y las 8:00 a. m.? #property indicador_separate_window extern int NumOfDays = 5; cadena externa FontName = Courier New; externo int Tamaño de fuente = 15; color externo FontColor = DodgerBlue; ventana interna externa = 0; externo int Esquina = 0; externo interno HorizPos = 5; externo interno VertPos = 20; punto doble; cavar int; cadena objname = *DRPE;/ -------------------------------------------------------- ------------------ int init() {/ ------------------------------------- -------------------------------------------- punto = MarketInfo(Símbolo (),MODO_PUNTO); cavar = MarketInfo(Símbolo(),MODE_DIGITS); if (cavar == 3 || cavar == 5) { punto *= 10; } ObjectCreate(objname,OBJ_LABEL,Ventana,0,0); retorno(0); }/ ---------------------------------------------- -------------------- int definición() {/ --------------------- ------------------------------------------------------------- EliminarObjeto(nombreobjeto) ; retorno(0); }/ ---------------------------------------------- -------------------- int inicio() {/ --------------------- ------------------------------------------------------------- int c=0 ; suma doble=0; for (int i=1; ilt;Bars-1; i ) { double hi = iHigh(NULL,PERIOD_D1,i); doble lo = iLow(NULL,PERIOD_D1,i); fecha y hora dt = iTime(NULL,PERIOD_D1,i); if (HoraDíaDeLaSemana(dt) gt; 0 HoraDíaDeLaSemana(dt) lt; 5) { sum = hi - lo; c ; if (cgt;=NumOfDays) break; } } hola = iHigh(NULL,PERIOD_D1,0); lo = iBajo(NULO,PERIODO_D1,0); if (igt;0 pntgt;0) { string objtext = ADR = DoubleToStr(sum/c/pnt,1) ( c días) Hoy = DoubleToStr((hi-lo)/pnt,1); ObjectSet(objname,OBJPROP_CORNER,Corner); ObjectSet(objname,OBJPROP_XDISTANCE,HorizPos); ObjectSet(objname,OBJPROP_YDISTANCE,VertPos); ObjectSetText(objname,objtext,FontSize,FontName,Fo ntColor); } retorno(0); }

  10. #9
    Esta es mi idea aproximada de #8203;#8203;cómo podría funcionar (no probado para precisión, no optimizado, solo cálculo básico). Tal vez puedas empezar algo. Nota: esto es un EA, no un indicador. Código insertado extern int macro_period = 5;/días extern int hora = 17;/hora de inicio; formato 24h (aquí 5pm == 12 5 == 17) extern int micro_period = 15;/tiempo para abarcar en horas (aquí 5pm a 8am == 15 horas) double adr = 0; doble prev_adr = 0; doble más alto, más bajo; cambio int; bool superpuesto = falso; void init() { if ((hora micro_período) gt; 24) superpuesto = verdadero; } inicio vacío () { cambio = 0; for (int macro = 0; macro lt; macro_period; macro ) { más alto = -1;/número lo suficientemente bajo, más bajo que cualquier precio posible más bajo = 1000000000;/número lo suficientemente grande, más alto que cualquier precio posible para (int micro = 0; micro lt; micro_period; micro ) {/extrae # hora de datetime: (iTime(NULL, PERIOD_H1, shift) % 86400)3600 if ( superpuesto)/saltar los domingos y las horas que están fuera de la ventana de interés (superpuesta) while ((TimeDayOfWeek(iTime(NULL, PERIOD_H1, shift)) == 0) || ((((iTime(NULL, PERIOD_H1, shift) % 86400)3600) gt; ((hora micro_período) % 24)) (((iTime(NULL, PERIOD_H1, turno) % 86400)3600) lt; hora))) turno ; else/omite los domingos y las horas que están fuera de la ventana de interés while ((TimeDayOfWeek(iTime(NULL, PERIOD_H1, shift)) == 0) || (((iTime(NULL, PERIOD_H1, shift) % 86400)3600 ) gt; (hora micro_periodo)) || (((iTime(NULL, PERIOD_H1, shift) % 86400)3600) lt; hour)) shift ;/encuentra el más alto, el más bajo si (iHigh(NULL, PERIOD_H1, shift) gt; más alto) más alto = iHigh(NULL, PERIOD_H1, shift); if (iLow(NULL, PERIOD_H1, shift) lt; más bajo) más bajo = iLow(NULL, PERIOD_H1, shift); turno ; } adr = mayor - menor; } if (adr != prev_adr) Print(adrPointmacro_period10); adr_anterior = adr; dirección = 0; }

  11. #10
    Gracias mmm, eso funciona de maravilla
    Consola de saludos

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Uso de cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

Aviso legal: Ni forosforex.com ni ninguna persona involucrada en forosforex.com aceptarán ninguna responsabilidad por cualquier pérdida o daño en el trading como resultado de la confianza en la información contenida en este sitio web, incluidos datos, cotizaciones, gráficos y señales de compra/venta. Por favor, infórmese plenamente de los riesgos y costes asociados a las operaciones en los mercados financieros, una de las formas de inversión que más riesgos entrañan.
forosforex.com le quiere recordar que los datos contenidos en este sitio web no son necesariamente en tiempo real ni exactos. forosforex.com no asume responsabilidad alguna por las pérdidas en que usted podría incurrir como resultado de la utilización de estos datos. Este acuerdo se rige por su versión en inglés, que prevalecerá siempre que haya alguna discrepancia entre la versión en inglés y la versión en español. Los CFD son un producto difícil de entender, varios organismos reguladores consideran que no es adecuado para inversores minoristas debido a su complejidad y riesgo.
Advertencia de riesgo: Los CFDs son un producto difícil de entender, y puede no ser adecuado para inversores minoristas debido a su complejidad y riesgo. Existe la posibilidad de sufrir una pérdida igual o superior a la inversión. Por lo tanto, no debe invertir o arriesgar dinero que no pueda permitirse perder. Debe asegurarse de que comprende todos los riesgos. Antes de abrir una cuenta en un broker por favor sea consciente e infórmese de los riesgos asociados con el trading. El contenido de este sitio web no debe interpretarse como asesoramiento personal. ForosForex recomienda que busque el consejo de un asesor financiero independiente.