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)
怎么做?
答案 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