2015-03-04 1 views
1

Я пытаюсь использовать исторические данные диаграммы в формате .csv для простого тестирования бэктестинга с помощью пакета quantstrat в R. Я пытался использовать разные источники - ежедневные OHLC графики, тик данных и т.д., но я всегда получаю эту ошибку:R // Пакет QuantStrat - hasTsp (x): указаны недопустимые параметры временных рядов Ошибка

hasTsp(x): invalid time series parameters specified 

важно отметить, что все работает нормально, когда я использую getSymbols() вместо файла .csv.

Сначала я импортирую набор данных, очищаю его и преобразую его в формат xts.

1) Импорт исторических данных по тику.

Sys.setenv(TZ="UTC") 
library(quantstrat) 
GBPUSD.2015.01->GBPUSD 
head(GBPUSD) ## how it looks before transforming 

      V1     V2  V3  V4 
    1 GBP/USD 20150101 21:43:43.344 1.55677 1.55966 
    2 GBP/USD 20150101 21:44:15.708 1.55647 1.55987 
    3 GBP/USD 20150101 21:45:11.580 1.55692 1.55886 
    4 GBP/USD 20150101 21:46:07.579 1.55732 1.55871 
    5 GBP/USD 20150101 21:46:41.545 1.55773 1.55858 
    6 GBP/USD 20150101 21:46:41.804 1.55772 1.55959 

2) Очистка и регулировка времени.

GBPUSD$V1 <- NULL 
GBPUSD$V2 <- strptime(GBPUSD$V2,"%Y%m%d %H:%M:%S") 

3) Преобразование в xts.

GBPUSD <- xts(GBPUSD[,-1], order.by=GBPUSD[,1]) 
head(GBPUSD) 
         V3  V4 
2015-01-01 21:43:43 1.55677 1.55966 
2015-01-01 21:44:15 1.55647 1.55987 
2015-01-01 21:45:11 1.55692 1.55886 
2015-01-01 21:46:07 1.55732 1.55871 
2015-01-01 21:46:41 1.55773 1.55858 
2015-01-01 21:46:41 1.55772 1.55959 

is.xts(GBPUSD) 
[1] TRUE 


GBPUSD <- to.period(GBPUSD,"hours",4) ## Transforming to a 4 hour OHLC chart 

        GBPUSD.Open GBPUSD.High GBPUSD.Low GBPUSD.Close 
2015-01-02 00:59:58  1.55677  1.55852 1.55613  1.55634 
2015-01-02 04:59:54  1.55627  1.55682 1.55410  1.55441 
2015-01-02 08:59:57  1.55442  1.55509 1.55147  1.55297 
2015-01-02 12:59:58  1.55236  1.55371 1.54120  1.54259 
2015-01-02 16:59:58  1.54253  1.54393 1.53559  1.53601 
2015-01-02 20:59:59  1.53602  1.53632 1.53273  1.53333 


initDate = '2015-01-01' ## setting start/end date 
.from=initDate 
.to="2015-01-31" 

currency(c('GBP', 'USD')) 

4) Затем я указываю свою стратегию. Так как он работает с getSymbols() эта проблема должна быть в процессе трансформации, а не в определении портфеля, показатели, правила и т.д.

5) Применяя стратегию

out <- applyStrategy(strategy.st, portfolio.st) 
Error in hasTsp(x): invalid time series parameters specified 

Здесь выход traceback() и sessionInfo():

> sessionInfo() 
R version 3.1.1 (2014-07-10) 
Platform: x86_64-apple-darwin13.1.0 (64-bit) 

locale: 
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] quantstrat_0.9.1669   foreach_1.4.2     blotter_0.9.1666    
[4] PerformanceAnalytics_1.4.3579 FinancialInstrument_1.2.0  quantmod_0.4-3    
[7] TTR_0.22-0     xts_0.9-7      zoo_1.7-11     

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 grid_3.1.1  iterators_1.0.7 lattice_0.20-29 tools_3.1.1  


> traceback() 
6: hasTsp(x) 
5: time.default(Dates) 
4: time(Dates) 
3: first(time(Dates)) 
2: applyRules(portfolio = portfolio, symbol = symbol, strategy = strategy, 
     mktdata = mktdata, Dates = NULL, indicators = sret$indicators, 
     signals = sret$signals, parameters = parameters, ..., path.dep = TRUE, 
     debug = debug) 
1: applyStrategy(strategy.st, portfolio.st) 

Заранее за вашу помощь!

+0

Пожалуйста, отредактируйте результат из 'sessionInfo()' в свой вопрос ... и результат работы 'traceback()' сразу после ошибки (если можно). –

ответ

3

Наконец-то я нашел ответ на свой вопрос. Проблема в том, что strptime() преобразует мою диаграмму в формат времени POSIXlt. По-видимому, работает только формат POSIXct.

Для решения проблемы вам просто нужно использовать as.POSIXct(). Модифицированный пример: as.POSIXct(strptime(GBPUSD$V2,"%Y%m%d %H:%M:%S")).