【问题标题】:Quantstrat: trades execution problems.Quantstrat:交易执行问题。
【发布时间】:2016-12-07 04:31:45
【问题描述】:

所以我试图测试简单的策略,当开盘价穿过移动平均线向上买入时,反之亦然; Signal 似乎与View(mktdata) 一起工作得很好,但由于某种原因它没有执行交易。 有什么见解吗?

rm(list=ls(.blotter), envir=.blotter)



rm.strat(strategy.st)
strategy.st<-"firststrat"
portfolio.st<-"firststrat"
account.st<-"firststrat"


#assignsymbol
getSymbols("SPY",auto.assign=TRUE,adjust=TRUE)

initdate<-"2009-01-01"
from<-"2010-01-01"
to<-"2016-11-01"
Sys.setenv(TZ="UTC")
currency("USD")
stock("SPY",currency="USD",multiplier=1)
tradesize<-10000
inieq<-100000

rm.strat(portfolio.st)
initPortf(portfolio.st,symbols="SPY",initDate=initdate,currency='USD')
initAcct(account.st,portfolios = portfolio.st,initDate = initdate,initEq = inieq,currency="USD")
initOrders(portfolio = portfolio.st,initDate = initdate)
strategy(strategy.st,store=TRUE)



add.indicator(strategy = strategy.st,name="EMA",arguments=list(x=quote(Cl(mktdata)),n=50),label="EMA50")
#if closing price goes over moving average 50 and TSi fference is less then 0.15, then long
#short when closing price touches below original closing price by x(depends on atr? previous lows?) 


add.signal(strategy.st,name="sigCrossover",
           arguments = list(columns=c("Close","EMA50"),
                            relationship="gt"),
                       label="crossentry"    
                            )
add.signal(strategy.st,name="sigCrossover",
           arguments = list(columns=c("Close","EMA50"),
                            relationship="lt"),
           label="crossexit"    
)


add.rule(strategy.st,name="ruleSignal",
         arguments=list(sigcol = "crossentry",
                        sigval=TRUE,
                        orderqty="all",
                        ordertype="market",
                        orderside="long",
                        replace=FALSE,
                        prefer="Open",
                        path.dep=TRUE
                        ),
         type="enter"
         )           

add.rule(strategy.st,name="ruleSignal",
         arguments=list(sigcol = "crossexit",
                        sigval=TRUE,
                        orderqty="all",
                        ordertype="market",
                        orderside="long",
                        replace=FALSE,
                        prefer="Open",
                        path.dep=TRUE
         ),
         type="exit"
)           


out <- applyStrategy(strategy = strategy.st, portfolios = portfolio.st)

View(mktdata)

> out
NULL

【问题讨论】:

    标签: r quantmod quantstrat


    【解决方案1】:

    您需要指定一个orderqty 值来指示每笔交易的大小,以便市场订单进入头寸(不是"all",它可用于退出、止损、获利)。否则策略不知道实际交易规模应该是多少。

    如果您像这样修改输入规则,您的代码应该运行:

    add.rule(strategy.st,name="ruleSignal",
             arguments=list(sigcol = "crossentry",
                            sigval=TRUE,
                            orderqty= 100,  # numeric qty value
                            ordertype="market",
                            orderside="long",
                            replace=FALSE,
                            prefer="Open",
                            path.dep=TRUE
             ),
             type="enter"
    )           
    

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      相关资源
      最近更新 更多