Ayuda a la codificación - página 198

 
cain82:
¡Gracias por la respuesta!

Pero, ¿cómo puedo obtener una línea de ángulo de MA en el gráfico general como en este código indi hystogramm?

//---- indicator settings

#property indicator_separate_window

#property indicator_buffers 3

#property indicator_color1 LimeGreen

#property indicator_color2 FireBrick

#property indicator_color3 Yellow

#property indicator_width1 2

#property indicator_width2 2

#property indicator_width3 2

//---- indicator parameters

extern int TimeFrame = 60;

extern int MAMode = 0;

extern int MAPeriod = 50;

extern int Price = 4;

extern double AngleTreshold = 0.25;

extern int StartMAShift = 2;

extern int EndMAShift = 0;

extern int MaxBars = 500;

string TF1;

//---- indicator buffers

double UpBuffer[];

double DownBuffer[];

double ZeroBuffer[];

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

//| Custom indicator initialization function |

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

int init()

{

//---- 2 additional buffers are used for counting.

IndicatorBuffers(3);

//---- drawing settings

SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2 );

//---- 3 indicator buffers mapping

if(!SetIndexBuffer(0,UpBuffer) &&

!SetIndexBuffer(1,DownBuffer) &&

!SetIndexBuffer(2,ZeroBuffer))

Print("cannot set indicator buffers!");

SetIndexLabel(0,"");

SetIndexLabel(1,"");

SetIndexLabel(2,"");

switch(TimeFrame)

{

case 1: TF1="M1"; break;

case 5: TF1="M5"; break;

case 15: TF1="M15"; break;

case 30: TF1="M30"; break;

case 60: TF1="H1"; break;

case 240: TF1="H4"; break;

case 1440: TF1="D1"; break;

case 10080: TF1="W1"; break;

case 43200: TF1="MN1"; break;

default: {TimeFrame = Period(); init(); return(0);}

}

IndicatorShortName("MAAngle MTF * "+TF1+" *");

//---- initialization done

return(0);

}

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

//| The angle for EMA |

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

int start()

{

double fEndMA, fStartMA;

double fAngle, mFactor, dFactor;

int nLimit, i;

int nCountedBars;

double angle;

int ShiftDif;

string Sym;

if (MAMode >= 4) MAMode = 0;

if(EndMAShift >= StartMAShift)

{

Print("Error: EndMAShift >= StartMAShift");

StartMAShift = 6;

EndMAShift = 0;

}

nCountedBars = IndicatorCounted();

dFactor = 2*3.14159/180.0;

mFactor = 10000.0;

Sym = StringSubstr(Symbol(),3,3);

if (Sym == "JPY") mFactor = 100.0;

ShiftDif = StartMAShift-EndMAShift;

mFactor /= ShiftDif;

//---- check for possible errors

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

//---- last counted bar will be recounted

if(nCountedBars>0) nCountedBars--;

nLimit=Bars-nCountedBars;

nLimit=MathMax(nLimit,TimeFrame/Period());

nLimit=MathMin(nLimit,MaxBars );

//---- main loop

for(i=0; i<nLimit; i++)

{

int y = iBarShift(NULL,TimeFrame,Time);

if (TimeFrame<Period()) TimeFrame=Period();

fEndMA=iMA(NULL,TimeFrame,MAPeriod,0,MAMode,Price,y+EndMAShift);

fStartMA=iMA(NULL,TimeFrame,MAPeriod,0,MAMode,Price,y+StartMAShift);

// 10000.0 : Multiply by 10000 so that the fAngle is not too small

// for the indicator Window.

fAngle = mFactor * (fEndMA - fStartMA)/2.0;

//fAngle = MathArctan(fAngle)/dFactor;

DownBuffer = 0.0;

UpBuffer = 0.0;

ZeroBuffer = 0.0;

if(fAngle > AngleTreshold)

UpBuffer = fAngle;

else if (fAngle < -AngleTreshold)

DownBuffer = fAngle;

else ZeroBuffer = fAngle;

}

return(0);

}

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

Ese indicador está calculando algo similar a la pendiente (no el ángulo, ya que el ángulo nunca puede ser calculado exactamente en el gráfico de series de tiempo ni una pendiente exacta, ya que está tratando de utilizar algunas matemáticas diferentes a las necesarias para una pendiente) para todos y cada barra de la MA. Si desea invertirlo (sólo estoy adivinando lo que quiere exactamente) va a obtener esa MA inicial como resultado (por lo que va a obtener una media móvil en el gráfico).

Si desea extender la pendiente de la última barra, entonces usted puede utilizar algo similar a este indicador https://www.mql5.com/en/forum/173235/page36 que extiende la media móvil utilizando la pendiente de la última barra

 
mladen:
Ese indicador está calculando algo similar a la pendiente (no el ángulo, ya que el ángulo nunca puede ser calculado exactamente en el gráfico de series de tiempo ni una pendiente exacta, ya que está tratando de utilizar algunas matemáticas diferentes a las necesarias para una pendiente) para todos y cada uno de los bares de la ma. Si desea invertirlo (sólo estoy adivinando lo que quiere exactamente) va a obtener esa ma inicial como resultado (por lo que va a obtener una media móvil en el gráfico). Si deseas extender la pendiente de la última barra, entonces puedes usar algo similar a este indicador https://www.mql5.com/en/forum/173235/page36 que extiende la media móvil usando la pendiente de la última barra

¡Gracias mladen! Es muy similar a lo que quiero

¿Tienes lo mismo con el modo MTF?

 

mladen..

necesito su ayuda para modificar este indicador https://www.mql5.com/en/forum/general

 

Mladen,

Calcular las BBands utilizando los datos de una media móvil.

Como ejemplo para aplicar a medias no estándar de MT4.

Como ejemplo para uno de los tipos de media móvil de AllAverages.

Es un BBands que utiliza datos reales de la media.

No hay BBands SMA, con un tipo diferente de media móvil.

 
Antonsan:
Mladen,

Calcular las BBands utilizando los datos de una media móvil.

Como ejemplo para aplicar a medias no estándar de MT4.

Como ejemplo para uno de los tipos de media móvil de AllAverages.

Es un BBands que utiliza datos reales de la media.

No hay BBands SMA, con un tipo diferente de media móvil.

Antonsan

Puedes calcular las bandas de Bollinger sobre cualquier valor si utilizas la función iStdDevOnArry().

Llena un array con los valores que desees usar (valores de cualquier media por ejemplo) calcula su desviación usando iStdDevOnArray() y calcula una línea media para las bandas de Bollinger usando iMaOnArray() (usando el mismo array que usa iStrDevOnArry()) y entonces las bandas son simples : línea media + desviación*multiplicador para la banda superior, y línea media - desviación*multiplicador para la banda inferior

 

Antonsan

Aquí hay un ejemplo de código muy sencillo que puedes usar como plantilla para construir bandas de bollinger de cualquier valor. Todo lo que tienes que hacer es reemplazar la llamada a iRsi() en esta línea :

for(i=limit; i >= 0; i--) value = iRSI(NULL,0,RsiLength,RsiPrice,i);

con la función deseada o una llamada a iCustom() de cualquier indicador personalizado y calculará las bandas Bollinger para ese valor

Archivos adjuntos:
 
mladen:
persona77 Se ha añadido una opción más : AllowCloseEqualOpen. así que ahora puedes controlarlo con esa opción

¡Gran trabajo mlanden! Gracias de nuevo.

 

Buen indicador para EA

Hola,

Este indicador tiene 5 líneas.(pivote+R1+R2+S1+S2)

Quiero hacer un ea que la base de estas líneas. Desafortunadamente estas líneas no tienen búfer, necesito que alguien asigne un búfer a cada línea.

Por favor, ayuda

Saludos cordiales;

Bamik

Archivos adjuntos:
 
bamik:
Hola,

Este indicador tiene 5 líneas.(pivote+R1+R2+S1+S2)

Quiero hacer un ea que base estas líneas. Desafortunadamente estas líneas no tienen buffer.necesito que alguien asigne un buffer a cada línea.

Por favor, ayuda

Saludos cordiales;

Bamik

barnik

¿Has revisado este hilo : https://www.mql5.com/en/forum/172894

Hay una gran cantidad de indicadores de pivote utilizando búferes en ese hilo

 
mladen:
barnik

¿Has mirado este hilo : https://www.mql5.com/en/forum/172894

Hay un montón de indicadores pivotantes que utilizan buffers en ese hilo

Gracias ciervo mladen por su ayuda,

He descargado y probado la mayoría de estos indicadores.Sólo " AutoPivotIndicator_ver5" indicador era igual que "TARGETS-LINES".

Por desgracia, este indicador también no utiliza el búfer y utiliza el objeto.

Would you mind please change my simple indicator.(allocate a buffer to each line).it's a little indicator.

Gracias

Razón de la queja: