我正在尝试制定一种量化策略,即当QQQ大于SMA 200时购买,而当SMA 200小于QQQ时出售。但是我的买卖信号有一个问题。
这是错误
sigComparison中的错误(标签=标签,数据=数据,列=列[c(i,: 比较两个以上不支持的列,请参见sigFormula
当前代码如下:
add.indicator(strategy=tr1.st2,name='SMA',
arguments=list(x=quote(Cl(mktdata)),n=200),label='SMA 200')
添加买卖信号
add.signal(strategy=tr1.st2,
name='sigThreshold',
arguments=list(threshold=200,column='SMA',relationship='lt'),
label='BuySignal')
add.signal(strategy=tr1.st2,
name='sigThreshold',
arguments=list(threshold=200,column='SMA',relationship='gt'),
label='SellSignal')
添加进入和退出规则
addPosLimit(portfolio=tr1.st2,
symbol='QQQ',
timestamp=start.date,maxpos=10)
add.rule(strategy=tr1.st2,
name='ruleSignal',
arguments=list(sigcol='BuySignal',sigval=T,orderqty=10,
osFUN=osMaxPos,ordertype='market',orderside='long'),
type='enter',
label='EnterRule',enabled=T)
add.rule(strategy=tr1.st2,
name='ruleSignal',
arguments=list(sigcol='SellSignal',sigval=T,orderqty='all',ordertype='market',orderside='long',TxnFees=-6),
type='exit',label='ExitRule',enabled=T)
答案 0 :(得分:2)
在进入答案之前。您有很多拼写错误-在标题和问题中。您也没有提供可复制的示例。这意味着,我无法将您编写的内容复制并粘贴到控制台中并进行测试。最后,您是否看过githubquantstrat页面上的演示?还是读过蒂姆·崔斯的书?请记住,该论坛上的人都是专业人士,不会浪费时间回答似乎很少花力气的问题。
我建议您点击底部的“编辑”按钮并进行修复。 提出问题之前,请尝试使用搜索功能并找到类似的答案。
此外,我很不情愿地提供了您要寻找的答案。
library(quantstrat)
getSymbols("QQQ")
rm.strat("SMACross")
Sys.setenv(TZ = "UTC")
currency("USD")
ticker = "QQQ"
stock(ticker, currency = "USD", multiplier = 1)
strat = "SMACross"
initPortf(strat, ticker)
initOrders(strat, ticker)
initAcct(strat, strat, initEq = 100000)
strategy(strat, store = T)
add.indicator(strat, "SMA", arguments = list(x = quote(Cl(mktdata)[,1]),
n = 200),
label = "SMA200")
add.signal(strat, "sigCrossover", arguments = list(columns = c("Close", "SMA200"),
relationship = "gte"),
label= "Cross.FB")
add.signal(strat, "sigCrossover", arguments = list(columns = c("Close", "SMA200"),
relationship = "lt"),
label = "Cross.FA")
add.rule(strat, "ruleSignal", arguments = list(sigcol = "Cross.FB",
sigval = T,
ordertype = "market",
orderqty = 100,
orderside = "long"),
type = "enter",
label = "Enter2Long")
add.rule(strat, "ruleSignal", arguments = list(sigcol = "Cross.FA",
sigval = T,
orderqty = "all",
ordertype = "market",
orderside = "long"),
type = 'exit',
label = "Exit2Close")
out = applyStrategy(strat, strat)
updatePortf(strat, ticker)
chart.Posn(strat, ticker, TA = "add_SMA(n = 200)")