0

我想在 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 在全局环境中不作为对象存在。我确定我错过了一些非常简单的引用它。非常感谢任何帮助。

4

1 回答 1

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)
    }
  }
}
于 2014-08-22T12:22:05.920 回答