Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Læringsmål:

  • Betingelser
  • For-løkker
  • PlotPLACEHOLDER

Pensum:

  • 3.5 Scripts to Produce and Customize Simple Plots
  • 3.7 User-Defined Functions That Return a Single Value
  • 4.1 The if statement
  • 4.2 The if-else statement
  • 5.1 The for loopPLACEHOLDER

 

Denne oppgaven er ment som en øvelse i å løse et litt stort og abstrakt problem. Det som er viktig å tenke på da er hva som i oppgaveteksten som er relevant for akkurat den deloppgaven man skal løse. Man må også passe på å dele problemer opp i mindre og løsbare problemer, og løse kun ett og ett om gangen. Disse delproblemene tilsvarer veldig ofte enten funksjoner eller kontrollstrukturer som if-else, for- eller while-løkker. 

Når man skal investere penger i aksjer nnes finnes det mange forskjellige investeringsstrategier. I denne oppgaven skal det implementeres inntil tre to forskjellige strategier.
Vi forenkler børsmarkedet og sier at en aksje har en fast pris per dag og kan enten kjøpes eller selges kl 12:00. Det tillates også å investere i brøkdeler av en aksje. Det vil si at om man har 53,17 kr kan man investere i 53,17 % av en aksje som koster 100 kr.
Aksjeprisene er gitt som en vektor av tall, hvor pris i tilsvarer prisen kl 12.00 på dag i n. For eksempel:

Dag12345678910
Pris1001011021001021041039896101

Hvis det investeres 50 kr i denne aksjen på dag 1 og selger den på dag nummer 2 så tjenes 50 * (101 / 100) = 0.50 kr.

a)

Lag en vektor closingPrices med prisene over.

b)

Plott aksjeprisene i en figur. 
Resultatet skal se slik ut:
 

c)

Lag funksjonen daily_returns(closing_prices dailyReturns(closingPrices) hvor closing_prices closingPrices er aksjeprisene for et selskap i en gitt periode. Funksjonen skal returnere en vektor som viser dag for dag hvor mye en aksje har gått opp eller ned. Dvs.

dailyReturnsi = closingPricei - closingPricei􀀀i-1

Daglig gevinst for dag nummer 1 skal være 0. Gitt prisene over skal funksjonen returnere følgende vektor: [0, 1, 1, -2, 2, 2, -1, -5, -2, 5]

...

For å lage den første strategien ma det lages en funksjon som sjekker om prisen har gått opp de siste n dagene.

e)

lag funksjonen isGoingUp(dailyReturn, i, n) som sjekker om alle elementene fra i og ned til i-n+1 i dailyReturn er positive eller lik null. Funksjonen skal returnere true om dette er tilfelle og false ellers. 

Code Block
languagenone
isGoingUp([0, 1], 2, 2) 	% Returnerer 1
isGoingUp([0,-1], 2, 2) 	% Returnerer 0
isGoingUp([-1, 0, 1], 3, 2)	% Returnerer 1
isGoingUp([1, 0, 1], 3, 3) 	% Returnerer 1

f)

Den første strategien som skal implementeres heter keepRising. Den baserer seg på at hvis en aksje er i ferd med å gå opp, så vil den fortsette å gå oppover. Det vil si kjøp aksjer som har hatt positiv eller 0 daglig gevinst de siste n dagene og selg aksjer som ikke har det. 
Funksjonshodet for denne funksjonen skal se slik ut:
function returns = momentum( startAmount, n, closingPrices ) 

Implementer etter pseudokoden:

...

Code Block
languagenone
Kalkuler daglige gevinster
cash = startAmount
investert = 0

for dag fra n til lengde av closing_prices
%Oppdater investerte penger.
investert = investert * (dagen pris / gårsdagens pris)

hvis prisen har steget de siste n dagene
invester all cash i aksjen
ellers
ta ut alle pengene fra aksjen
slutt hvis
slutt for-løkke

svar = cash + investert
Code Block
languagenone
% skal skrive ut 98.0579
momentum (100 , 2, [100 101 102 100 102 104 103 98 96 101])

g)

Den andre strategien heter contrarian og mener at "what goes up must come down". I denne strategien vil du selge aksjer som er på vei opp, og kjøpe aksjer som er på vei nedover.
Hvorfor kan vi ikke bruke negasjonen av isGoingUp(..) her?
Tips: Lag en funksjon som sjekker om prisen er på vei nedover.

Testverdi:

Code Block
languagenone
% skal skrive ut 103.0612
contrarian (100 , 2, [100 101 102 100 102 104 103 98 96 101])

 

 

Code Block
languagenone
 
Code Block
languagenone
 
Code Block
languagenone
 

 

...