Snippets para Localização Temporal
Introdução
Esta seção visa apresentar trechos de códigos com funcionalidades relativas à localização temporal da estratégia. Por exemplo, identificar se a atual barra é a primeira barra do dia para verificar gap diário.
Você pode acessar os Snippets diretamente pelo menu lateral direito, ou fazendo CTRL+F (CTRL+L) para localizar algum texto específico na página, uma vez que o conteúdo tende a crescer ao longo do tempo, dificultando a navegação pelo menu.
Caso tenham sugestões de código para acrescentar à lista, gentileza deixar o código nos comentários com o link para seu perfil em rede social (para devido crédito de autoria).
Snippets
Identificação do primeiro candle de cada dia
Algumas estratégias necessitam da identificação da primeira barra do dia (candle) para executar determinada ação ou calcular o gap em relação ao fechamento do dia anterior.
var
bPrimeiraBarraDoDia : boolean;
iDataAtual : integer;
begin
if (Date() <> iDataAtual) then
begin
iDataAtual := Date();
bPrimeiraBarraDoDia := true;
end;
if bPrimeiraBarraDoDia then
begin
bPrimeiraBarraDoDia := false;
//Faz alguma coisa na primeira barra do dia
paintBar(clGreen);
end;
end;
Identificação de barra por data e hora específicos
Este código localiza a barra (candle ou box) por uma data e hora desejados. Onde a hora é referente ao horário de abertura do candle desejado. Observa-se que existe uma parte do código comentada para utilização em backtesting de gráficos de renko.
OBS: As variáveis pDataDesejada e pHorarioDesejado não foram declaradas como parâmetros para facilitar o teste do Snippet, uma vez que não é possível alterar parâmetro dentro do Editor de Estratégias.
var
bBarraDesejada : boolean;
pDataDesejada,pHorarioDesejado : integer;
begin
pDataDesejada := 20220928;
pHorarioDesejado := 1200;
if (Date() = ELDate_Consol(pDataDesejada)) And (Time() = pHorarioDesejado) then
begin
bBarraDesejada := true;
//Faz alguma coisa na barra identificada
paintBar(clGreen);
end
else
bBarraDesejada := false;
end;
Identificação do primeiro tick de uma barra
Este código identifica o primeiro tick de uma barra. Este Snippet tem aplicação apenas quando a estratégia é utlizada em tempo real.
OBS: É importante ressaltar que em backtesting com dados históricos não há dados tick a tick. Desta forma, este Snippet não possui aplicação em backtesting com dados de barra a barra.
var
bPrimeiroTickDaBarra : boolean;
iBarraAtual : integer;
begin
if LastBarOnChart then
if (CurrentBar <> iBarraAtual) then
begin
iBarraAtual := CurrentBar;
bPrimeiroTickDaBarra := true;
end
else
bPrimeiroTickDaBarra := false;
if bPrimeiroTickDaBarra then
begin
//Faz alguma coisa no primeiro tick da barra
//Aplicável apenas em execução de tempo real
paintBar(clGreen);
end
else
begin
//Faz alguma coisa nos demais ticks da barra atual
//Aplicável apenas em execução de tempo real
paintBar(clYellow);
end;
end;
Contador de Candles do dia
Este código realiza a contagem de barras dentro de um mesmo dia.
var
bPrimeiraBarraDoDia : boolean;
iDataAtual : integer;
iCurrentBarIntraday, iFirstBarOfDay : integer;
begin
if (Date() <> iDataAtual) then
begin
iDataAtual := Date();
bPrimeiraBarraDoDia := true;
iFirstBarOfDay := CurrentBar;
end;
if bPrimeiraBarraDoDia then
begin
bPrimeiraBarraDoDia := false;
//Faz alguma coisa na primeira barra do dia
paintBar(clGreen);
end;
iCurrentBarIntraday := CurrentBar - iFirstBarOfDay + 1;
plotText(iCurrentBarIntraday, clWhite,0, 12);
end;
Parabéns John. Muito claro as explicações para quem esta aprendendo. E agora c/ automação precisaremos muito de um espaço assim para aprofundar conhecimento e aprender o raciocínio logico da programação.
Mas esclarece uma duvida? No intraday ficou top e tentei usar p tempo gráfico do “diario”, visando referenciar a 1 barra de cada mês e não funcionou, poderia explicar o que teria que mudar no código?
Grato e saludos!