Olha o que ta acontecendo é que ele verifica as condições mas retornar tick a tick mesmo. O que tem que fazer é verificar apenas se for uma nova barra, tem em alguns lugares uma função de verificar se for uma nova barra, da uma pesquisada que rapidinho voce acha. Edit: Até ficou o link da função ali
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Peguei este código seguindo a ideia do evandro teixeira aqui do meta, porém ele faz o deslocamento do indicador toda vez que faz mudança de tick,
gostaria de fazer este deslocamento apenas uma vez quando ocorrer o caso na parte if(close[0]>open[0]) .
Até esperaria que o proprio evandro ajudasse se ver no forum.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#property copyright "Copyright © 2021"
#property description "Rafael Deslocamento do Eixo X"
#property link "rafael.com"
#property version "1.0"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_label1 "Buyer"
#property indicator_type1 DRAW_LINE
#property indicator_color1 White
#property indicator_style1 STYLE_SOLID
#property indicator_width1 3
#property indicator_label2 "Seller"
#property indicator_type2 DRAW_LINE
#property indicator_color2 FireBrick
#property indicator_style2 STYLE_SOLID
#property indicator_width2 3
//--- indicator buffers
double Ext1Buffer[];
double Ext2Buffer[];
//--- Variaveis Globais
int shift;
static int contador=0;
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,Ext1Buffer,INDICATOR_DATA);
SetIndexBuffer(1,Ext2Buffer,INDICATOR_DATA);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//Valores utilizados apenas para exemplo.
ArraySetAsSeries(open,true);
ArraySetAsSeries(close,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
if(contador==0)
{
ArrayInitialize(Ext1Buffer,0);
ArrayInitialize(Ext2Buffer,0);
}
//OBJETIVO:condição que deveria ocorrer o deslocamento do indicador apenas uma vez. mas esta ocorrendo cada tick a tick.
if(close[0]>open[0])
{
shift=rates_total-1-contador;
contador++;
}
//OBJETIVO:condição que deveria ocorrer o deslocamento do indicador apenas uma vez. mas esta ocorrendo cada tick a tick.
if(close[0]<open[0])
{
shift=rates_total-1-contador;
contador++;
}
Ext1Buffer[contador]=high[0];
Ext2Buffer[contador]=low[0];
PlotIndexSetInteger(0,PLOT_SHIFT,shift);
PlotIndexSetInteger(1,PLOT_SHIFT,shift);
Print("Rates Total=",rates_total," Shift=",shift," Contador=",contador);
//--- return value of prev_calculated for next call
return(rates_total);
}
//-----------------------------------------++
/////////////////////////////////////////////////////////////////////////////////////////////////////////