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