1
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 を下回ったときに売ります。このコードでは、さらに 2 つの条件を追加したいと思います。

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)

これを行う方法?

4

2 に答える 2