Spécifications
Estou com uma base de indicador, programado pelo evandro teixeira. Precisava de ter o controle do deslocamento do eixo X do indicador, atualmente ele esta configurado para se deslocar a cada tick movimentado pelo sistema, e precisava de ter o controle se algo pré programado por mim ocorrer o deslocamento apenas uma vez. e assim sucessivamente.
Observação: Preciso do código fonte depois.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#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);
}
//-----------------------------------------++
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////