Uren Buffers voor Data Verzameling in MetaTrader 5

Mike 2024.12.25 07:05 17 0 0
Bijlage

Doel

Als trader wil je natuurlijk de beste data verzamelen voor je analyses. Deze indicator biedt een eenvoudige manier om elk uur als een binaire bufferarray op te slaan. Dit kan erg handig zijn voor econometrische modellering, waar tijdsvariabelen vaak een belangrijke rol spelen.

Wanneer je data van andere indicatoren verzamelt, bijvoorbeeld naar een CSV-bestand met een functie zoals CopyBuffer, kun je deze indicator gebruiken om extra dummy-kolommen toe te voegen voor elk uur dat je verzamelt.

  • Deze code is ideaal voor traders die data willen verzamelen, bijvoorbeeld voor machine learning-doeleinden. Je krijgt een kant-en-klare dummyvariabele (buffers 0 tot 23) en een uurvariabele (buffer 24) voor gebruik in je modellen.

De Code Stap voor Stap

  • We beginnen met het declareren van het aantal buffers en plots als 25:
#property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25

Buffer Labels

  • Hier definiëren we de labels voor de buffers in het datavenster:
#property indicator_label1 "Uur 00"
#property indicator_label2 "Uur 01"
#property indicator_label3 "Uur 02"
#property indicator_label4 "Uur 03"
#property indicator_label5 "Uur 04"
#property indicator_label6 "Uur 05"
#property indicator_label7 "Uur 06"
#property indicator_label8 "Uur 07"
#property indicator_label9 "Uur 08"
#property indicator_label10 "Uur 09"
#property indicator_label11 "Uur 10"
#property indicator_label12 "Uur 11"
#property indicator_label13 "Uur 12"
#property indicator_label14 "Uur 13"
#property indicator_label15 "Uur 14"
#property indicator_label16 "Uur 15"
#property indicator_label17 "Uur 16"
#property indicator_label18 "Uur 17"
#property indicator_label19 "Uur 18"
#property indicator_label20 "Uur 19"
#property indicator_label21 "Uur 20"
#property indicator_label22 "Uur 21"
#property indicator_label23 "Uur 22"
#property indicator_label24 "Uur 23"
#property indicator_label25 "Uur"

Buffer Declaraties

  • Vervolgens declareren we de buffers en een integer variabele voor het uur van de dag, die later berekend wordt.
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;

Indexering en Plotten

We stellen de indexen voor alle buffers in als data en schakelen het plotten uit met behulp van een loop. Iets anders leek een fout te geven, maar door een voor een te doen werkte het perfect.

// Ken buffers toe aan index, verberg ze van de grafiek, toon in datavenster
SetIndexBuffer(0, hourBuffer0, INDICATOR_DATA);
SetIndexBuffer(1, hourBuffer1, INDICATOR_DATA);
...
SetIndexBuffer(24, hourBuffer, INDICATOR_DATA);

for(int i = 0; i < 24; i++) {
    PlotIndexSetInteger(i, PLOT_DRAW_TYPE, DRAW_NONE);
    PlotIndexSetInteger(i, PLOT_SHOW_DATA, true);
}

return(INIT_SUCCEEDED);

De OnCalculate Functie

  • Hier zetten we alle buffers weer op nul en veranderen alleen die welke overeenkomt met het huidige uur naar één. Er is waarschijnlijk een efficiëntiewinst te behalen, maar dat komt later.
if(rates_total <= 0)
    return(0);

int start = (prev_calculated > 0 ? prev_calculated - 1 : 0);

for(int i = start; i < rates_total; i++) {
    bar_hour = (int)((time[i] % 86400) / 3600);
    // Stel ALLE 24 buffers voor bar i in op 0
    hourBuffer0[i] = 0.0;
    // ... (herhaal voor andere buffers)

    // Stel alleen de bijbehorende buffer in op 1
    switch(bar_hour) {
        case 0: hourBuffer0[i] = 1.0; hourBuffer[i] = bar_hour; break;
        case 1: hourBuffer1[i] = 1.0; hourBuffer[i] = bar_hour; break;
        // ... (herhaal voor andere uren)
    }

    string localHourText = HourToText(bar_hour);
    Comment("Het uur is: ", localHourText);
}

return(rates_total);

Commentaar Functie

  • En tot slot een functie voor een commentaar:
string HourToText(int bh) {
    string TextHour;
    switch(bh) {
        case 0: TextHour = "12 am"; break;
        // ... (herhaal voor andere uren)
        default: TextHour = "Onbekend"; break;
    }
    return TextHour;
}

Opmerking: dit toont momenteel alleen door het datavenster.


Vrolijk Kerstfeest en een Gelukkig Nieuwjaar 2025!

Lijst
Reactie 0