Hvordan lage en algoritme for trading algoritmehandel

Hvordan lage en algoritme for trading

Som nevnt i forrige artikkel om algoritmer kan vi enklest definere en algoritme som en oppskrift eller plan for hva som skal gjøres, og når det skal gjøres. Det er en ganske vid definisjon, så her skal vi vise deg i praksis hvordan du kan lage en algoritme for trading basert på teknisk analyse.

Trading med algoritmer

Algoritmer er et sett med regler, mens en strategi er en metode som består av ulike algoritmer. Innenfor trading vil strategien bestemme hvilke verktøy du har til rådighet, mens algoritmene vil bestemme hva som må gjøres og når det må gjøres for å holde deg innenfor handlingsrommet strategien gir deg.

Altså vil en strategi kunne gi deg mulighet til å bruke verktøy som gearing, stop/loss, trading med aksjer eller andre instrumenter for å nå et mål. Algoritmene vil fortelle deg når du kan bruke gearing og hvor høy gearing, på hvilke nivåer du skal sette stop/loss, og når du skal kjøpe eller selge de forskjellige instrumentene.

TradingView Pine Editor

Pine Editor er et program på TradingView hvor du kan skrive koder for enten tekniske indikatorer eller for backtesting av strategi og trading. Programmeringsspråket som bruker er Pine Script. Pine Script har likhetstrekk med Python. Pine Editor følger med TradingView, noe som betyr at du ikke trenger å laste ned eller installere noen programmer. For å kunne bruke Pine Editor må du ha en TradingView-konto, det kan du åpner her dersom du ikke allerede har en.

TradingView teknisk analyseprogram
Ny tradingview teknisk analyse program
  • Realtidskurser
  • Norske og utenlandske aksjer
  • Indekser, råvarer, valuta, etc
  • Støtte, motstand, formasjoner, trender
  • Indikatorer
  • Fundamental data
  • Strategy Tester
  • Stock Screener
  • Basic - gratis
  • Pro - $14,95 pr mnd
  • Pro+ - $29,95 pr mnd
  • Premium - $59,95 pr mnd


Du kan prøve TradingView Premium gratis i 30 dager.

tradingview pine editor algoritme study strategy robot trading
Charts fra TradingView.

For å åpne Pine Editor trykker du ganske enkelt på knappen hvor det står “Pine Editor” nederst på skjermen. I Pine Editor vil det allerede være lagt til noen linjer med kommentarer og koder. På de to første linjene har du lisens og brukernavn. Begge disse starter med “//” og har et mellomrom frem til teksten. Dette er linjer med ren tekst som ikke er nødvendige, men de kan være nyttig for å få oversikt over algoritmen, noe som vi kommer tilbake til senere.

Den tredje linjen på linje 4 er en compiler directive. Merk at det ikke er noe mellomrom mellom “//” og teksten. Dette er en kode som forteller hvilken versjon av Pine Editor du bruker. Det anbefales å alltid bruke den nyeste slik at du har flest mulig funksjoner tilgjengelig. Pt er dette versjon 4. For at din algoritme skal fungere må du har compiler directive.

På linje 5 har vi en declaration. Her kan du enten har “study” eller “strategy“. “study” brukes dersom du ønsker å lage en teknisk indikator, mens “strategy” brukes når du skal lage en algoritme for backtesting eller trading. Inne i parentes og anførselstegn har du navnet på den tekniske indikatoren eller strategien du ønsker å lage.

På linje 6 har du en plot command. Dette er en kode som forteller TradingView hva som skal vises. Som default er det “close“. Dette viser sluttkursen.

Ved å trykke på “Save“, og deretter “Add to Chart” vil algoritmen din bli lagret og lagt til chartet som vist nedenfor.

pine editor robot algoritme for trading

Tips til hjelp

Dersom du trenger hjelp med Pine Editor kan du holde musepekeren over funksjoner for å få en forklaring som vist nedenfor. Ved å trykke “Ctrl” og venstre museknapp samtidig vil du åpne en mer forklarende guide for programmeringsspråket i Pine Editor.

beskrivelse pine editor

Lag en teknisk indikator i Pine Editor

Vi skal nå lage en teknisk indikator i Pine Editor. Vi ønsker å ha et kort og et langt glidende gjennomsnitt på henholdsvis 10 og 50 dager. For å lage en praktisk løsning ønsker vi også å ha muligheten til å justere lengden på de glidende gjennomsnittene uten å måtte justere koden. Vi ønsker også at de glidende gjennomsnittene skal vises over kursen og ikke i et eget chart. Dette gjøres ved å legge til “overlay=true” i declaration på linje 5.

De første linjene med kode vi skal skrive er under “// Input“. Det er her vi åpner for muligheten til å justere lengde på gjennomsnittene ved å bruke menyen som åpnes ved å trykke på tannhjulet. Vi skal som nevnt ha et kort og et langt gjennomsnitt. Vi kaller disse for “shortSMAa” og “longSMAa“. Her bruker vi funksjonen “input” og oppgir variablene “title” som er navnet på det gjennomsnittene, “type” hvor vi bruker “input.integer” som betyr at input er hele siffer, og “defval” som betyr “default value” og angir startverdien på det korte og det lange gjennomsnittet.

Deretter må vi definere de glidende gjennomsnittene vi skal bruke under “// Indikatorer“. Vi bruker Smoothed Moving Average “sma” og sluttkursen “close” på aksjekursen eller indeksen.

Til slutt forteller vi TradingView hvordan de tekniske indikatorene skal plottes inn i chartet under “// Plot“. Det korte gjennomsnittet skal være grønt, mens det lange gjennomsnittet skal være rødt. Dette bestemmes ved å legge til variablene “color=color.green” og “color=color.red“.

hvordan lage en teknisk indikator i pine editor tradingview algoritme
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © hannie1981
//@version=4
study("My Script", overlay=true)
// Input
shortSMAa = input(title="Kort SMA", type=input.integer, defval=10)
longSMAa = input(title="Lang SMA", type=input.integer, defval=50)
// Indikatorer
shortSMA = sma(close, shortSMAa)
longSMA = sma(close, longSMAa)
// Plot
plot(shortSMA, color=color.green)
plot(longSMA, color=color.red)

Lag algoritme for backtesting

Vi skal her vise et eksempel på hvordan du kan lage en algoritme for backtesting. Vi tar utgangspunkt i indikatoren som består av et kort og et langt glidende gjennomsnitt på 10 og 50 dager som vi allerede har laget. Strategien vi ønsker å teste er å kjøpe når vi får et golden cross, altså at det korte glidende gjennomsnittet bryter opp over det lange gjennomsnittet. Vi har 100000 kr tilgjengelig for investering, og vi ønsker at kurtasje/spread skal trekkes fra. Vi bruker kun trailing stop/loss og ikke take profit. Stop/loss trigges av at kursen faller 2 Average True Range fra lav.

Declaration

I declaration velger vi “strategy” siden vi nå skal gjøre en backtest av en algoritme for trading. Vi kaller denne for “Glidende gjennomsnitt strategi“. De glidende gjennomsnittene skal fortsatt vises på samme chart som kursen. Startkapital er “initial_capital=100000”, og vi kjøper og selger 100 %, med “default_qty_value = 100” og “default_qty_type = strategy.percent_of_equity“, mens kurtasje/kostnad er “commission_type=strategy.commission.cash_per_order” og “commision_value=0“, og denne kan justeres i menyen slik at den kan tilpasses spread/kurtasjen du betaler.

strategy("Glidende gjennomsnitt strategi", overlay=true, initial_capital=100000, 
     default_qty_value = 100, default_qty_type = strategy.percent_of_equity,
     commission_type=strategy.commission.cash_per_order,
     commission_value=0)

Input

Under “// Input” må vi legge til tid slik at vi kan begrense hvor langt tilbake backtestingen skal gå. Dette vil være et trade window for hvor algoritmen testes. Her bruker vi funksjonene “startMonth” og “startYear” slik at vi kan sette en startmåned og startår. Videre trenger vi funksjonen “tradeWindow” slik at algoritmen kun gjennomfører handlene innenfor perioden vi har bestemt. Vi setter januar 2020, “1” og “2020” som default value.

shortSMAa = input(title="Kort SMA", type=input.integer, defval=10)
longSMAa = input(title="Lang SMA", type=input.integer, defval=50)
startMonth = input(title="Start måned", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Start år", type=input.integer, defval=2020, minval=1800, maxval=2100)
tradeWindow = (time >= timestamp(startYear, startMonth, 1, 0, 0))

Indikatorer

Vi bruker de samme glidende gjennomsnittene som i vårt først eksempel som utgangspunkt. Disse kan vi justere enkelt i menyen for å optimalisere algoritmen. Videre trenger vi Average True Range, “atr“, for å kunne finne stop/loss nivåer.

shortSMA = sma(close, shortSMAa)
longSMA = sma(close, longSMAa)
atr = atr(14)

Crossover

Under “Crossover” koder vi logikken i strategien for trading som skal testes ut. Vår strategi tar kun long posisjoner, og disse skal utføres når vi får en crossover ved at det korte gjennomsnittet beveger seg opp over det lange gjennomsnittet. Dette er “longCondition” med kort og langt glidende gjennomsnitt, og perioden vi vil teste strategien i, tradeWindow.

Vår stop/loss er en trailing stop/loss. Det betyr at stop/loss oppjusteres når kursen stiger. Stop/loss nivået er definert som det høyeste historiske lav-nivået – 2x Average True Range.

longCondition = crossover(shortSMA, longSMA) and tradeWindow
if (longCondition)
    strategy.entry("long", strategy.long)
if (longCondition)
    stopLoss = low - atr * 2
    strategy.entry("long", strategy.long)
    strategy.exit("exit", "long", stop=stopLoss)

På linjen med “if (longCondition)“, som tilsvarer golden cross, vil funksjonen “strategy.entry” aktiveres. Dette tilsvarer et kjøp. Neste “if” er funksjonen for stop/loss. Denne vil beregnes fortløpende så lenge vi har en aktiv long posisjon.

Plot

Plot beholdes som i vårt første eksempel.

plot(shortSMA, color=color.green)
plot(longSMA, color=color.red)

Fullstendig algoritme for backtesting av strategi

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © hannie1981
//@version=4
strategy("Glidende gjennomsnitt strategi", overlay=true, initial_capital=100000, 
     default_qty_value = 100, default_qty_type = strategy.percent_of_equity,
     commission_type=strategy.commission.cash_per_order,
     commission_value=0)
// Input
shortSMAa = input(title="Kort SMA", type=input.integer, defval=10)
longSMAa = input(title="Lang SMA", type=input.integer, defval=50)
startMonth = input(title="Start måned", type=input.integer, defval=1, minval=1, maxval=12)
startYear = input(title="Start år", type=input.integer, defval=2020, minval=1800, maxval=2100)
tradeWindow = (time >= timestamp(startYear, startMonth, 1, 0, 0))
// Indikatorer
shortSMA = sma(close, shortSMAa)
longSMA = sma(close, longSMAa)
atr = atr(14)
// Crossover
longCondition = crossover(shortSMA, longSMA) and tradeWindow
if (longCondition)
    strategy.entry("long", strategy.long)
if (longCondition)
    stopLoss = low - atr * 2
    strategy.entry("long", strategy.long)
    strategy.exit("exit", "long", stop=stopLoss)
// Plot
plot(shortSMA, color=color.green)
plot(longSMA, color=color.red)

Resultater fra algoritme for backtesting

Når vi skal teste vår algoritme må vi først oppgi kostnaden og størrelse på handlene vi skal gjennomføre. Dette kan vi gjøre i menyen som åpnes når vi trykker på tannhjulet til høyre for indikatoren. Under “Properties” justerer vi kostnaden til 0,01 % som kurtasje/spread for kjøp og salg.

backtesting strategi algoritme for trading

Vi kan se at “Glidende gjennomsnitt strategi” har gitt en realisert positiv avkastning på 7,71 % i perioden fra januar 2020 og frem til i dag. Videre kan vi se at det i november 2020 ble inngått en ny longposisjon, og siden denne ikke er realisert har denne ikke blitt regnet med. Legger vi til denne har vi en samlet realisert og urealisert avkastning på omtrent 37 %. I samme periode har OSEBX indeksen gitt en avkastning på omtrent 25 %.

Siden algoritmen har gitt meravkastning i forhold til referanseindeks kan den brukes slik som den er, men det er selvsagt viktig å huske på at historisk avkastning ikke er noen garanti for fremtidig avkastning. Videre er det muligheter for å optimalisere algoritmen ytterligere. For eksempel kan en nedjustering av lengden på det korte gjennomsnittet gi oss tidligere inngang etter korreksjoner. Dette ville da kunne gitt en bedre avkastning. Stop/loss har kun blitt utført to ganger i perioden. Slik vi ser det vil det ha lite hensikt å justere denne ytterligere.

Algoritme for trading FAQ

Hvilke algoritmer for trading finnes?

Det finnes et utall algoritmer for trading. For eksempel kan en algoritme fortelle deg hvilken aksje du bør kjøpe og til hvilken pris. Videre kan algoritmer fortelle deg når du skal bruke gearing eller sette en stop/loss. Det finnes også algoritmer som kan gi deg en bedre gjennomsnittskurs på investeringene dine.

Hvordan kan jeg lage en algoritme for trading?

Dersom du lærer deg Pine Script kan du skrive dine egne algoritmer for trading. Det finnes også mange templates med ferdige algoritmer som du selv kan justere. På vår side viser vi deg en enkel algoritme for trading som du kan prøve ut.

Må jeg kunne mye om data for å kunne lage en algoritme for trading?

Det er en fordel å ha kjennskap til bruk av data og programvare når du skal lage en algoritme. Men, det mest grunnleggende er noe de aller fleste kan klare å lære seg. På vår side viser vi deg steg for steg hvordan du kan lage algoritme for trading.

Hvilke program kan jeg bruke for å lage en trading algoritme?

Det finnes programmer for teknisk analyse som kan være til stor hjelp når du skal lage en trading algoritme. Det er en stor fordel å ha mulighet til backtesting for å se hvordan algoritmen hadde gjort det i praksis før du begynner å trade med ekte penger. Husk også at historisk avkastning ikke er en garanti for fremtidig avkastning.

Hvordan kan jeg backteste en algoritme i TradingView?

For å backteste en algoritme eller strategi i TradingView må du bruke Pine Editor. Det finnes flere templates som kan brukes og det er også mulig å skrive en egen algoritme for trading og backteste denne.