Ayuda a la codificación - página 61

 
mladen:
Ese indicador está utilizando la "fuerza de la serpiente" (TMA centrado) para el suavizado y no se puede cambiar para no volver a calcular y seguir siendo el mismo. La versión "sin repintado" (de punta) del TMA centrado es un simple LWMA, pero no esperes tener los mismos resultados con él que con el TMA centrado. Algo más sobre el TMA centrado puedes leer aquí : https://www.mql5.com/en/forum/181241 En cuanto a cambiar o mejorar ese código : la base del mismo es un código descompilado. Dudo que alguien cambie un código descompilado

Muchas gracias Mladen por la información fue muy útil

 

Hola,

He descargado este indicador de la web pero cuando lo adjunto aparecen las ventanas separadas con 2 niveles pero no aparecen las barras.

¿Pueden ayudarme a solucionarlo?

Gracias

oscillator.mq4

Archivos adjuntos:
 

dasio,

Este es otro indicador de viento solar (alguien trató de cambiar algo en él).

dasio:
Hola,

He descargado este indicador de la web pero cuando lo adjunto aparecen las ventanas separadas con 2 niveles pero no aparecen las barras.

¿Puedes ayudarme a arreglarlo?

Gracias

oscillator.mq4
 
mladen:
dasio, Eso es sólo otro indicador de viento solar (alguien trató de cambiar algo en él).

Gracias. Pero cuando inicio el backtest aparecen las barras. ¿Cómo puede ser posible?

Gracias

 

dasio

Comprueba en la pestaña de expertos y en la de diario si hay algún error escrito ahí. En mis datos del broker funciona, así que no puedo saber qué pasa en tus datos del broker (tal vez la división por cero o algo similar)

dasio:
Gracias. Pero cuando empiezo el backtest las barras aparecen. ¿Cómo puede ser posible? Gracias
 

Mladen ,

Cuando se escribe un código o se mira el código de alguien, ¿cómo se evalúa la calidad del código?

 

:)

Mis dos criterios principales son :

- simplicidad (hacer un código simple hace que sea más fácil de desarrollar, mejorar y depurar)

- La pulcritud (quien piense que un código puede ser tirado en una pila y funcionará nunca ha tenido que mirar su propio código después de algún tiempo. Además, la depuración de un código desordenado es una historia en sí misma)

Cuando esos 2 se cumplen sólo entonces tomo una segunda mirada y sólo entonces lo "leo", pero entonces es una historia muy larga lo que se puede hacer para acceder a la calidad - Supongo que el proceso es mucho más subjetivo que objetivo ...

nevar:
Mladen, cuando escribes un código o miras el código de alguien, ¿cómo evalúas la calidad del código?
 
drofwarc:
Hola,

Estoy tratando de adaptar un indicador que llama a iFractals y en su lugar llamar a un indicador fractal personalizado que tiene una característica de período ajustable. El indicador que estoy tratando de adaptar se adjunta. Se llama "closesrelativejtozpreviousofractal".

closesrelativejtozpreviousofractal.mq4

El código traza una flecha hacia arriba si el precio rompe el máximo del fractal anterior y una flecha hacia abajo para lo contrario.

El indicador que estoy tratando de llamar con iCustom también se adjunta. Se llama "Fractales - ajustable".

fractal_-ajustable.mq4

Abajo está mi intento de modificar el indicador original para que llame a Fractales - ajustable. El código traza con éxito puntos en los fractales altos y bajos y el período fractal es ajustable, como yo quería. El problema es con las flechas destinadas a trazar las rupturas de los niveles fractales altos y bajos anteriores. No consigo que se tracen correctamente.

Cualquier ayuda con esto sería muy apreciada.

Saludos cordiales,

drofwarc

int start()

{

int counted_bars = IndicatorCounted();

if (counted_bars > 0) counted_bars--;

int limit = Bars - counted_bars;

for(int i=limit; i>0; i--)

{

UpFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 0, i); //-Draw the high fractal

if (UpFractalsBuffer!=0) //-If it is available, put in the array of fractals for higher levels

HighLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 2, i);

if(Close>HighLevel)

UpArrowBuffer=(Low-(PipBuffer)*Poin); //Arrows

DownFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 1, i); //-Draw the low fractal

if(DownFractalsBuffer!=0) //- If it is available put in the array of lower levels

LowLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 3, i);

if(Close<LowLevel)

DownArrowBuffer=(High+(PipBuffer)*Poin);//Arrows

}

return(0);

}

Al final lo he resuelto. El problema era una confusión en el buffer.

 

Código para hacer que un indicador se salte n barras entre señales

Hola a todos,

Sé que es posible hacer que un EA haga una pausa entre operaciones, ya sea usando Sleep() o registrando una marca de tiempo y esperando n segundos después de la marca de tiempo antes de permitir otra señal.

Pero, ¿es posible hacer lo mismo con un indicador?

Por ejemplo, me gustaría poder hacer que un indicador que traza flechas en el cruce de dos medias móviles se salte n barras después de un cruce antes de trazar otra flecha. En otras palabras, si se produce otro cruce antes de que hayan pasado n barras, el indicador ignoraría el cruce y no trazaría una flecha.

He buscado mucho para encontrar un indicador que haga esto pero no he tenido suerte.

¿Podría alguien publicar un indicador que ya tenga esta característica para que pueda estudiar el código? O quizás proporcionarme un ejemplo de código que funcione para esta propuesta para que pueda intentar implementarlo.

Muchas gracias,

drofwarc

 

no se puede mostrar normalmente, ¿alguien puede ayudarme a solucionarlo?

#property indicador_separar_ventana

#property indicator_buffers 1

#property indicador_color1 Rojo

#property indicador_máximo 100

#propiedad indicador_nivel1 70

#propiedad indicador_nivel2 50

#propiedad indicador_nivel3 30

#propiedad indicador_mínimo 0

//---- parámetros de entrada

extern int rsiperiod = 14 ;

extern int Shortperiod = 5 ;

extern int Middleperiod = 8

extern int Longperiod = 13;

extern int mamode = 2 ;

//---- buffers

double RSI[];

double ShortRSI[];

double MiddleRSI[];

double LongRSI[];

double SMRSI[];

int periodo ;

//+------------------------------------------------------------------+

//| Función de inicialización del indicador personalizada ||.

//+------------------------------------------------------------------+

int init()

{

//---- indicadores

IndicatorBuffers(5);

SetIndexBuffer(0,SMRSI);

SetIndexBuffer(1,RSI);

SetIndexBuffer(2,ShortRSI);

SetIndexBuffer(3,MiddleRSI);

SetIndexBuffer(4,LongRSI);

//---- nombre para la etiqueta de la DataWindow y la subventana del indicador

IndicatorShortName("SMRSI("+rsiperiod+", "+Shortperiod+", "+Middleperiod+", "+Longperiod+", "+mamode+")";

SetIndexDrawBegin(0,rsiperiod+Longperiod);

period=PeriodoCorto+PeriodoMedio+PeriodoLargo;

return(0);

}

//+------------------------------------------------------------------+

//| Función de iteración del indicador personalizada ||.

//+------------------------------------------------------------------+

int inicio()

{

int barras_contadas=IndicadorContado();

int i,limit;

if(counted_bars<0) return(-1);

if(barras_contadas>0) barras_contadas--;

limit = Bares-contados_bars;

for( i=limit; i>=0; i--) RSI=iRSI(NULL,0,rsiperiod,0,i);

for( i=limit; i>=0; i--) ShortRSI=iMAOnArray(RSI,0,Shortperiod,0,mamode,i);

for( i=limit; i>=0; i--) MiddleRSI=iMAOnArray(RSI,0,Middleperiod,0,mamode,i);

for( i=limit; i>=0; i--) LongRSI=iMAOnArray(RSI,0,Longperiod,0,mamode,i);

for( i=limit; i>=0; i--) { if(period!=0) SMRSI=(Shortperiod/period)*ShortRSI+(Middleperiod/period)*MiddleRSI+(Longperiod/period)*LongRSI;}

return(0);

}

//+------------------------------------------------------------------+

Razón de la queja: