Р: Квантратные примеры Гая Йоллина. Индикаторы нужны? И что хранится в этих финансовых инструментах?
Привет, я работаю через этот код (это работает и воспроизводимо)
if (!exists('.blotter')) .blotter <- new.env()
if (!exists('.strategy')) .strategy <- new.env()
if (!exists('.instrument')) .instrument <- new.env()
currency("USD")
stock("SPY",currency="USD",multiplier=1)
ls(envir=FinancialInstrument:::.instrument)
initDate <- '1997-12-31'
startDate <- '1998-01-01'
endDate <- '2013-07-31'
initEq <- 1e6
Sys.setenv(TZ="UTC")
getSymbols('SPY', from=startDate, to=endDate, adjust=T)
SPY=to.monthly(SPY, indexAt='endof')
SPY$SMA10m <- SMA(Cl(SPY), 10)
# inz portfolio, account
qs.strategy <- "qsFaber"
rm.strat(qs.strategy) # remove strategy etc. if this is a re-run
initPortf(qs.strategy,'SPY', initDate=initDate)
initAcct(qs.strategy,portfolios=qs.strategy, initDate=initDate, initEq=initEq)
initOrders(portfolio=qs.strategy,initDate=initDate)
# instantiate a new strategy object
strategy(qs.strategy,store=TRUE)
add.indicator(strategy = qs.strategy, name = "SMA",
arguments = list(x = quote(Cl(mktdata)), n=10), label="SMA10")
add.signal(qs.strategy,name="sigCrossover",
arguments = list(columns=c("Close","SMA10"),relationship="gt"),
label="Cl.gt.SMA")
add.signal(qs.strategy,name="sigCrossover",
arguments = list(columns=c("Close","SMA10"),relationship="lt"),
label="Cl.lt.SMA")
add.rule(qs.strategy, name='ruleSignal',
arguments = list(sigcol="Cl.gt.SMA", sigval=TRUE, orderqty=900,
ordertype='market', orderside='long', pricemethod='market'),
type='enter', path.dep=TRUE)
add.rule(qs.strategy, name='ruleSignal',
arguments = list(sigcol="Cl.lt.SMA", sigval=TRUE, orderqty='all',
ordertype='market', orderside='long', pricemethod='market'),
type='exit', path.dep=TRUE)
out <- applyStrategy(strategy=qs.strategy , portfolios=qs.strategy)
updatePortf(qs.strategy)
updateAcct(qs.strategy)
updateEndEq(qs.strategy)
myTheme<-chart_theme()
myTheme$col$dn.col<-'lightblue'
myTheme$col$dn.border <- 'lightgray'
myTheme$col$up.border <- 'lightgray'
# plot performance
chart.Posn(qs.strategy, Symbol = 'SPY', Dates = '1998::',theme=myTheme)
plot(add_SMA(n=10,col=4, on=1, lwd=2))
Поскольку я хочу использовать это в более сложных стратегиях, у меня есть несколько вопросов:
Нужны ли показатели?
В связи с 1: Что на самом деле хранится этими объектами Стратегии и т. Д.? Сначала он создает столбец SMA10m прямо в таблице SPY. Насколько я понимаю, он затем строит индикатор, который в основном такой же, как уже созданный в таблице SPY, для правильной работы сигналов? Итак, код
Аргументы = список (столбцы =c("Закрыть","SMA10")
получает доступ к Close (который, очевидно, также хранится?) как SMA10, который является индикатором, я прав? Есть ли способ пропустить индикатор, если он не нужен? Или индикатор является просто еще одним столбцом в таблице SPY, поскольку он обращается к нему с помощью команды columns?
1 ответ
Во-первых, чтобы прямо ответить на два пункта:
Индикаторы не являются необходимыми для стратегии, единственное жесткое и быстрое требование состоит в том, что вам нужно хотя бы одно правило, которое будет создавать ордера, или хотя бы одно правило в
order
слот, который будет создавать транзакции.strategy
Объект содержит только спецификацию стратегии, ничего более, см. ниже.
Далее, чтобы объяснить, что происходит:
quantstrat
широко использует отложенное выполнение для повторного использования кода. strategy
Объект является местом хранения для спецификации стратегии. Может применяться к одному или нескольким портфелям (созданным initPortf()
) с помощью portfolios=
аргумент.
Спецификация стратегии - это лишь хранилище того, как вы хотите применить стратегию позже. Пока ты не позвонишь applyStrategy(...)
ничего не оценивается. Это позволяет использовать полезные свойства, такие как использование одного и того же объекта стратегии для тестирования нескольких различных наборов параметров, или применение к различным структурам и составляющим портфеля без изменения спецификации стратегии.
Сам объект стратегии не изменяется applyStrategy
, внутри applyStrategy
специальный внутренний объект mktdata
создается, который будет изменен в результате выполнения индикаторов, сигналов и правил, содержащихся в спецификации стратегии.
mktdata
По умолчанию объект создается на основе извлечения объекта, содержащего ваши исторические данные, из .GlobalEnv
или другое окружение, указанное пользователем. Для каждого символа в портфеле будет создан один из этих объектов, который будет поддерживаться внутри области действия applyStrategy
,
Когда применяются индикаторы и сигналы, наиболее распространенным шаблоном для этих функций является возврат вектора той же длины, что и временной ряд mktdata, или объекта временного ряда с тем же индексом, что и временной ряд mktdata. Если следовать этому шаблону, эти столбцы будут добавлены в объект mktdata и станут доступны для использования в последующих функциях индикатора, сигнала и правила. Предполагается, что индикаторы и сигналы всегда не зависят от пути, а правила по умолчанию зависят от пути.
Пример функции сигнала, такой как sigCrossover
а также sigThreshold
, используйте этот шаблон для доступа и сравнения столбцов, которые существуют в mktdata. ruleSignal
, пример правила, ищет точки, где сигналы имеют определенное значение, а затем воздействует на эту информацию для создания заказов.
Внешние ссылки: