Indledning

Futurelook er Vikingens eget modelsprog. Alle modeller i Vikingen er kodet i dette sprog, og du kan selv oprette dine egne modeller i Vikingen ved hjælp af Futurelook. Med »model« menes diagram.

For alle, der har programmeret i C++, C#, Java, Pascal, Basic eller lignende programmeringssprog, vil det gå hurtigt at sætte sig ind i, hvordan man udvikler sin egen analysemodel i Vikingen ved hjælp af Futurelook.

I funktionsredigereren kan du oprette nye funktioner og redigere kildekoden for eksisterende modeller. Når du har opbygget din analysemodel, skal du angive indstillinger for, hvordan diagrammer, tabeller og konfigurationsfelter skal se ud.

Dette gør Futurelook til et meget fleksibelt og kraftfuldt værktøj til udvikling af unikke analysemetoder til de finansielle markeder.

Denne onlinevejledning er tænkt som en introduktion til programmeringssproget Futurelook for brugere uden tidligere erfaring med programmering. Vi vil gennemgå alle de nødvendige begreber og opbygge vejledningen omkring en række eksempler for at gøre indlæringen lettere for begyndere. Vejledningen er opdelt i 3 forskellige afsnit

Afsnit 1, 2: En introduktion til Futurelook og dets komponenter samt et første indblik i programmering

Afsnit 3, 4 og 5: Informative afsnit om programmeringssproget samt beskrivelse af de værktøjer, der står til rådighed

Afsnit 6, 7 og 8: Futurelook i praksis – hvordan arbejder man med programmet for at tage en idé og omdanne den til en fuldstændig professionel model?

Introduktion til Futurelook

FutureLook er et meget kraftfuldt værktøj for finansanalytikere og investorer. Med FutureLook er det muligt på en enkel måde at oprette egne algoritmer til at udføre komplekse tidsserieanalyser og teknisk analyse. FutureLook er opbygget som et enkelt programmeringssprog med et tilpasset funktionsbibliotek, der er velegnet til analyse af finansielle tidsserier. FutureLook er integreret med Vikingen og er forbundet med Vinstgeneratorn, hvilket gør det nemt at teste algoritmernes rentabilitet.

[billede af menuen »Moduler«]

Ydre set består FutureLook af nogle filer, der er gemt i Vikingen. Det drejer sig om henholdsvis modeller og præsentationer.

Introduktion til Futurelook – Funktionsredigereren

Funktionsredigereren er det værktøj, man bruger til at programmere sin model. Ved at starte Funktionskontrollen (’Moduler’ –> ’Funktionskontroll’) kan du gennemse det eksisterende funktionsbibliotek, der findes i din Viking, og oprette nye biblioteker eller funktioner. Funktionseditoren er et simpelt tekstvindue, der bruges til at redigere og oprette egne modeller, kompilere disse og skrive hjælpetekster. Du kommer til funktionseditoren enten ved at oprette en ’Ny’ model eller ved at ’redigere’ en eksisterende model.

Tip: Ved at klikke på »Vis indhold« kan man få vist en forhåndsvisning af funktionerne, hvilket kan være nyttigt, hvis man leder efter et stykke kode, man kan genbruge.

Ud over selve tekstfeltet har funktionsredigereren knapper til at »Gem« funktionen, når man har foretaget ændringer, og »Kompilér« koden for at gøre funktionen kørbar i Vikingen. Man kan også bruge knappen ’Kør’ til hurtigt at starte funktionen med standardindstillingerne for at kontrollere, at koden fungerer som forventet. Til sidst er der en knap med teksten »Præsentation«, som sender én videre til »Præsentationseditoren« for at foretage de grafiske indstillinger for modellen. Funktionseditoren har to tilstande, hvor »Rediger hjælp« kan bruges til at redigere hjælpefilen i stedet for programkoden.

Introduktion til Futurelook – Præsentationsredigeringsprogrammet

Når du i Vikingen åbner »analytikeren« og vælger en model, vælger du faktisk en præsentation. Denne præsentation indeholder oplysninger om, hvilken model der anvendes, samt hvordan den skal præsenteres og med hvilke indstillinger. Dette gør det muligt at have flere separate præsentationer, der bruger de samme underliggende modeller. Ud over sin funktion som »grænseflade« indeholder præsentationsmodellen også oplysninger om, hvordan diagrammet eller tabellen ser ud, samt hvilke indstillinger brugeren kan foretage, f.eks. ændre tidsinterval, farver eller skifte til logaritmisk skala. Præsentationen indeholder desuden hjælpeoplysninger samt specifikationer for, hvordan outputdata skal håndteres i modelltabellen.

Grundlæggende om Futurelook

Programmernes struktur og udformning

Par();
Parametre: Håndtering af inddata og uddata. Definer, hvilke inddata der skal anvendes i funktionen, samt hvilke dataserier der skal kunne udtrækkes fra modellen.
Hvor
Variabler: Definer, hvilke variabler der skal bruges lokalt i programmet, men ikke som output.
Start & slut;
Start og slut for selve programkoden. Her kan du kun anvende objekter, der er defineret i ovenstående segmenter, og kalde funktioner, der findes i Vikings funktionsbibliotek.

Kommentarer

Forskellige programmeringssprog bruger forskellige tegn til at signalere til kompilatoren, at det, der skrives, ikke er programkode, som den forstår, men er beregnet til programmøren. Tekst om, hvorfor kommenteret kode er vigtig Futurelook bruger tegnkombinationerne // til at angive, at alt på samme linje er en kommentar, samt (* og *) til at angive, at alt, der skrives mellem tegnene, er kommentarer.

Altså:

// Dette er en kommentar!

(* Dette er en kommentar, der strækker sig over flere linjer! *)

Et første kig på: Parametre

Det første afsnit i hver funktion i Futurelook er definitionen af parametrene. Her angiver du, hvordan Vikingen skal håndtere inddata (et eller flere objekter), hvilke uddata der skal kunne hentes ud af funktionen (f.eks. i en modeltabel), samt hvilke parametre der skal være tilgængelige i modelindstillingerne (antal perioder for MAV osv.). Forenklet kan man sige, at par-segmentet skal se således ud:

par( [flag] identifikator : datatype ; [flag2] identifikator2 : datatype2 ; .. ) : [returtype] ;

Her [flag] er en specifikation for, hvordan Futurelook skal håndtere dataene:

out :

Dataene kan bruges som output, f.eks. som en graf i diagrammet eller som en tabelkolonne i modeltabellen.

var :

datat bruges som en variabel, præcis som om den var defineret under var-segmentet i stedet for par-segmentet. Forskellen er, at hvis man definerer den under par-segmentet med flagget var, er den synlig i præsentationsredigereren og kan dermed hentes frem senere, hvis man ønsker det.

:

Hvis der ikke er noget flag, betyder det, at dataene skal ind i modellen (tænk på det modsatte af »out«).

:returtype

Ved at angive en datatype efter : efter den afsluttende parentes definerer man, hvad funktionen skal returnere. Dette bruges, når man skal kalde funktionen inde i en anden funktion, og det kræver, at man afslutter programmet med at definere ’return [identifikator];’ før den sidste ’end;’-linje.

Som eksempel betyder »out utvektor1 : realvector«, at »utvektor1« er navnet på en vektor, hvis indhold er af typen real, og at denne vektor skal sendes ud af modellen for at kunne bruges grafisk eller i modelltabellen.

Et første kig på: Variabler

Variabler er data, som du ønsker at anvende inde i funktionen, men som ikke behøver eller skal bruges uden for den. Dette kan være data af typen integer, dvs. heltal, der bruges som tæller i en løkke, eller vektorer, der bruges, mens funktionen kører, men som ikke behøver at blive brugt som output. I sin enkleste form er var-segmentet noget enklere end par-segmentet og ser således ud:

identifikator: datatype; ..

Bemærk, at »var«-segmentet ikke afsluttes med et særligt tegn eller ord, men at alle deklarationer med ovenstående syntaks, der ligger efter »var« og før »begin«, bliver deklarerede variabler i programmet.

Et første kig på: Funktioner

Alle funktioner i Vikings funktionsbibliotek kan kaldes i dine egne funktioner ved hjælp af følgende syntaks:

[biblioteksnavn].[funktionsnavn](parameter1, parameter2, .. );

Som eksempel kan man kalde funktionen »MAVN«, der findes i funktionsbiblioteket »Std«, med følgende kald:

std.MAVN(a,b);

Vi ved, at MAVN beregner et naturligt gennemsnit af en datarække »a« af typen realvektor set over de seneste »b« perioder. Hvis vi ønsker et 20-perioders gennemsnit af hovedobjektets slutkurs, skriver vi således:

std.MAVN(main.close, 20);

Et første kig på: Operatører

Mange af de udtryk, der bruges i Futurelook, vil indeholde operatorer. En operator er et tegn, der svarer til en af en række forskellige ting, såsom en matematisk regneaktion eller en sammenligning mellem to ting. Operatorerne skal have to parametre at arbejde med og vil efter operationen returnere en værdi.

Man kan f.eks. beregne indekskursen for S&P 500 i SEK ved at gange en vektor sp500, der består af indekset, med en vektor sekusd, der består af kronekursen.

SP500SEK := sp500 * sekusd;

Operatoren i dette tilfælde er multiplikation *. Futurelook ved, at både sp500 og sekusd er vektorer, og sørger for, at resultatet af operationen også er en vektor. Det er således muligt at vise SP500Sek på skærmen præcis, som man ønsker.

Et første kig på: Et eksempelprogram

Vi har nu fået et første indblik i de forskellige komponenter, der udgør et program i Futurelook, og kan derfor begynde at overveje helheden: hvordan ser en komplet model ud?

Som eksempel skriver vi en model, der beregner to forskellige glidende gennemsnit af slutkurserne på en aktie og et glidende gennemsnit af handelsvolumenet for den samme aktie.

par(main : instrument; out MV1, MV2, MVVol : realvector; MAV1Length, MAV2Length, MAVVolLength : integer); var filledclose : realvector; begin filledclose

Vi analyserer koden for at undersøge alle delene ud fra det, vi har lært i dette afsnit.

par(main : instrument;

Den første parameter, der defineres, er et objekt af typen instrument, som vi kalder main. I en almindelig model vil denne linje altid være til stede, da vi ønsker, at modellen skal køres på »Aktuelt Objekt« i Vikingen.

out MV1, MV2, MVVol : realvektor;

Vi definerer desuden tre vektorer, som vi ønsker skal kunne være decimaltal, dvs. reelle vektorer, og vi ønsker at kunne se dem i diagrammet, så vi angiver præfikset »out« for dem.

MAV1Length, MAV2Length, MAVVolLength : heltal);

Modellen skal anvende tre parametre, der bestemmer, hvordan modellen fungerer, nemlig de tre forskellige perioder for de glidende gennemsnit. Ved ikke at angive dem som »out« siger vi indirekte, at modellen kræver disse tre som indgangsparametre. Husk, at den sidste linje under par-segmentet skal afsluttes med );

var filledclose : realvector;

I »var«-segmentet definerer vi en vektor, som vi ønsker skal kunne indeholde decimaltal, dvs. en reellektor. Ved at definere den under »var«-segmentet kan vi ikke tegne vektoren i diagrammet, men bruger den kun inde i modellen.

begyndelse

Alt, hvad der står skrevet mellem »begin« og det sidste »end«, udgør selve instruktionen for, hvad modellen skal gøre

filledclose := std.FILL(main.close);

Først bruger vi standardfunktionen FILL til at tildele vektoren filledclose alle slutkurser, der findes i objektet main, og desuden udfylde alle huller i vektoren, hvis der skulle mangle data.

MV1 := std.MAVN(filledclose, MAV1Length);

Derefter tildeler vi vektoren MV1 det glidende gennemsnit af filledclose med periodelængden MAV1Length

MV2 := std.MAVN(filledclose, MAV2Length);

derudover tildeler vi vektoren MV2 det glidende gennemsnit af filledclose med den anden periodelængde MAV2Length

MVVol := std.MAVN(main.vol, MAVVolLength);

og til sidst tildeler vi vektoren MVVOL værdier, der svarer til det glidende gennemsnit af objektets volumenvektor main.vol.

in Programmering

Related Articles