Você está na página 1de 5

/* INDICADOR MOSTRA ABERTURA, MAXIMA, MINIMA E FECHAMENTO DE ONTEM, ALEM DE

ABERTURA DE HOJE E VWAP. CONFIGURA��O DE CORES NO FINAL DO C�DIGO.


Aprimorado por mjsanches@gmail.com
*/
r = newLines();

// Obt�m a lista de valores de entrada do indicador


def high = high();
def low = low();
def close = close();
def open = open();

// Obt�m o tamanho a ser utilizada para fazer o loop


def size = high.size();

// Valida��es
if ( size <= 2 ) {
// Significa que nao h� dados suficientes para fazer a computa��o.
return;
}

// Cria as listas que receber�o os dados das linhas do Fech


def Fech = newLineData();
def Min = newLineData();
def Max = newLineData();
def AB = newLineData();
def HOJE = newLineData();

// Vari�veis de controle
// Armazena os dados que ser�o utilizados para serem adicionados nas listas

// Data
def previewsDate = null;

// Dia da semana do ano (utilizado somente quando o gr�fico n�o for intraday)
def previewsWeekOfYear = 0;

// Maior m�xima
def previewsHighValue = 0;

// Menor minima
def previewsLowValue = 0;

// �ltimo fechamento
def previewsCloseValue = 0;

// �ltima abertura
def previewsOpenValue = 0;
def previewsHOJEValue = 0;
// Quantos per�odos agrupados j� foram computados
def FechIndex = 0;

// Se j� calculou o Fech ao menos uma vez


def hasFechValues = false;

// Valores do ultimo Fech calculado para que ele seja repetido nos demais per�odos
do gr�fico
def lastFechValue = 0;
def lastMinValue = 0;
def lastMaxValue = 0;
def lastABValue = 0;
def lastHOJEValue = 0;

// Agora, ir� identificar o intervalo do gr�fico para saber que tipo de agrupamento
ser� feito

// Pega a primeira data disponivel


def periodOne = high.date( 0 );

// Objeto utilizado para armazenar a data sem a parte da hora, utilizado nas
compara��es
Calendar cal = Calendar.getInstance();

// Remove a parte da hora da data


cal.setTime( periodOne );
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0)
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

def periodOneWithoutTime = cal.getTime();

// Para saber se � intraday, a l�gica � verificar se existia a parte da hora na


data do intervalo pois
// apenas candles intraday tem essa caracteristica

boolean isIntraday = !periodOneWithoutTime.equals( periodOne );


// ......................................................................

// Agora, navega nas listas dos valores


for ( def i = 0; ( i < size ); i++ ) {
// Pega a data
def dateFromHigh = high.date( i );

// Remove a parte da hora das datas


cal.setTime( dateFromHigh );
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0)
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

def date = cal.getTime();

def highValue = high.value( i );


def lowValue = low.value( i );
def closeValue = close.value( i );
def openValue = open.value( i );

// Se for a primeira vez, assume que os valores atuais ser�o os corretos


if ( null == previewsDate ) {
previewsDate = date;

previewsWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);

previewsHighValue = highValue;
previewsLowValue = lowValue;
previewsCloseValue = closeValue;
previewsOpenValue = openValue;
previewsHOJEValue = openValue;

continue;
}

// Vari�vel criada para poder identificar se os valores da candle atual


pertencem ao mesmo
// intervalo da candle anterior. Se isso for verdade, esses valores ser�o
agrupados ao
// anterior.
def belongsToSamePeriod = false;

if ( isIntraday ) {
// Faz o agrupamento considerando que � intraday, ou seja, agrupa por
dia
belongsToSamePeriod = date.equals( previewsDate );
} else {
// Se n�o for, agrupa por semana
belongsToSamePeriod = previewsWeekOfYear ==
cal.get(Calendar.WEEK_OF_YEAR);
}

// Agora verifica se o dado atual da lista � igual aos dado que seria
utilizado para ser
// adicionado como sendo o correto
if ( belongsToSamePeriod ) {
if ( hasFechValues ) {
// Adiciona os dados do Fech por data
Fech.addDated( dateFromHigh, lastFechValue );
Min.addDated( dateFromHigh, lastMinValue );
Max.addDated( dateFromHigh, lastMaxValue );
AB.addDated( dateFromHigh, lastABValue );
HOJE.addDated( dateFromHigh, lastHOJEValue );
}

// Verifica se � a maior m�xima


if ( highValue > previewsHighValue ) {
previewsHighValue = highValue;
}

// Verifica se � a menor m�nima


if ( lowValue < previewsLowValue ) {
previewsLowValue = lowValue;
}

// Sempre guarda o fechamento, pois tem que ser o ultimo mesmo


previewsCloseValue = closeValue;

} else {
FechIndex++;

// Se j� possui 2 per�odos agrupados, j� pode calcular o Fech


// Isso para garantir que existam valores completos para calcular o
Fech do dia
if ( FechIndex >= 2 ) {
hasFechValues = true;

// Calcula os suportes e resist�ncias


lastMaxValue = previewsHighValue;
lastMinValue = previewsLowValue;
lastFechValue = previewsCloseValue;
lastABValue = previewsOpenValue;
lastHOJEValue = openValue;

// Adiciona os dados do Fech por data


Fech.addDated( dateFromHigh, lastFechValue );
Min.addDated( dateFromHigh, lastMinValue );
Max.addDated( dateFromHigh, lastMaxValue );
AB.addDated( dateFromHigh, lastABValue );
HOJE.addDated( dateFromHigh, lastHOJEValue);
}

// Agora troca os valores das vari�veis para come�ar a avaliar


// a maior m�xima, menor m�nima e ultimo fechamento do pr�ximo per�odo
(candle)
previewsDate = date;

previewsWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);

previewsHighValue = highValue;
previewsLowValue = lowValue;
previewsCloseValue = closeValue;
previewsOpenValue = openValue;
}
}

///VWAP
int groupingMode = 1;
r = newLines();
def vwap_main = newLineData();
vwap_main = VWAP_GROUP(groupingMode);
def sizeV = vwap_main.size();
def index = 0;
for (def i=0; i < sizeV; i++) {
vwap_main.add(vwap_main.value(i));
}
//FIM /////////////////////////////////////////////////////////////////////////////
////////

// INICIO DA CONFIGURA��O DAS LINHAS


//BRANCO:255,255,255 AZUL ESCURO:0,0,255 AZUL CLARO:0,255,255
//VERDE:0,255,0 VERMELHO:255,0,0 ROXO:255,0,255 AMARELO:255,255,0
//TIPO: 0=Pontilhado 1=Tracejado 4=Linha

//ABERTURA ONTEM
AB.setLabel( "ABER-1" );
AB.setType( 4 );
AB.setColor( 255,255,255 ); //Branco
AB.setThickness(2);

//FECHAMENTO
Fech.setLabel( "FECH" );
Fech.setType(4);
Fech.setColor( 255,255,0 ); //Amarelo
Fech.setThickness(2);

//MAXIMA
Max.setLabel( "MAX" );
Max.setType( 4 );
Max.setColor( 0,160,0 ); //Verde
Max.setThickness(2);

//MINIMA
Min.setLabel( "MIN" );
Min.setType( 4 );
Min.setColor( 255,0,0 ); //Vermelho
Min.setThickness(2);

//MOSTRA NA TELA AS SEGUINTES LINHAS


r.add( Fech );
r.add( Max );
r.add( Min );
r.add( AB );
r.add(vwap_main);
r.add(HOJE);

Você também pode gostar