Ссылка на TxnPrice из addTxn() в блоттере для выхода из сделки

Я хочу протестировать выход из сделки в 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 не существует как объект в глобальной среде. Я уверен, что мне не хватает чего-то очень простого, чтобы ссылаться на него. Любая помощь высоко ценится.


person RichS    schedule 22.08.2014    source источник


Ответы (1)


Кажется, проще всего создать переменную в вашей глобальной среде для отслеживания цены последней транзакции:

# 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)
    }
  }
}
person Joshua Ulrich    schedule 22.08.2014
comment
Спасибо большое! Элегантный в своей простоте. Я не мог понять, где взять lastTxnprice, но теперь все это имеет смысл. Спасибо еще раз! - person RichS; 23.08.2014
comment
@RichS Привет! Куда вы поместите код выше? У меня есть нерешенный вопрос по адресу stackoverflow. com/questions/26716128/, где я пытаюсь понять, как установить комиссию за транзакцию в процентах от цены актива. Я предполагаю, что приведенное выше решение может решить мою проблему, но не совсем понимаю, как... - person user1665355; 07.11.2014