нет транзакций/позиций для построения графика Ошибка в моем коде с использованием quantstrat

Вступление:

Я новичок в R в целом, но ветеран в трейдинге.

Я пытаюсь закодировать простой сигнал в своем R-коде, используя quantstrat. Но я получил некоторую ошибку (ссылка ниже)

Код:

library( blotter )
library( quantstrat )

getSymbols( "UNVR.JK", from   = "2003-01-01",
                       to     = "2016-12-02",
                       src    = "yahoo",
                       adjust = T
                       )
unvr<-UNVR.JK
initdate<-"1999-01-01"

from<-"2003-01-01"
to<-"2016-12-02"

Sys.setenv( TZ="UTC" )
currency( "IDR" )

tradesize<-1000000
initeq<-1000000
strategy.st<-"firststrat"
portfolio.st<-strategy.st
account.st<-portfolio.st

initPortf(       portfolio.st,
                 symbols    = "unvr",
                 initDate   = initdate,
                 currency   = "IDR"
                 )
initAcct(        account.st,
                 portfolios = portfolio.st,
                 initDate   = initdate,
                 currency   = "IDR",
                 initEq     = 1000000
                 )
initOrders(      portfolio.st,
                 initDate   = initdate
                 )
strategy(        strategy.st,
                 store      = T
                 )

add.indicator(   strategy   =  strategy.st,
                 name       = "SMA", 
                 arguments  = list( x = quote( Cl( unvr ) ), n = 50 ), 
                 label      = "SMA50"
                 )
add.indicator(   strategy   = strategy.st,
                 name       = "RSI",
                 arguments  = list( price = quote( Cl( unvr ) ), n = 3 ),
                 label      = "RSI_3"
                 )
applyIndicators( strategy   = strategy.st,
                 mktdata    = OHLC( unvr )
                 )
add.rule(        strategy.st,
                 name       = "ruleSignal",
                 arguments  = list( sigcol   = "longentry", # use the longentry column as the sigcol
                                    sigval    = T,          # set sigval to TRUE
                                    orderqty  = 1,          # set orderqty to 1
                                    ordertype = "market",   # use a market type of order
                                    orderside = "long",     # take the long orderside
                                    replace   = F,          # do not replace other signals
                                    prefer    = "Open"      # buy at the next day's opening price
                                    ),
                 type       = "enter"                       # this is an enter type rule, not an exit
                 )


add.rule(        strategy   = strategy.st,                   # add a rule that uses an osFUN to size an entry position
                 name       = "ruleSignal",
                 arguments  = list( sigcol    = "longentry",
                                    sigval    = TRUE,
                                    ordertype = "market",
                                    orderside = "long",
                                    replace   = FALSE,
                                    prefer    = "Open",
                                    osFUN     = "osMaxDollar",   # use the osFUN called osMaxDollar
                                    tradeSize = "tradesize",     # the tradeSize argument should be equal to tradesize (defined earlier)
                                    maxSize   = tradesize        # the maxSize argument should be equal to tradesize as well
                                    ), 
                 type       = "enter"
                 )
chart.Posn(      Portfolio  = portfolio.st,
                 Symbol     = "unvr"
                 )

Ошибка:

Error in chart.Posn(Portfolio = portfolio.st, Symbol = "unvr") :
no transactions/positions to chart


person Henry    schedule 17.01.2017    source источник


Ответы (1)


Ошибка говорит сама за себя. У вас нет сделок, доступных для позиций на графике, для чего предназначен chart.Posn?

Есть несколько неправильных вещей:

  • Вы пропустили вызов applyStrategy для фактического запуска тестирования (и создания сделок).
  • Вам также не хватает соответствующих столбцов сигналов для "longentry", которые, по-видимому, хочет использовать add.rule, не были определены. Вам необходимо правильно определить add.signal(s).
  • Вам не нужно вызывать applyIndicators, если ваша цель — запустить бэктест с использованием applyStrategy. applyIndicators просто запускает то, что вы определяете в add.indicator, и не запускает сигналы или правила.
person FXQuantTrader    schedule 17.01.2017
comment
applyStrategy(strategy=strategy.st, portfolios = portfolio.st) updatePortf(portfolio.st) daterange<-time(getPortfolio(portfolio.st)$summary[-1]) updateAcct(account.st, daterange) updateEndEq(account.st) chart.Posn(Portfolio = portfolio.st, Symbol = "unvr") и все равно выдает ту же ошибку, помоги мне, приятель - person Henry; 21.01.2017
comment
Вероятно, вы получаете ту же ошибку, потому что вы до сих пор не совершили ни одной сделки в своем applyStrategy вызове. Вы не предоставляете достаточно информации в своем примере, чтобы кто-то мог помочь или воспроизвести его. Посмотрите на демо-папку в quantstrat, чтобы увидеть, как работает правильный пример. По умолчанию сделки, совершенные стратегией, будут выводиться на консоль R. Используйте getTxns после запуска стратегии, чтобы увидеть, какие сделки были совершены, если вы не уверены. - person FXQuantTrader; 25.01.2017