Ajuda na codificação - página 198

 
cain82:
Obrigado pela resposta!

Mas como posso obter uma linha angular de MA no gráfico geral, como neste código de histograma indiano?

//---- 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);

}

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

Esse indicador está calculando algo semelhante à inclinação (não o ângulo, já que o ângulo nunca pode ser calculado exatamente no gráfico da série temporal, nem uma inclinação exata, já que se está tentando usar alguma matemática diferente daquela necessária para uma inclinação) para cada barra da ma. Se você quiser invertê-la (estou apenas adivinhando o que exatamente você quer), você vai obter como resultado essa ma inicial (então você vai obter uma média móvel no gráfico).

Se você deseja estender a inclinação da última barra, então você pode usar algo semelhante a este indicador https://www.mql5.com/en/forum/173235/page36 que estende a média móvel usando a inclinação da última barra.

 
mladen:
Esse indicador está calculando algo semelhante à inclinação (não o ângulo, já que o ângulo nunca pode ser calculado exatamente no gráfico da série temporal, nem uma inclinação exata, já que se está tentando usar alguma matemática diferente daquela necessária para uma inclinação) para cada barra da ma. Se você quiser invertê-la (estou apenas adivinhando o que exatamente você quer), você vai obter como resultado essa ma inicial (então você vai obter uma média móvel no gráfico). Se você deseja estender a inclinação da última barra, então você pode usar algo semelhante a este indicador https://www.mql5.com/en/forum/173235/page36 que estende a média móvel usando a inclinação da última barra.

Obrigado mladen! É muito parecido com o que eu quero

Você tem o mesmo com o modo MTF?

 

mladen...

preciso de sua ajuda para modificar este indicador https://www.mql5.com/en/forum/general

 

Mladen,

Calcular BBands usando dados de uma média móvel.

Como exemplo a aplicar às meias MT4 não-padronizadas.

Como exemplo para um dos tipos de média móvel de AllAverages.

É um BBands que utiliza dados reais de uma média.

Sem BBands SMA, com um tipo diferente de média móvel.

 
Antonsan:
Mladen,

Calcular BBands usando dados de uma média móvel.

Como exemplo a aplicar às meias MT4 não-padronizadas.

Como exemplo para um dos tipos de média móvel de AllAverages.

É um BBands que utiliza dados reais de uma média.

Sem BBands SMA, com uma média móvel de tipo diferente.

Antonsan

Você pode calcular as faixas de Bollinger em qualquer valor se usar a função iStdDevOnArry().

Preencha um array com os valores que você deseja usar (valores de qualquer média, por exemplo) calcule seu desvio usando iStdDevOnArray() e calcule uma linha média para bandas de Bollinger usando iMaOnArray() (usando o mesmo array que iStrDevOnArry() usa) e então as bandas são simples: linha média + desvio*multiplicador para linha superior, e linha média - desvio*multiplicador para banda inferior

 

Antonsan

Aqui está um código de amostra muito simples que você pode usar como modelo para construir fitas de bollinger de qualquer valor. Tudo que você tem que fazer é substituir a chamada iRsi() nesta linha :

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

com a função desejada ou uma chamada iCustom() para qualquer indicador personalizado e calculará as faixas de Bollinger para esse valor

Arquivos anexados:
 
mladen:
person77Mais uma opção adicionada : AllowCloseEqualOpen. para que você possa controlá-lo com essa opção agora

Ótimo trabalho, calúnia! Mais uma vez, obrigado.

 

Bom indicador para a EA

Olá,

Este indicador tem 5 linhas(pivot+R1+R2+S1+S2)

Eu quero fazer uma ea que baseie esta linha. Infelizmente estas linhas não têm tampão. Preciso que alguém atribua um tampão para cada linha.

Por favor, ajude-me

Melhores cumprimentos;

Bamik

Arquivos anexados:
 
bamik:
Olá,

Este indicador tem 5 linhas(pivot+R1+R2+S1+S2)

Eu quero fazer uma ea que baseie esta linha. Infelizmente estas linhas não têm tampão. Preciso que alguém atribua um tampão para cada linha.

Por favor, ajude-me

Melhores cumprimentos;

Bamik

barnik

Você verificou esta linha : https://www.mql5.com/en/forum/172894

Há muitos indicadores de pivô usando amortecedores nessa linha

 
mladen:
barnik

Você verificou esta linha : https://www.mql5.com/en/forum/172894

Há muitos indicadores de pivô usando amortecedores nessa linha

Obrigado veado mladen por sua ajuda,

Eu baixei e testei a maioria destes indicadores. Somente o indicador " AutoPivotIndicator_ver5" era como "TARGETS-LINES".

Infelizmente, este indicador também não utiliza o buffer e utiliza o objeto.

Por favor, mude meu indicador simples.(alocar um buffer para cada linha).é um pequeno indicador.

Obrigado