У меня возникла проблема при попытке запустить пример квантстрата на складе AT & T, обозначенный символом «T». Я считаю, что это потому, что R где-то думает, что это T относится к TRUE. Вот мой код:«Ошибка в mktdata [, keep]: неправильное количество измерений« из-за запаса «T» со ссылкой на TRUE?
library(quantstrat)
ticker="T"
total_hist.start = as.Date("2006-06-22")
total_hist.end = as.Date("2008-06-20")
total_hist = total_hist.end - total_hist.start
currency("USD")
stock(ticker,currency="USD",multiplier=1)
getSymbols(ticker,from=total_hist.start,to=total_hist.end,to.assign=TRUE)
init.date = initDate=total_hist.start-1
strat.name<- "MyStrat"
port.name <- "MyPort"
acct.name <- "MyAcct"
TradeSize = 1000
initEq=as.numeric(TradeSize*max(Ad(get(ticker))))
port <- initPortf(port.name,ticker,initDate=init.date)
acct <- initAcct(acct.name,portfolios=port.name, initDate=init.date, initEq=initEq)
ords <- initOrders(portfolio=port.name,initDate=init.date)
strat<- strategy(strat.name)
strat<- add.indicator(strategy = strat, name = "SMA", arguments = list(x=quote(Ad(mktdata)), n=20),label= "ma20")
strat<- add.indicator(strategy = strat, name = "SMA", arguments = list(x=quote(Ad(mktdata)), n=50),label= "ma50")
strat<- add.signal(strat,name="sigCrossover",arguments =
list(columns=c("ma20","ma50"),relationship="gte"),label="ma20.gt.ma50")
strat<- add.signal(strat,name="sigCrossover",arguments =
list(column=c("ma20","ma50"),relationship="lt"),label="ma20.lt.ma50")
strat<- add.rule(strategy = strat,name='ruleSignal', arguments = list(sigcol="ma20.gt.ma50",sigval=TRUE,
orderqty=TradeSize, ordertype='market', orderside='long', pricemethod='market'),type='enter', path.dep=TRUE)
strat<- add.rule(strategy = strat,name='ruleSignal', arguments = list(sigcol="ma20.lt.ma50",sigval=TRUE, orderqty='all',
ordertype='market', orderside='long', pricemethod='market'),type='exit', path.dep=TRUE)
out<-try(applyStrategy(strategy=strat, portfolios=port.name))
Сейчас я получаю сообщение об ошибке:
Error in mktdata[, keep] : nombre de dimensions incorrect
Я попытался с другой акции, как Agilent Technologies, кто символ «A», и я не получаю эту ошибку, так что я я почти уверен, что проблема исходит из факта, что Т - это ИСТИНА. Спасибо за помощь!
Какой пакет вы используете, чтобы дать вам '' currency', stock' функции и т.д.? Или при вызове функции вы получаете сообщение об ошибке? Мое предположение - ваш вызов 'get (ticker)' в 'initEq = as.numeric (...)', который говорит: «Получите значение переменной' T', будучи «истинным». Но без дальнейших подробностей трудно диагностировать. –
Добавить комментарий @ Mathematical.coffee: что такое 'mktdata'? Он не определен в коде, который вы показываете. Ответ может быть таким же простым, как 'ticker <-as.character (ticker)' –
. Вы получите ту же проблему, когда передаете «F» (Ford) в переменную тикера. – Milktrader