저는 가이 욘린 (Guy Yonlin)의 우수 사례 코드 & 블로터에 대한 훌륭한 예제 코드를 작성하려고 노력하고 있지만 일련의 포트폴리오에 대해 작동하도록하고 있습니다. 불행히도 나는 기호의 목록을 읽고 R이 다운로드 된 실제 xts 데이터에 액세스하려고 노력하고있다.xts 오브젝트의 이름을 얻기 위해리스트를 읽으십시오
다음 코드에서 정확하게 첫 번째 심볼 인 "BND"
을 찾을 수 있지만 TempSym
을 심볼의 실제 xts 객체로 설정하여 실제로 행이 있도록하는 방법을 알 수는 없습니다.
내가 뭘 잘못하고 있니? 실제로 볼 수있는 오류는 다음과 같습니다.
[1] "BND"
Error in 1:nrow(TempSym) : argument of length 0
이 시점에서 주석 처리 된 부분은 디버깅되지 않았습니다. 그들은 내가 Guy의 예제 코드에서 갈 것이라고 생각하는 곳을 기반으로합니다.
library(blotter)
MyPortfolios = c("Port1", "Port2")
MySymbols=list()
MySymbols[[1]]= c("BND","DBC","DXJ")
MySymbols[[2]]= c("ALD", "BND","DBC","ECON")
currency("USD")
get("USD",envir=FinancialInstrument:::.instrument)
Date_Start = "2013-01-01"
Date_End = format(Sys.time(), "%Y-%m-%d")
Sys.setenv(TZ="UTC")
TotalSymbols = 0
for (j in 1:length(MySymbols)){
TempSym = MySymbols[[j]]
for (i in 1:length(TempSym)){
if (!exists(paste(TempSym[i]))){
stock(TempSym[i], currency="USD", multiplier=1)
get(TempSym[i],envir=FinancialInstrument:::.instrument)
getSymbols(TempSym[i], from=Date_Start, to=Date_End, adjust=T)
TotalSymbols = TotalSymbols + 1
}
}
rm(TempSym)
}
print(paste("Total symbols downloaded: ", TotalSymbols))
rm(TotalSymbols)
suppressWarnings(rm("account.LongTerm",pos=.blotter))
suppressWarnings(rm("portfolio.Port1", pos=.blotter))
suppressWarnings(rm("portfolio.Port2", pos=.blotter))
initPortf(MyPortfolios[1], as.list(MySymbols[[1]]), initDate="2013-06-01")
initPortf(MyPortfolios[2], as.list(MySymbols[[2]]), initDate="2013-06-01")
initAcct("LongTerm", MyPortfolios, initDate="2013-06-01", initEq=600000)
addTxn("Port1", Symbol="BND", TxnDate="2013-06-10", TxnQty=733, TxnPrice=81.83, TxnFees=0)
addTxn("Port1", Symbol="DBC", TxnDate="2013-06-10", TxnQty=343, TxnPrice=26.22, TxnFees=0)
addTxn("Port1", Symbol="DXJ", TxnDate="2013-06-10", TxnQty=259, TxnPrice=46.30, TxnFees=0)
addTxn("Port2", Symbol="ALD", TxnDate="2013-06-11", TxnQty=60, TxnPrice=49.92, TxnFees=0)
addTxn("Port2", Symbol="BND", TxnDate="2013-06-11", TxnQty=159, TxnPrice=81.83, TxnFees=0)
addTxn("Port2", Symbol="ECON", TxnDate="2013-06-11", TxnQty=58, TxnPrice=26.67, TxnFees=0)
###################
# For each portfolio
# look up each symbol
# and calculate equity for each bar
###################
for (k in 1:length(MyPortfolios)){
TempList = MySymbols[[k]]
for (j in 1:length(TempList)){
TempSym = TempList[[j]]
print(paste(TempSym))
for (i in 1:nrow(TempSym)){
# CurrentDate <- time(TempSym)[i]
# updatePortf(MyPortfolios[k], Dates = CurrentDate)
# updateAcct(MyPortfolios[k], Dates = CurrentDate)
# updateEndEq(MyPortfolios[k], Dates = CurrentDate)
}
}
}
# create custom theme
myTheme<-chart_theme()
myTheme$col$dn.col<-'purple'
myTheme$col$dn.border <- 'lightgray'
myTheme$col$up.col<-'orange'
myTheme$col$up.border <- 'lightgray'
chart.Posn(MyPortfolios[1], Symbol = "BND", Dates = "2013::", theme=myTheme)
chart.Posn(MyPortfolios[1], Symbol = "DBC", Dates = "2013::", theme=myTheme)
chart.Posn(MyPortfolios[1], Symbol = "DXJ", Dates = "2013::", theme=myTheme)
chart.Posn(MyPortfolios[2], Symbol = "ALD", Dates = "2013::", theme=myTheme)
chart.Posn(MyPortfolios[2], Symbol = "BND", Dates = "2013::", theme=myTheme)
chart.Posn(MyPortfolios[2], Symbol = "ECON", Dates = "2013::", theme=myTheme)
감사합니다. 벡터화 된 함수 주석을 이해하기 위해 노력해야 할 것입니다. 나는 포인터에 감사드립니다. 감사! – LGTrader