所以我只是在 quantstrat
做EMA50交叉策略,它工作正常,但我希望将时间范围从每天更改为每周 . 我尝试将 stock()
函数存储为 to.weekly(SPY)
,但他们不会让我这样做 . 我想稍后为多个股票尝试这个,所以它必须在投资组合中应用 .
library(quantstrat)
rm(list=ls(.blotter), envir=.blotter)
strategy.st<-"firststrat"
portfolio.st<-"firststrat"
account.st<-"firststrat"
rm.strat(strategy.st)
#assignsymbol
getSymbols("SPY",auto.assign=TRUE,adjust=TRUE)
initdate<-"2009-01-01"
from<-"2010-01-01"
to<-"2016-11-01"
Sys.setenv(TZ="UTC")
currency("USD")
stock("SPY",currency="USD",multiplier=1)
tradesize<-10000
inieq<-100000
rm.strat(portfolio.st)
initPortf(portfolio.st,symbols="SPY",initDate=initdate,currency='USD')
initAcct(account.st,portfolios = portfolio.st,initDate = initdate,initEq = inieq,currency="USD")
initOrders(portfolio = portfolio.st,initDate = initdate)
strategy(strategy.st,store=TRUE)
add.indicator(strategy = strategy.st,name="EMA",arguments=list(x=quote(Cl(mktdata)),n=50),label="EMA50")
#if closing price goes over moving average 50 and TSi fference is less then 0.15, then long
#short when closing price touches below original closing price by x(depends on atr? previous lows?)
add.signal(strategy.st,name="sigCrossover",
arguments = list(columns=c("Close","EMA50"),
relationship="gt"),
label="crossentry"
)
add.signal(strategy.st,name="sigCrossover",
arguments = list(columns=c("Close","EMA50"),
relationship="lt"),
label="crossexit"
)
add.rule(strategy.st,name="ruleSignal",
arguments=list(sigcol = "crossentry",
sigval=TRUE,
orderqty=100,
ordertype="market",
orderside="long",
replace=FALSE,
prefer="Open",
path.dep=TRUE
),
type="enter"
)
add.rule(strategy.st,name="ruleSignal",
arguments=list(sigcol = "crossexit",
sigval=TRUE,
orderqty="all",
ordertype="market",
orderside="long",
replace=FALSE,
prefer="Open",
path.dep=TRUE
),
type="exit"
)
out <- applyStrategy(strategy = strategy.st, portfolios = portfolio.st)
....
[1] "2016-01-04 00:00:00 SPY -100 @ 197.432029165538"
[1] "2016-02-23 00:00:00 SPY 100 @ 191.041013032617"
[1] "2016-02-24 00:00:00 SPY -100 @ 187.72241891553"
[1] "2016-02-26 00:00:00 SPY 100 @ 193.571820974787"
[1] "2016-03-01 00:00:00 SPY -100 @ 192.035603073637"
....任何方式我可以改为每周一次?
1 回答
你走在正确的轨道上 . 如果在运行
applyStrategy
之前执行SPY <- to.weekly(SPY)
,那么您将在每周栏上运行策略 . 请记住,quantstrat使用符号的名称来查找数据,无论基础数据存储的频率如何(无论是每天还是每周,在您的案例中名为SPY
的对象中) .这是一种更为通用的自动化方法,因为您希望为证券组合执行此操作 . 为了提高可读性,我只是展示您需要修改以运行> = 2证券的代码中的代码部分:
在
applyStrategy
成功运行后,您可以检查mktdata
是否为您想要的格式(每周)以获取最近的符号运行(本例中符号向量中的XLE
ETF) . 你应该看到这样的东西: