Buffers Horários para Coleta de Dados no MetaTrader 5

Mike 2024.12.25 07:05 155 0 0
Anexo

Objetivo

Se você está buscando coletar dados para modelagem, este indicador é uma mão na roda! Ele cria um vetor de buffers binários para cada hora do dia, facilitando a inclusão de colunas de hora em suas análises. Praticamente um facilitador para quem trabalha com modelos econômicos!

Ao coletar dados de outros indicadores, por exemplo, usando a função CopyBuffer, este indicador possibilita a adição de colunas de hora como dados extras. Uma ótima maneira de enriquecer suas análises!

  • Um código simples para quem coleta dados, especialmente se você está pensando em Machine Learning. Com ele, você já tem uma variável dummy (buffers de 0 a 23) ou uma variável de hora (buffer 24) pronta para uso em modelagem.

Explorando o Código

  • Começamos declarando o número de buffers e plots como 25:

#property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25

Rotulagem dos Buffers

  • Definimos os rótulos dos buffers para a janela de dados:

#property indicator_label1 "Hora 00"
#property indicator_label2 "Hora 01"
#property indicator_label3 "Hora 02"
#property indicator_label4 "Hora 03"
#property indicator_label5 "Hora 04"
#property indicator_label6 "Hora 05"
#property indicator_label7 "Hora 06"
#property indicator_label8 "Hora 07"
#property indicator_label9 "Hora 08"
#property indicator_label10 "Hora 09"
#property indicator_label11 "Hora 10"
#property indicator_label12 "Hora 11"
#property indicator_label13 "Hora 12"
#property indicator_label14 "Hora 13"
#property indicator_label15 "Hora 14"
#property indicator_label16 "Hora 15"
#property indicator_label17 "Hora 16"
#property indicator_label18 "Hora 17"
#property indicator_label19 "Hora 18"
#property indicator_label20 "Hora 19"
#property indicator_label21 "Hora 20"
#property indicator_label22 "Hora 21"
#property indicator_label23 "Hora 22"
#property indicator_label24 "Hora 23"
#property indicator_label25 "Hora"

Declaração dos Buffers

  • Em seguida, declaramos os buffers e uma variável inteira para a hora do dia, que será calculada posteriormente.

double hourBuffer0[];
double hourBuffer1[];
double hourBuffer2[];
double hourBuffer3[];
double hourBuffer4[];
double hourBuffer5[];
double hourBuffer6[];
double hourBuffer7[];
double hourBuffer8[];
double hourBuffer9[];
double hourBuffer10[];
double hourBuffer11[];
double hourBuffer12[];
double hourBuffer13[];
double hourBuffer14[];
double hourBuffer15[];
double hourBuffer16[];
double hourBuffer17[];
double hourBuffer18[];
double hourBuffer19[];
double hourBuffer20[];
double hourBuffer21[];
double hourBuffer22[];
double hourBuffer23[];
double hourBuffer[];

int bar_hour;

Indexação e Desenho dos Gráficos

Setamos o índice para todos os buffers como dados, e desabilitamos o desenho usando um loop. É importante notar que tentar fazer a indexação via loop apresentou erro, então fizemos isso manualmente. No entanto, o loop funcionou perfeitamente para PlotIndexSetInteger.

// Atribuindo buffers ao índice, ocultando do gráfico, mostrando na janela de dados SetIndexBuffer(0, hourBuffer0, INDICATOR_DATA); SetIndexBuffer(1, hourBuffer1, INDICATOR_DATA); SetIndexBuffer(2, hourBuffer2, INDICATOR_DATA); SetIndexBuffer(3, hourBuffer3, INDICATOR_DATA); SetIndexBuffer(4, hourBuffer4, INDICATOR_DATA); SetIndexBuffer(5, hourBuffer5, INDICATOR_DATA); SetIndexBuffer(6, hourBuffer6, INDICATOR_DATA); SetIndexBuffer(7, hourBuffer7, INDICATOR_DATA); SetIndexBuffer(8, hourBuffer8, INDICATOR_DATA); SetIndexBuffer(9, hourBuffer9, INDICATOR_DATA); SetIndexBuffer(10, hourBuffer10, INDICATOR_DATA); SetIndexBuffer(11, hourBuffer11, INDICATOR_DATA); SetIndexBuffer(12, hourBuffer12, INDICATOR_DATA); SetIndexBuffer(13, hourBuffer13, INDICATOR_DATA); SetIndexBuffer(14, hourBuffer14, INDICATOR_DATA); SetIndexBuffer(15, hourBuffer15, INDICATOR_DATA); SetIndexBuffer(16, hourBuffer16, INDICATOR_DATA); SetIndexBuffer(17, hourBuffer17, INDICATOR_DATA); SetIndexBuffer(18, hourBuffer18, INDICATOR_DATA); SetIndexBuffer(19, hourBuffer19, INDICATOR_DATA); SetIndexBuffer(20, hourBuffer20, INDICATOR_DATA); SetIndexBuffer(21, hourBuffer21, INDICATOR_DATA); SetIndexBuffer(22, hourBuffer22, INDICATOR_DATA); SetIndexBuffer(23, hourBuffer23, INDICATOR_DATA); SetIndexBuffer(24, hourBuffer, INDICATOR_DATA); for(int i = 0; i 

Função OnCalculate e Loop do Programa

  • A seguir, passamos para a função OnCalculate:
  • Nela, zeramos todos os buffers e alteramos somente o correspondente à hora atual para um.

if(rates_total 0 ? prev_calculated - 1 : 0); for(int i = start; i 

Função para adicionar sabor ao comentário

  • Por último, um programa para um comentário:
  • Isso é, na verdade, um cheque de depuração, mas deixei o comentário como está.

string HourToText(int bh) {
string TextHour;

switch(bh)
{
    case 0:
        TextHour = "12 am"; // meia-noite em formato de 12 horas
        break;
    case 1:
        TextHour = "1 am";
        break;
    case 2:
        TextHour = "2 am";
        break;
    case 3:
        TextHour = "3 am";
        break;
    case 4:
        TextHour = "4 am";
        break;
    case 5:
        TextHour = "5 am";
        break;
    case 6:
        TextHour = "6 am";
        break;
    case 7:
        TextHour = "7 am";
        break;
    case 8:
        TextHour = "8 am";
        break;
    case 9:
        TextHour = "9 am";
        break;
    case 10:
        TextHour = "10 am";
        break;
    case 11:
        TextHour = "11 am";
        break;
    case 12:
        TextHour = "12 pm"; // meio-dia em formato de 12 horas
        break;
    case 13:
        TextHour = "1 pm";
        break;
    case 14:
        TextHour = "2 pm";
        break;
    case 15:
        TextHour = "3 pm";
        break;
    case 16:
        TextHour = "4 pm";
        break;
    case 17:
        TextHour = "5 pm";
        break;
    case 18:
        TextHour = "6 pm";
        break;
    case 19:
        TextHour = "7 pm";
        break;
    case 20:
        TextHour = "8 pm";
        break;
    case 21:
        TextHour = "9 pm";
        break;
    case 22:
        TextHour = "10 pm";
        break;
    case 23:
        TextHour = "11 pm";
        break;
    default:
        // Apenas para o caso de 'bh' estar fora do intervalo (0..23)
        TextHour = "Desconhecido";
        break;
}

return TextHour;
}

Note que isso só exibe atualmente através da janela de dados.


Feliz Natal e um próspero Ano Novo de 2025 a todos!

Lista
Comentário 0