2013-09-18 3 views
0

Я пытаюсь опробовать торговую стратегию, используя пятно. После долгого поиска я обнаружил, что ошибка только до тех пор, пока торговля не состоялась, и никакая позиция не открывается. Перед открытием любой сделки Posn отображается в рабочей области RStudio как числовое (0). После этого он всегда равен 0 или позиции. Где моя ошибка или что я могу добавить к предложению first if if (Posn! = 0)? Поскольку это, если генерируется ошибка со следующим сообщением:R blotter: Posn до открытия любой позиции генерирует ошибку

Error in if (Posn != 0) { : argument is of length zero 

Затем я попробовал эти два входа и получил следующие результаты:

> Posn 
numeric(0) 
> Posn!=0 
logical(0) 

Вот мой полный код:

for(i in 84:200){ 

    CurrentDate <- time(MergedXTS)[i] 
    ClosePrice <- as.numeric(MergedXTS[i,'Close']) 
    if(!(is.na(as.numeric(MergedXTS[i,'Close']))) && !(is.na(as.numeric(MergedXTS[i-1,'Close'])))){ 

    RiskClose <- as.numeric(MergedXTS[i,'RiskIndicatorMA']) 
    RiskClose.PreviousDay <- as.numeric(MergedXTS[i-1,'RiskIndicatorMA']) 
    Posn <- getPosQty(StrategyName, Symbol=CrossCurrency, Date=CurrentDate) 
    print(Posn) 
    if(Posn != 0){ 
     if(Posn>0){ 
     #Long active, sell long 
     if(RiskClose <= ParamUp && RiskClose.PreviousDay > ParamUp){ 
      addTxn(Risk.Strategy, Symbol=CrossCurrency, TxnDate=CurrentDate, 
       TxnPrice=ClosePrice, TxnQty = -1000 , TxnFees=0) 
     } 
     } else { 
     #Short active sell short 
     if(RiskClose >= ParamDown && RiskClose.PreviousDay < ParamDown){ 
      addTxn(StrategyName, Symbol=CrossCurrency, TxnDate=CurrentDate, 
       TxnPrice=ClosePrice, TxnQty = 1000 , TxnFees=0) 
     } 
     } 
    } else { 
     if(RiskClose >= ParamUp && RiskClose.PreviousDay < ParamUp){ 
     #Buy 
     addTxn(StrategyName, Symbol=CrossCurrency, TxnDate=CurrentDate, 
       TxnPrice=ClosePrice, TxnQty = 1000 , TxnFees=0) 
     } 
     if(RiskClose <= ParamDown && RiskClose.PreviousDay > ParamDown){ 
     #Short 
     addTxn(StrategyName, Symbol=CrossCurrency, TxnDate=CurrentDate, 
       TxnPrice=ClosePrice, TxnQty = -1000 , TxnFees=0) 
     } 
    } 

    # Calculate P&L and resulting equity with blotter 
    updatePortf(StrategyName, Dates=CurrentDate) 
    updateAcct(StrategyName, Dates=CurrentDate) 
    updateEndEq(StrategyName, Dates=CurrentDate) 
    print(i) 
    } 
} 

ответ

1

Просто тест если length(Posn)==0 после того, как вы позвоните getPosQty:

Posn <- numeric(0) 
if(!length(Posn)) Posn <- 0 

 Смежные вопросы

  • Нет связанных вопросов^_^