R - Quantstart: тестирование стратегии на нескольких акциях

Я строю базовую торговую стратегию с несколькими индикаторами. Моя проблема в том, что я хочу, чтобы он работал на нескольких акциях без необходимости указывать каждую отдельную акцию, которую я хочу протестировать.

В настоящее время я могу использовать вектор для одновременного получения нескольких символов, например, ниже

 # Get Shares from Yahoo Finance
 Stocks<- ASX_200_Companies_Copy$Code
 getSymbols(Stocks, from = from, to = to, src =  "yahoo", adjust =  TRUE)

Я могу легко сгенерировать вектор со списком биржевых кодов в документе Excel. Так что это сгенерирует для меня 200 отдельных символов. После того, как я создам все свои индикаторы, я создам тестовую стратегию, как показано ниже, для отдельного актива.

# Test the strategy
test_Master <- applyIndicators(strategy.st.Master, mktdata = OHLC(BHP.AX))
Master_Strategy <- applySignals(strategy = strategy.st.Master, mktdata = test_Master)

В этом случае я смогу тестировать свою стратегию только по одному активу за раз, что, если я хочу найти тренды в больших наборах данных, будет неэффективным.

Указание Stocks в качестве аргумента для OHLC приводит к следующей ошибке

 test_Master <- applyIndicators(strategy.st.Master, mktdata = OHLC(Stocks))
 Error in Cl(mktdata) : subscript out of bounds: no column name containing "Close"

Я решил просто связать несколько отдельных акций, которые генерируются. Однако это тоже не работает.

Stocks <- cbind(BHP.AX, CBA.AX)
test_Master <- applyIndicators(strategy.st.Master, mktdata = OHLC(Stocks))
Error in runSum(x, n) : ncol(x) > 1. runSum only supports univariate 'x'

И даже если я успешно привяжу каждый символ, я думаю, что стратегия будет тестировать индикаторы на OHLC для каждого символа в векторе акций.

Можно ли как-то протестировать стратегию Quantstrat на нескольких активах одновременно?

Любые мысли/отзывы будут оценены.


person David    schedule 03.02.2017    source источник
comment
Добро пожаловать в Stackoverflow!. Я настоятельно рекомендую работать со средами, их структура упрощает манипулирование и применение различных функций/стратегий. ">пример   -  person Silence Dogood    schedule 03.02.2017
comment
Если вы решили эту проблему, вы можете добавить ответ. Это поможет другим, имеющим ту же проблему.   -  person Tushar    schedule 14.03.2017
comment
@OdeToMyFiddle, quantstrat и blotter уже широко используют внутренние среды, чтобы по возможности избегать копирования, а также в качестве контейнеров для хранения постоянной информации.   -  person Brian G. Peterson    schedule 09.05.2018
comment
Спасибо @BrianG.Peterson за объяснение. Я мало использовал quantstrat и blotter, но активно пользуюсь вашим пакетом PerformanceAnalytics. Кроме того, ваш пакет PortfolioAnalytics значительно упростил проблемы оптимизации, спасибо за создание и поддержку таких замечательных пакетов!   -  person Silence Dogood    schedule 10.05.2018


Ответы (1)


quantstrat делает то, что вы просите по умолчанию.

Вот пример:

data(stratBBands) #load a test strategy, you'd use your own
symbols = c("XLF", "XLP", "XLE", "XLY", "XLV", 
            "XLI", "XLB", "XLK", "XLU")

getSymbols(symbols
           , src='yahoo'
           , index.class=c("POSIXt"
           ,"POSIXct")
           , from='1999-01-01')

out<-try(applyStrategy(strategy=stratBBands 
                      , portfolios='bbands'
                      , parameters=list(sd=2,n=60)) )

Или вы можете посмотреть почти любой из многих примеров, включенных в quantstrat, так как почти все они используют несколько символов.

person Brian G. Peterson    schedule 10.05.2017
comment
#Брайан, я только что запустил приведенный выше код и получил сообщение об ошибке: Группы портфолио не найдены, используйте initPortf() для создания нового портфолио. Следуя вашим примерам и примерам других quantstrat, я обычно вижу, что iniitPortf() используется сейчас (возможно, quantstrat не нуждался в нем примерно в середине 2017 года ??), поэтому я включил следующую строку: initPortf(portfolios = bbands, symbols ), но по-прежнему возникает ошибка, аргумент «символы» отсутствует, по умолчанию нет. Есть предложения, комментарии? (Теперь я перехожу к другим примерам, на которые вы ссылались, но комментирую здесь, чтобы изучать QS при каждой возможности). Спасибо. - person W Barker; 25.07.2019