从吸墨纸中的addTxn()引用TxnPrice进行交易退出

时间:2014-08-22 05:15:15

标签: r quantitative-finance quantstrat blotter

我想在quantstrat / blotter中测试一个交易出口,在那里我引用了最新的吸墨纸输入交易的价格(在一个循环内)。我想补充一条规则,即如果最近的交易自成立以来已经下跌了5%,那么退出交易作为一种止损。

  if( !is.na(X) )#if the indicator X has begun (it is NA at start of time series)
  {
    if(Posn == 0) {#No position test to go long
      if(X < 20){   
        #enter long position
        addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
               TxnPrice=ClosePrice,TxnQty=UnitSize,TxnFees=0)}
    }else {#Have a position so check exit

这是我想引用TxnPrice的地方:

      if ( (X > 35) || (ClosePrice < (0.95 * TxnPrice)){

 #exit position
            addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
                   TxnPrice = ClosePrice,TxnQty = -Posn,TxnFees=0)}
        }
      }

ClosePrice在哪里

ClosePrice <- as.numeric(Cl(T[i,]))

问题是TxnPrice不作为全局环境中的对象存在。我确定我错过了一些非常简单的参考资料。任何帮助非常感谢。

1 个答案:

答案 0 :(得分:0)

似乎最简单的方法是在全球环境中创建一个变量来跟踪最后的交易价格:

# initialize value so ClosePrice < (0.95 * lastTxnPrice) == FALSE
# until the first lastTxnPrice <- ClosePrice is run
lastTxnPrice <- -Inf
#if the indicator X has begun (it is NA at start of time series)
if(!is.na(X)) {
  if(Posn == 0) {
    #No position test to go long
    if(X < 20) {
      #enter long position
      addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
             TxnPrice=ClosePrice,TxnQty=UnitSize,TxnFees=0)
      lastTxnPrice <- ClosePrice
    }
  } else {
    #Have a position so check exit
    if((X > 35) || ClosePrice < (0.95 * lastTxnPrice)) {
      #exit position
      addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
             TxnPrice = ClosePrice,TxnQty = -Posn,TxnFees=0)
    }
  }
}