Fiz um indicador que mede as pernadas anteriores estilo o Result que muitos conhecem.
O indicador precisa fazer o cálculo quando acontece a inversão, então ele entra no for e faz o cálculo da pernada anterior, até parece que está funcionando mas tem um pequeno bug que não encontrei a solução.
Quando insere ele no gráfico, ele mostra certo o posicionamento da altura com as devidas pernadas, ele começa a calcular alguns e para, então se removo ele do gráfico e adiciono, ele calcula todos, faz mais algumas barras e para de novo.
Também fiz ele para o tryd, onde também acontece um certo bug, ele não para de calcular mas fica deslocando a posição enquanto não fecha a pernada, onde deveria acontecer o calculo apenas quando tivesse alguma inversão.
Então em cada plataforma ele se comporta com algum tipo de bug, logo creio que tem alguma falha no código que não estou encontrando.
//+------------------------------------------------------------------+//| HistogramaColor.mq5 |//| Neto |//| |//+------------------------------------------------------------------+#property copyright"Neto"#property link""#property version"1.00"#property indicator_separate_window//+------------------------------------------------------------------+//| PROPRIEDADES DO INDICADOR (DIRETIVAS) |//+------------------------------------------------------------------+#property indicator_buffers3#property indicator_plots1//---#property indicator_label1"ForceResult"#property indicator_type1DRAW_COLOR_HISTOGRAM#property indicator_style1STYLE_SOLID#property indicator_color1clrAqua,clrRed#property indicator_width12double wb[];
double wC[];
double cl[];
//=== Variáveisint lenU = 0;
int lenD = 0;
double tmU = 0;
double tmD = 0;
intOnInit()
{
//--- Mapear os buffers do indicadorSetIndexBuffer(0,wb,INDICATOR_DATA);
SetIndexBuffer(1,wC,INDICATOR_COLOR_INDEX);
SetIndexBuffer(2,cl,INDICATOR_DATA);
IndicatorSetString( INDICATOR_SHORTNAME, "Force Result" );
return(INIT_SUCCEEDED);
}
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i;
if(prev_calculated == 0) i = 0;
else i = prev_calculated-1;
for(i = 2; i < rates_total; i++)
{
cl[i] = close[i];
if(cl[i] >= cl[i-1])
{
if(lenD > 0)
{
tmD = (high[i-lenD]-low[i-1]);
for(int j = 0; j < lenD; j++)
{
wb[i-lenD+j] = tmD;
wC[i-lenD+j] = 1;
}
lenD = 0;
}
if(cl[i-1] >= cl[i-2])
{
lenU +=1;
}
elseif(cl[i] >= cl[i-1]){
lenU +=1;
}
}
else
{
//Se variável lenU estiver carregada, entra e faz o loopif(lenU > 0)
{
//tmU recebe valor da máxima i-1 e da última posição da mínima da pernada passada.
tmU = (high[i-1]-low[i-lenU]);
for(int n = 0; n < lenU; n++)
{
wb[i-lenU+n] = tmU; //Insere o valor da altura da pernada em cada index da pernada anterior
wC[i-lenU+n] = 0;
}
lenU = 0; //zeragem da variável
}
if(cl[i-1] < cl[i-2])
{
lenD +=1;
}
elseif(cl[i] <= cl[i-1])
{
lenD +=1;
}
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
Aqui uns prints para demonstrar o tal bug.
No mt5 a falta de atualizar a pernada, e no tryd o deslocamento até terminar a pernada.
Não quero suporte para tryd, só estou colocando como exemplo para um possível bug no código.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Boa tarde.
Fiz um indicador que mede as pernadas anteriores estilo o Result que muitos conhecem.
O indicador precisa fazer o cálculo quando acontece a inversão, então ele entra no for e faz o cálculo da pernada anterior, até parece que está funcionando mas tem um pequeno bug que não encontrei a solução.
Quando insere ele no gráfico, ele mostra certo o posicionamento da altura com as devidas pernadas, ele começa a calcular alguns e para, então se removo ele do gráfico e adiciono, ele calcula todos, faz mais algumas barras e para de novo.
Também fiz ele para o tryd, onde também acontece um certo bug, ele não para de calcular mas fica deslocando a posição enquanto não fecha a pernada, onde deveria acontecer o calculo apenas quando tivesse alguma inversão.
Então em cada plataforma ele se comporta com algum tipo de bug, logo creio que tem alguma falha no código que não estou encontrando.
Aqui uns prints para demonstrar o tal bug.
No mt5 a falta de atualizar a pernada, e no tryd o deslocamento até terminar a pernada.
Não quero suporte para tryd, só estou colocando como exemplo para um possível bug no código.