2.2 Hvordan en robot er bygget
En robot er ikke et program som kjører fra topp til bunn og stopper. Den venter på hendelser – og plattformen kaller riktig funksjon når noe skjer.
Hendelsene
| Hendelse | MetaTrader (MQL4/MQL5) | cTrader (C#) |
|---|---|---|
| Roboten starter | OnInit() | OnStart() |
| Ny pris | OnTick() | OnTick() |
| Nytt lys | Må sjekkes selv i OnTick() | OnBar() |
| Roboten stopper | OnDeinit() | OnStop() |
Nytt lys i MetaTrader
MetaTrader har ingen egen hendelse for nytt lys. Derfor sjekker vi selv om tidspunktet for lys 0 har endret seg:
datetime lastBarTime = 0;
void OnTick()
{
datetime barTime = iTime(_Symbol, _Period, 0);
if(barTime == lastBarTime) return; // samme lys som sist: gjør ingenting
lastBarTime = barTime;
// her ser vi etter nye signaler – én gang per lys
}return betyr «avslutt funksjonen her». Koden under kjøres altså bare én gang per lys.
Nytt lys i cTrader
I cTrader er det enklere. OnBar() kalles automatisk hver gang et nytt lys starter:
protected override void OnBar()
{
// her ser vi etter nye signaler – én gang per lys
}Hva skal hvor?
- OnInit / OnStart: Lag indikatorer og sjekk innstillinger.
- OnTick: Ting som må skje kontinuerlig – for eksempel trailing stop.
- Nytt lys: Les signaler og åpne handler.
- OnDeinit / OnStop: Rydd opp.
Hvorfor ikke se etter signaler ved hver pris?
Det kan komme mange prisendringer i sekundet. Hvis roboten ser etter signaler på hver av dem, kan den åpne flere handler på samme signal – og resultatet blir avhengig av hvor mange prisendringer som kom. Ved å bare se etter signaler på nytt lys blir roboten forutsigbar, og testene blir mer pålitelige.
Kort oppsummert
- En robot reagerer på hendelser: start, ny pris, nytt lys og stopp.
- I MetaTrader sjekker du selv om et nytt lys har startet. I cTrader brukes OnBar.
- Se etter signaler én gang per lys – det gjør roboten forutsigbar.
65% av ikke-profesjonelle taper penger når de handler CFDer med denne leverandøren.