Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 多电流策略-吸墨器和;量子战略_R_Quantstrat_Blotter_Financialinstrument - Fatal编程技术网

R 多电流策略-吸墨器和;量子战略

R 多电流策略-吸墨器和;量子战略,r,quantstrat,blotter,financialinstrument,R,Quantstrat,Blotter,Financialinstrument,我想在这条线上反弹 基本上,我正在使用quantstrat对一项策略进行回溯测试,我拥有多种货币的工具,但我希望以美元进行汇总报告(即账户和投资组合以美元计) 为了简化起见,假设我在布伦特期货(欧元)上对一个简单的20-120 MA交叉策略进行回溯测试,但我希望我的PnL是美元 我会尽量提供所有必要的信息,因为约书亚·乌尔里希对可复制的例子要求严格,他是对的 导入csv文件和清除数据的我的功能 所以我导入了数据,设置了仪器,我可以运行通常的quantstrat代码 symbols <-

我想在这条线上反弹

基本上,我正在使用quantstrat对一项策略进行回溯测试,我拥有多种货币的工具,但我希望以美元进行汇总报告(即账户和投资组合以美元计)

为了简化起见,假设我在布伦特期货(欧元)上对一个简单的20-120 MA交叉策略进行回溯测试,但我希望我的PnL是美元

我会尽量提供所有必要的信息,因为约书亚·乌尔里希对可复制的例子要求严格,他是对的

导入csv文件和清除数据的我的功能 所以我导入了数据,设置了仪器,我可以运行通常的quantstrat代码

symbols <- c("BRENT")
Sys.setenv(TZ="GMT")
rm(list = ls(.blotter), envir = .blotter)

#Set up environment
if (!exists('.blotter')) .blotter <- new.env()
if(!exists('.strategy')) .strategy <- new.env()
if(!exists('.instrument')) .instrument <- new.env()


start.date <- min(index(symbols))+50      #1ere date du jeu de donnée
end.date <- Sys.Date()-5      #dernière date du jeu de donnée
initial.capital <- 0      #Capital de départ
MAcrossover <- strategy("MAcrossover")
portfolio.st <- account.st <- strat.st <- "MAcrossover"

initPortf(portfolio.st,        #nom du book
          symbols = symbols,  #list des instruments
          currency='USD') 

initAcct(account.st,                 #nom du compte
         portfolios = portfolio.st,  #nom du portfeuille rattaché au compte
         # initDate = init.date,       #date de départ du compte
         currency = "USD",           #devise du compte
         initEq = initial.capital)   #capital de départ du compte

initOrders(portfolio.st, 
           symbols = symbols)    

strategy("MAcrossover",store = TRUE)

#Parametres
ma1 <- 20
ma2 <- 120
maxpos <- 1
tradesize <- 1
#position limit
addPosLimit("MAcrossover", symbols, maxpos = maxpos, timestamp = start(BRENT)-1)

#preparation indicateurs
for(symbol in symbols){

  x=get(symbol)
  x$MA1 <- SMA(Cl(x),n=ma1)
  x$MA2 <- SMA(Cl(x),n=ma2)
  assign(symbol,x)
}

#Signal
add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="gt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "long")        #label de la colonne du signal

add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="lt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "short")        #label de la colonne du signal

add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="lt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "exitlong")        #label de la colonne du signal

add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="gt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "exitshort")        #label de la colonne du signal


#Rules
add.rule("MAcrossover",                               #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="long",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty=tradesize,        #taille de l'ordre
                          osFUN = osMaxPos,
                          prefer = "Close",
                          replace = FALSE,
                          ordertype = "market",    #type d'ordre
                          orderside ="long"),   #sens
         type = "enter",          #ouverture ou fermeture de pose
         label = "enterlongcrossover")    #label si exécution

add.rule("MAcrossover",                                  #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="short",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty="all",        #taille de l'ordre
                          replace = FALSE,
                          ordertype = "market",    #type d'ordre
                          orderside ="long"),   #sens
         type = "exit",          #ouverture ou fermeture de pose
         label = "exitlongcrossover")    #label si exécution

add.rule("MAcrossover",                                  #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="short",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty=-tradesize,#taille de l'ordre
                          replace = FALSE,
                          prefer = "Close",
                          osFUN = osMaxPos,
                          ordertype = "market",    #type d'ordre
                          orderside ="short"),   #sens
         type = "enter",          #ouverture ou fermeture de pose
         label = "Entershort")    #label si exécution

add.rule("MAcrossover",                                  #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="long",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty="all",        #taille de l'ordre
                          replace = FALSE,
                          ordertype = "market",    #type d'ordre
                          orderside ="short"),   #sens
         type = "exit",          #ouverture ou fermeture de pose
         label = "exitshortcrossover")    #label si exécution

out <- applyStrategy("MAcrossover", portfolios = portfolio.st)

updatePortf("MAcrossover")
updateAcct("MAcrossover")
updateEndEq("MAcrossover")
我在2002-03-07的643.45得到一个PnL

当我用货币=美元来设定未来布伦特原油时

我在2002-03-07的580得到一个PnL

这不符合逻辑。隐含的欧元兑美元汇率为(580/643)=0.90,而正确汇率为0.8822

所以我的问题是 -我们能处理几种货币吗? -如果是,我错在哪里

提前多谢了

尼古拉斯

currency(c("USD","EUR",))
exchange_rate(c("EURUSD"),"USD")  
future("BRENT",currency = "EUR",tick_size = 0.01,multiplier = 1000)
symbols <- c("BRENT")
Sys.setenv(TZ="GMT")
rm(list = ls(.blotter), envir = .blotter)

#Set up environment
if (!exists('.blotter')) .blotter <- new.env()
if(!exists('.strategy')) .strategy <- new.env()
if(!exists('.instrument')) .instrument <- new.env()


start.date <- min(index(symbols))+50      #1ere date du jeu de donnée
end.date <- Sys.Date()-5      #dernière date du jeu de donnée
initial.capital <- 0      #Capital de départ
MAcrossover <- strategy("MAcrossover")
portfolio.st <- account.st <- strat.st <- "MAcrossover"

initPortf(portfolio.st,        #nom du book
          symbols = symbols,  #list des instruments
          currency='USD') 

initAcct(account.st,                 #nom du compte
         portfolios = portfolio.st,  #nom du portfeuille rattaché au compte
         # initDate = init.date,       #date de départ du compte
         currency = "USD",           #devise du compte
         initEq = initial.capital)   #capital de départ du compte

initOrders(portfolio.st, 
           symbols = symbols)    

strategy("MAcrossover",store = TRUE)

#Parametres
ma1 <- 20
ma2 <- 120
maxpos <- 1
tradesize <- 1
#position limit
addPosLimit("MAcrossover", symbols, maxpos = maxpos, timestamp = start(BRENT)-1)

#preparation indicateurs
for(symbol in symbols){

  x=get(symbol)
  x$MA1 <- SMA(Cl(x),n=ma1)
  x$MA2 <- SMA(Cl(x),n=ma2)
  assign(symbol,x)
}

#Signal
add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="gt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "long")        #label de la colonne du signal

add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="lt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "short")        #label de la colonne du signal

add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="lt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "exitlong")        #label de la colonne du signal

add.signal("MAcrossover",                #nom de la strategie
           name="sigCrossover",      #type de signal
           arguments = list(columns =c("MA1","MA2"), #liste des colonnes pour déterminer le signal
                            relationship="gt"),   #type de relation du signal (sup ou égal, sup, inférieur etc..)
           label = "exitshort")        #label de la colonne du signal


#Rules
add.rule("MAcrossover",                               #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="long",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty=tradesize,        #taille de l'ordre
                          osFUN = osMaxPos,
                          prefer = "Close",
                          replace = FALSE,
                          ordertype = "market",    #type d'ordre
                          orderside ="long"),   #sens
         type = "enter",          #ouverture ou fermeture de pose
         label = "enterlongcrossover")    #label si exécution

add.rule("MAcrossover",                                  #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="short",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty="all",        #taille de l'ordre
                          replace = FALSE,
                          ordertype = "market",    #type d'ordre
                          orderside ="long"),   #sens
         type = "exit",          #ouverture ou fermeture de pose
         label = "exitlongcrossover")    #label si exécution

add.rule("MAcrossover",                                  #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="short",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty=-tradesize,#taille de l'ordre
                          replace = FALSE,
                          prefer = "Close",
                          osFUN = osMaxPos,
                          ordertype = "market",    #type d'ordre
                          orderside ="short"),   #sens
         type = "enter",          #ouverture ou fermeture de pose
         label = "Entershort")    #label si exécution

add.rule("MAcrossover",                                  #nom de la strategie 
         name = "ruleSignal",                      #
         arguments = list(sigcol ="long",          #nom de la colonne à vérifier
                          sigval = TRUE,           #Application de la règle si signal
                          orderqty="all",        #taille de l'ordre
                          replace = FALSE,
                          ordertype = "market",    #type d'ordre
                          orderside ="short"),   #sens
         type = "exit",          #ouverture ou fermeture de pose
         label = "exitshortcrossover")    #label si exécution

out <- applyStrategy("MAcrossover", portfolios = portfolio.st)

updatePortf("MAcrossover")
updateAcct("MAcrossover")
updateEndEq("MAcrossover")
future("BRENT",currency = "EUR",tick_size = 0.01,multiplier = 1000)