R记事本:get(符号,pos=env)中出错:对象。。。找不到
好的,我已经阅读了文档,盖伊·约林更新的幻灯片和我过去的所有帖子,但是我找不到这个问题的答案。在for循环之后,我仍然得到一个错误,即找不到对象“USDCHF” 这是我的密码:R记事本:get(符号,pos=env)中出错:对象。。。找不到,r,blotter,R,Blotter,好的,我已经阅读了文档,盖伊·约林更新的幻灯片和我过去的所有帖子,但是我找不到这个问题的答案。在for循环之后,我仍然得到一个错误,即找不到对象“USDCHF” 这是我的密码: ################ # HOUSEKEEPING # ################ setwd("O:/R/R Programs/") rm(list=ls(all=TRUE)) library(blotter) .blotter <- new.env() .instrument <- ne
################
# HOUSEKEEPING #
################
setwd("O:/R/R Programs/")
rm(list=ls(all=TRUE))
library(blotter)
.blotter <- new.env()
.instrument <- new.env()
Sys.setenv(TZ="UTC")
source("VariableAndDataFunctions.R")
############
# SETTINGS #
############
StrategyName<-"Test"
CurrencyPair<-"USD_CHF"
RiskIndex<-"RiskIndex"
MAPeriod <- 10
ParamUp <- 0.96
ParamDown <- 0.95
InitialInvestment <- 10000
Lag=1 #default 1, in order not to peek into the future
CrossCurrency <- paste(substrLeft(CurrencyPair, 3), substrRight(CurrencyPair,3),sep="")
#############
# DATASETUP #
#############
#Import datasets, both as XTS
RiskIndicator<-readVariableAsXTS(RiskIndex)
FXCrossTable<-read.table(paste("O:/Data/",CurrencyPair, ".asc", sep=""),sep=",",skip=1,header=FALSE)
FXCrossTable[,4]<-as.Date(as.character(FXCrossTable[,4]), format="%Y%m%d")
colnames(FXCrossTable)<-c("V1","V2","V3", "Date","Close")
FXCrossXTS<-xts(FXCrossTable[,5], order.by=FXCrossTable[,4])
MergedXTS<-merge.xts(FXCrossXTS,RiskIndicator,join='inner')
MergedXTS[,'RiskIndicator']<-SMA(MergedXTS[,'RiskIndicator'],MAPeriod)
colnames(MergedXTS)<-c("Close", "RiskIndicatorMA")
currency("USD")
currency("CHF")
exchange_rate(CrossCurrency)
####################################
# Initialize portfolio and account #
####################################
#Initialize portfolio and account
Risk.Strategy <- StrategyName #Is only the name for the portfolio strategy
initPortf(Risk.Strategy,CrossCurrency, initDate='1970-12-31')
initAcct(Risk.Strategy,portfolios=Risk.Strategy, initDate='1970-12-31', initEq=1e6)
#######################
# Formating the chart #
#######################
theme<-chart_theme()
theme$col$up.col<-'lightgreen'
theme$col$up.border<-'lightgreen'
theme$col$dn.col<-'pink'
theme$col$dn.border<-'pink'
chart_Series(MergedXTS,theme=theme,name=CrossCurrency)
plot(add_SMA(n=10,col=4,lwd=2))
#################
# Trading logic # (buy when monthly price > 10-month SMA, sell when monthly price < 10-month SMA)
#################
for(i in (MAPeriod+1):nrow(MergedXTS) ) {
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(Risk.Strategy, Symbol=CrossCurrency, Date=CurrentDate)
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(Risk.Strategy, Symbol=CrossCurrency, TxnDate=CurrentDate,
TxnPrice=ClosePrice, TxnQty = 1000 , TxnFees=0)
}
}
} else {
if(RiskClose >= ParamUp && RiskClose.PreviousDay < ParamUp){
#Buy
addTxn(Risk.Strategy, Symbol=CrossCurrency, TxnDate=CurrentDate,
TxnPrice=ClosePrice, TxnQty = 1000 , TxnFees=0)
}
if(RiskClose <= ParamDown && RiskClose.PreviousDay > ParamDown){
#Short
addTxn(Risk.Strategy, Symbol=CrossCurrency, TxnDate=CurrentDate,
TxnPrice=ClosePrice, TxnQty = -1000 , TxnFees=0)
}
}
# Calculate P&L and resulting equity with blotter
updatePortf(Risk.Strategy)
updateAcct(Risk.Strategy)
updateEndEq(Risk.Strategy)
}
}
但是,这一行代码提供以下输出:
> ls(envir=FinancialInstrument:::.instrument)
[1] "CHF" "SPY" "USD" "USDCHF"
所以物体在那里,但是找不到。为什么?如果我执行GuyYollins网站quantstrat-I.R中的示例代码,它会完全正常…好的,在查看代码数小时后解决了它。错误在作业中。我将汇率的时间序列数据存储在MergedXTS变量中。然而,投资组合中的符号称为USDCHF。它们需要有相同的名称,因为blotter使用符号名称USDCHF访问所有符号的价格数据。因为到目前为止我没有美元兑瑞士法郎的变量,所以它崩溃了 以下是解决此问题的代码行:
CurrencyPair<-"USD_CHF"
CrossCurrency <- paste(substrLeft(CurrencyPair, 3), substrRight(CurrencyPair,3), sep="")
assign(CrossCurrency,MergedXTS)
currencypair能否将您的代码缩减到真正相关的内容,即提供一个可复制的小示例?我真的说不出错误在哪里,这就是我复制所有代码的原因。该错误在for循环之后抛出,因此我猜该错误必须出现在Datasetup部分的汇率声明中..可以在2天内完成:-)
CurrencyPair<-"USD_CHF"
CrossCurrency <- paste(substrLeft(CurrencyPair, 3), substrRight(CurrencyPair,3), sep="")
assign(CrossCurrency,MergedXTS)