-3

我正在尝试在 quastrat 中开发一种策略,当 QQQ 大于 SMA 200 时买入,当 SMA 200 小于 QQQ 时卖出。但是我的买入和卖出信号有问题。

这是错误

sigComparison(label = label, data = data, columns = columns[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)

4

1 回答 1

3

在我们跳入答案之前。你有很多拼写错误——在标题和问题中。您也没有提供可重现的示例。这意味着,我无法将您编写的内容复制并粘贴到我的控制台中并进行测试。最后,你看过 github quantstrat 页面上的演示了吗?还是读 tim trice 的书?请记住,这个论坛上的人都是专业人士,不会浪费时间回答一个看起来几乎没有付出任何努力的问题。

我建议你点击底部的编辑按钮并修复它。在提出问题之前,请尝试使用搜索功能并找到类似的答案。

除此之外,我很不情愿地提供了您正在寻找的答案。

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)")

在此处输入图像描述

于 2019-09-09T18:15:50.357 回答