如何为quantstrat添加多个条件?

时间:2015-08-13 06:25:21

标签: r quantstrat

stratMACROSS <- add.indicator(strategy = stratMACROSS, name = "SMA", 
                              arguments = list(x=quote(Cl(mktdata)), n=50),
                              label= "ma50" )

stratMACROSS <- add.indicator(strategy = stratMACROSS, name = "SMA", 
                              arguments = list(x=quote(Cl(mktdata)[,1]), n=200),
                              label= "ma200")

stratMACROSS <- add.signal(strategy = stratMACROSS, name="sigCrossover",
                           arguments = list(columns=c("ma50","ma200"), 
                                            relationship="gte"),
                           label="ma50.gt.ma200")

stratMACROSS <- add.signal(strategy = stratMACROSS, name="sigCrossover",    
                           arguments = list(column=c("ma50","ma200"), 
                                            relationship="lt"),
                           label="ma50.lt.ma200")

stratMACROSS <- add.rule(strategy = stratMACROSS, name='ruleSignal', 
                         arguments = list(sigcol="ma50.gt.ma200", sigval=TRUE, 
                                          orderqty=100, ordertype='market', 
                                          orderside='long'),
                         type='enter')

stratMACROSS <- add.rule(strategy = stratMACROSS, name='ruleSignal', 
                         arguments = list(sigcol="ma50.lt.ma200", sigval=TRUE, 
                                          orderqty='all', ordertype='market', 
                                          orderside='long'),
                         type='exit')

当移动平均线(MV)50超过MV200时上述买入股票,当MV50超过MV200时卖出。在这段代码中,我想补充两个条件:

Buy
(MV 50 Crosses above MV200) and (close price is above MV50 and MV200)

Sell
(MV 200 Crosses above MV50) and (close price is below MV50 and MV200)

怎么做?

2 个答案:

答案 0 :(得分:0)

您可以查看信号并查看是否可以将它们组合在一起。因此,当收盘价高于maV50&amp;时,我会创建一个信号。 MV200并将此信号标记为clgtmv50mv200和另一个信号mv50.gt.ma200

compt.str <- 'clgtmv50mv200 == 1 & mv50.gt.ma200 == 1'

然后我会将其传递给add.signal函数的公式部分,并使用cross = True并将其标记为新信号

答案 1 :(得分:0)

我已经基于sigComparison编写了一个增强的比较函数。它不漂亮,我也没有测试偏移功能。 经测试的是&#39;和&#39;,&#39;或&#39;,&#39; xor&#39;的规格。比较,通过使用第一级和第二级比较,最多可以使用四列来检索True / False结果列。

pip install pypyodbc
python -m pip install pypyodbc