Statystyka, prognozowanie, ekonometria, data mining Strona Główna
Reklama pqstat.pl
Statystyka, prognozowanie, ekonometria, data mining
Forum miłośników statystyki - Portal Statystyczny

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  Chat   Regulamin  Kadra forum
PORTAL STATYSTYCZNY
 Ogłoszenie 
FORUM STATYSTYCZNE MA JUŻ 10 LAT

Znasz statystykę lub ekonometrię, metody prognozowania, data mining i chcesz pomóc w rozwoju forum statystycznego ?
Pisz na: administrator(małpa)statystycy.pl

Rozpoczął swoją działalność portal statystyczny - masz pomysł na jego rozwój ?

Drogi forumowiczu! Zanim napiszesz posta zapoznaj się z regulaminem forum i przedstaw się
The International Year of Statistics (Statistics2013) Smarter Poland Portal statystyczny

Poprzedni temat «» Następny temat

Tagi tematu: fportfolio, inwestycyjneg, lpsolve, optymalizacja, portfela

[R] fPortfolio, lpSolve Optymalizacja portfela inwestycyjneg
Autor Wiadomość
qni 
Szeregowy


Posty: 1
Skąd: Kraków
Wysłany: 2018-02-22, 22:18   [R] fPortfolio, lpSolve Optymalizacja portfela inwestycyjneg

Witam serdecznie.
Ze statystyką mam mało wspólnego tym bardziej z R, ale rzuciłem się z motyką na słońce i postawiłem sobie cel wyliczenie optymalnego portfela TFI.

Mój plan na rozwiązanie tego problemu jest prosty:
a) Pobrać notowanie TFI - zrobione
b) Wykres portfeli - zrobione
c) Portfel z minimalnym ryzykiem - zrobione
d) Portfel na podstawie Sharpae - zrobione
e) Portfel o danym poziomie ryzyka, max zwrocie
f) Portfel o max zwrocie

Portfel o danym poziomie ryzyka nie wydawał się czym trudnym i udało się nawet go wyliczyć. Problem polega na tym, że wagi aktywów są ujemne, opcja sprzedaży krótka, której ja się posiadam.

Bardzo proszę o pomoc w zbudowanie portfela o danym poziomie ryzyka. Ja już nie mam pomysłu co trzeba zrobić.

Poniżej wklejam skrypt, bardzo proszę o wszelkie uwagi.

Dzięki z góry



Skrypt pobierający dane:
Kod:

library(RCurl)
library(dplyr)
library(xts)
library(quantmod)
library(timeSeries)

getStooqData <- function(asset_code,static_cookie=TRUE) {
 
  data_tmp <- tempfile() # "data.csv"
  cookie_tmp <- "cookie.txt"
 
  u1 <- paste("https://stooq.pl/q/d/?s=",asset_code,"&i=d",sep="")
  u2 <- paste("https://stooq.pl/q/d/l/?s=",asset_code,"&i=d&",sep="")
 
  if (!static_cookie) {
    h <- c(paste("GET ",u1," HTTP/1.0",sep=""),
           Accept="image/gif",
           Accept="image/x-xbitmap",
           Accept="image/jpeg",
           Accept="mage/pjpeg",
           Accept="application/x-shockwave-flash",
           Accept="application/vnd.ms-excel",
           Accept="application/msword",
           Accept="*/*",
           'Accept-Language'="pl, en-us;q=0.7",
           'User-Agent'="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)",
           'Proxy-Connection'="Keep-Alive"
    )
   
    u1Opts <- curlOptions(header=TRUE,
                          httpheader=h,
                          cookiejar=cookie_tmp
    )
   
    curlPerform(url=u1,.opts=u1Opts,verbose=TRUE)
   
    h <- c(paste("GET",u2,"HTTP/1.0"),
           Accept="image/gif",
           Accept="image/x-xbitmap",
           Accept="image/jpeg",
           Accept="mage/pjpeg",
           Accept="application/x-shockwave-flash",
           Accept="application/vnd.ms-excel",
           Accept="application/msword",
           Accept="*/*",
           'Accept-Language'="pl, en-us;q=0.7",
           'User-Agent'="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)",
           'Proxy-Connection'="Keep-Alive"
    )
   
    u2Opts <- curlOptions(header=TRUE,
                          httpheader=h,
                          cookiefile=cookie_tmp
    )
  }
  else {
    h <- c(paste("GET",u2,"HTTP/1.0"),
           Accept="image/gif",
           Accept="image/x-xbitmap",
           Accept="image/jpeg",
           Accept="mage/pjpeg",
           Accept="application/x-shockwave-flash",
           Accept="application/vnd.ms-excel",
           Accept="application/msword",
           Accept="*/*",
           'Accept-Language'="pl, en-us;q=0.7",
           'User-Agent'="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)",
           'Proxy-Connection'="Keep-Alive",
           Cookie=paste("cookie_uu=p;cookie_user=%3F0001dllg000011500d1300%7C",asset_code,sep="")
    )
   
    u2Opts <- curlOptions(header=TRUE,
                          httpheader=h
    )
  }
 
  reader <- basicTextGatherer()
  w <- getURLContent(url=u2,.opts=u2Opts)
  write(w,file=data_tmp)
  stooq_data <- read.csv(data_tmp)
  stooq_data
}

# Pobranie notowan TFI w formie csv
N_2781 <- select(getStooqData("2781.N", static_cookie=TRUE), Data, Zamkniecie)
N_2802 <- select(getStooqData("2802.N", static_cookie=TRUE), Data, Zamkniecie)
N_2833 <- select(getStooqData("2833.N", static_cookie=TRUE), Data, Zamkniecie)
N_2842 <- select(getStooqData("2842.N", static_cookie=TRUE), Data, Zamkniecie)
N_2790 <- select(getStooqData("2790.N", static_cookie=TRUE), Data, Zamkniecie)
N_2808 <- select(getStooqData("2808.N", static_cookie=TRUE), Data, Zamkniecie)
N_2812 <- select(getStooqData("2812.N", static_cookie=TRUE), Data, Zamkniecie)
N_2816 <- select(getStooqData("2816.N", static_cookie=TRUE), Data, Zamkniecie)
N_2820 <- select(getStooqData("2820.N", static_cookie=TRUE), Data, Zamkniecie)
N_2824 <- select(getStooqData("2824.N", static_cookie=TRUE), Data, Zamkniecie)
N_2828 <- select(getStooqData("2828.N", static_cookie=TRUE), Data, Zamkniecie)
N_2785 <- select(getStooqData("2785.N", static_cookie=TRUE), Data, Zamkniecie)
N_2743 <- select(getStooqData("2743.N", static_cookie=TRUE), Data, Zamkniecie)
N_2747 <- select(getStooqData("2747.N", static_cookie=TRUE), Data, Zamkniecie)
N_2752 <- select(getStooqData("2752.N", static_cookie=TRUE), Data, Zamkniecie)
N_2757 <- select(getStooqData("2757.N", static_cookie=TRUE), Data, Zamkniecie)
N_2764 <- select(getStooqData("2764.N", static_cookie=TRUE), Data, Zamkniecie)
N_2768 <- select(getStooqData("2768.N", static_cookie=TRUE), Data, Zamkniecie)
N_2772 <- select(getStooqData("2772.N", static_cookie=TRUE), Data, Zamkniecie)
N_2776 <- select(getStooqData("2776.N", static_cookie=TRUE), Data, Zamkniecie)
N_2795 <- select(getStooqData("2795.N", static_cookie=TRUE), Data, Zamkniecie)

NN_2781 = xts(N_2781$Zamkniecie, order.by=as.Date(N_2781$Data, format="%Y-%m-%d"))
NN_2802 = xts(N_2802$Zamkniecie, order.by=as.Date(N_2802$Data, format="%Y-%m-%d"))
NN_2833 = xts(N_2833$Zamkniecie, order.by=as.Date(N_2833$Data, format="%Y-%m-%d"))
NN_2842 = xts(N_2842$Zamkniecie, order.by=as.Date(N_2842$Data, format="%Y-%m-%d"))
NN_2790 = xts(N_2790$Zamkniecie, order.by=as.Date(N_2790$Data, format="%Y-%m-%d"))
NN_2808 = xts(N_2808$Zamkniecie, order.by=as.Date(N_2808$Data, format="%Y-%m-%d"))
NN_2812 = xts(N_2812$Zamkniecie, order.by=as.Date(N_2812$Data, format="%Y-%m-%d"))
NN_2816 = xts(N_2816$Zamkniecie, order.by=as.Date(N_2816$Data, format="%Y-%m-%d"))
NN_2820 = xts(N_2820$Zamkniecie, order.by=as.Date(N_2820$Data, format="%Y-%m-%d"))
NN_2824 = xts(N_2824$Zamkniecie, order.by=as.Date(N_2824$Data, format="%Y-%m-%d"))
NN_2828 = xts(N_2828$Zamkniecie, order.by=as.Date(N_2828$Data, format="%Y-%m-%d"))
NN_2785 = xts(N_2785$Zamkniecie, order.by=as.Date(N_2785$Data, format="%Y-%m-%d"))
NN_2743 = xts(N_2743$Zamkniecie, order.by=as.Date(N_2743$Data, format="%Y-%m-%d"))
NN_2747 = xts(N_2747$Zamkniecie, order.by=as.Date(N_2747$Data, format="%Y-%m-%d"))
NN_2752 = xts(N_2752$Zamkniecie, order.by=as.Date(N_2752$Data, format="%Y-%m-%d"))
NN_2757 = xts(N_2757$Zamkniecie, order.by=as.Date(N_2757$Data, format="%Y-%m-%d"))
NN_2764 = xts(N_2764$Zamkniecie, order.by=as.Date(N_2764$Data, format="%Y-%m-%d"))
NN_2768 = xts(N_2768$Zamkniecie, order.by=as.Date(N_2768$Data, format="%Y-%m-%d"))
NN_2772 = xts(N_2772$Zamkniecie, order.by=as.Date(N_2772$Data, format="%Y-%m-%d"))
NN_2776 = xts(N_2776$Zamkniecie, order.by=as.Date(N_2776$Data, format="%Y-%m-%d"))
NN_2795 = xts(N_2795$Zamkniecie, order.by=as.Date(N_2795$Data, format="%Y-%m-%d"))

#połacznie wszytskich plików w jeden
portfolioPrices <- merge(NN_2781,
                         NN_2802,
                         NN_2833,
                         NN_2842,
                         NN_2790,
                         NN_2808,
                         NN_2812,
                         NN_2816,
                         NN_2820,
                         NN_2824,
                         NN_2828,
                         NN_2785,
                         NN_2743,
                         NN_2747,
                         NN_2752,
                         NN_2757,
                         NN_2764,
                         NN_2768,
                         NN_2772,
                         NN_2776,
                         NN_2795
)

names(portfolioPrices) <- c("Akcji",
                            "Obligacji",
                            "Stabil_Wzrostu",
                            "Zrownowazony",
                            "Gotowkowy",
                            "Perspek_20",
                            "Perspek_25",
                            "Perspek_30",
                            "Perspek_35",
                            "Perspek_40",
                            "Perspek_45",
                            "Akcji_Srod",
                            "Eu_Spol_Dywid",
                            "Glob_Korp",
                            "Glob_Spol_Dywid",
                            "Japonia",
                            "Obli_Ryn_Wsch_Walu",
                            "Spol_Dywid_Ryn_Wsch",
                            "Spol_Dywid_USA",
                            "Stab_Glob_Aloka",
                            "Lokacyjny_Plus"
)

#Dzeinny zwrot
portfolioPrices <- portfolioPrices[apply(portfolioPrices,1,function(x) all(!is.na(x))),]
portfolioReturns <- na.omit(ROC(portfolioPrices, type="discrete"))
tfi_Ret <- as.timeSeries(portfolioReturns)
write.table(tfi_Ret, file = "tfi_Ret.csv",row.names=TRUE, na="",col.names=TRUE, sep=";", dec=",")
dim(portfolioPrices)


Skrypt liczący optymalny portfel TFI
Kod:


library(fPortfolio)
library(lpSolve)
tfiReturn <- read.csv(file = "tfi_Ret.csv", sep=";", dec=",")
tfiReturn <- as.timeSeries(tfiReturn)
tfiReturn <- portfolioData(tfiReturn, spec = portfolioSpec())

# specyfikacja
Spec = portfolioSpec()
setNFrontierPoints(Spec) = 100
Constraints <- "LongOnly";

#portfolio Frontier: Funkcja portfolioFrontieroblicza całą efektywną granicę.
granica <- portfolioFrontier(tfiReturn, Spec, Constraints)


tailoredFrontierPlot(object = granica,
                     return = c("mean", "mu"),
                     risk = c("Cov", "Sigma", "CVaR", "VaR"),
                     xlim=c(-0.0,0.012),
                     ylim=c(0,0.0004),
                     twoAssets = FALSE,
                     sharpeRatio = TRUE,
                     title = FALSE
)
title("Granica portfela TFI")



#Minimalny portfel wariancji: funkcja minvariancePortfolio zwraca portfel z minimalnym ryzykiem efektywnej granicy.
#Aby znaleźć minimalny punkt ryzyka, ryzyko docelowe zwrócone przez funkcję efficientPortfolio jest zminimalizowana.

miniRisk <-minvariancePortfolio(tfiReturn, Spec, Constraints)
weightsPie(miniRisk, title = FALSE)
title("Portfel z najmniejszym ryzykiem inwestycyjnym")
miniRiska <-getTargetRisk(miniRisk)
miniRiska

miniRiskP <- frontierPoints(miniRisk) # get risk and return values for points on the efficient frontier
miniRiskPoints <- data.frame(targetRisk=miniRiskP[, "targetRisk"] * sqrt(252), targetReturn=miniRiskP[,"targetReturn"] * 252)


#Funkcja tangencyPortfolio zwraca portfel z najwyższym współczynnikiem zwrotu / ryzyka na efektywnej granicy.
#Dla portfela Markowitza jest to to samo co stosunek Sharpae.

Sharpae <-tangencyPortfolio(tfiReturn, Spec, Constraints)
weightsPie(Sharpae)
title("Portfel zbudowany na podstawie Sharpae")
sharpaeRisk <-getTargetRisk(Sharpae)
sharpaeRisk

sharpaeRiskP <- frontierPoints(Sharpae) # get risk and return values for points on the efficient frontier
sharpaeRiskPoints <- data.frame(targetRisk=sharpaeRiskP[, "targetRisk"] * sqrt(252), targetReturn=sharpaeRiskP[,"targetReturn"] * 252)


# Portfel o minimalnym ryzyku o danej oczekiwanej stopie zwrotu
SpecReturn = portfolioSpec()
setTargetRisk(SpecReturn) = 0.05
setSolver(SpecReturn)= "solveRshortExact"
Constraints = "minW[1:21]=0.01"
portfolioReturn<-efficientPortfolio(tfiReturn, SpecReturn, Constraints )
portfolioReturn

portfolioReturnP <- frontierPoints(portfolioReturn) # get risk and return values for points on the efficient frontier
portfolioReturnPPoints <- data.frame(targetRisk=portfolioReturnP[, "targetRisk"] * sqrt(252), targetReturn=portfolioReturnP[,"targetReturn"] * 252)



miniRiskPoints *100
sharpaeRiskPoints *100
portfolioReturnPPoints *100

 
     
Google

Wysłany:    Reklama google.

 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych zakładek(IE)
Wersja do druku

Skocz do:  

Podobne Tematy
Temat Autor Forum Odpowiedzi Ostatni post
Brak nowych postów Przyklejony: optymalizacja, programowanie matematyczne, liniowe, itp.
temat zbiorczy, uwaga: nie są to zagadnienia związane z ekonometrią!
Mat Modelowanie ekonometryczne 27 2014-02-07, 16:27
bezradny14
Brak nowych postów Stochastyczna teoria portfela
wdsk Wiedza statystyczna 0 2013-02-09, 21:39
wdsk
Brak nowych postów wariancja portfela dwóch aktywów
blue Statystyka opisowa 0 2008-05-16, 18:15
blue

Ideą przyświecającą istnieniu forum statystycznego jest stworzenie możliwości wymiany informacji, poglądów i doświadczeń osób związanych ze statystyką, mierzenie się z różnego rodzaju problemami statystycznymi i aktuarialnymi. Poruszane problemy: Statystyka w badaniach sondażowych rynku, metody reprezentacyjne, Teoria i rachunek prawdopodobieństwa, statystyka opisowa, teoria estymacji, testowanie hipotez statystycznych, ekonometria, prognozowanie, metody data mining.
Copyright (C) 2006-2015 Statystycy.pl
Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,08 sekundy. Zapytań do SQL: 12