日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R语言quantstrat包

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言quantstrat包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在引入blotter包之后,一個完整的交易系統就已經可以建立起來了。但是作為盈利的基礎,基于quantmodTTR雖然具有了必要的建模工具,我們依然希望能夠有更加靈活易用的交易建模方法。這就是quantstrat包的目標。

1 quantstrat包簡介

quantstrat包以xts,quantmod,TTR,blotter等為基礎,提供了基于交易信號的金融交易建模和回測的基礎架構。利用quantstrat包可以相當大程度上簡化建立或檢驗交易策略的過程。quantstrat包的名字就是量化策略。
quantstrat
包和blotter包都是R-forgeTradeAnalytics項目的組成部分。也是一個依然在開發中的包。
http://r-forge.r-project.org/projects/blotter/
它的主要特征是:
支持應用于多資產多幣種的投資組合;支持包括指標(indicators),信號(signals)和交易規則(rules)的完整的交易策略;支持包括market, limit, stoplimit, stoptrailing等在內的多種委托(訂單,指令order)方式;支持委托規模(order sizing)和參數優化。

quantstrat包進行策略建模的基本思路是

i)初始化金融產品導入數據

ii)依次引入指標、信號和規則以形成策略,按照策略下達指令。
指標是指源自交易數據的一個數量值:如均線、MACD等;
信號是指指標在某些交易時點和交易數據相互作用的結果,比如交叉、閾值、底頂等;
規則是指結合交易數據、信號以及當前的組合和賬戶情況進而做出委托(下達指令)的準則。
iii)指令和市場數據的交互生成一個交易(transaction),按照交易情況更新組合和賬戶。
主要函數:
i)初始化:
initOrders 初始化指令容器(order container
strategy strategy 對象的構造器
ii)定義策略
add.indicator 為策略加入一個指標
add.signal 為策略加入一個信號
add.rule 為策略加入一個規則
add.distribution 為策略的參數集合加入一個分布
add.constraint 為一個參數集上的兩個分布加入約束
iii)運用策略
applyStrategy 把策略運用到數據上
addPosLimit 在時間戳上加上頭寸和等級限制(level limits
apply.paramset 把參數集合運用到策略上
applyStrategy.rebalancing 把策略運用到周期性調整的數據上

2)基于quantstrat包的回測:單資產情況

現在可以結合quantstrat包和blotter包給出一個更好的量化策略回測。 首先做初始化,這里包括blotter包里邊對金融工具和賬戶和組合的初始化,也包括quantstrat包對策略和指令的初始化。

下面以之前做過的faber策略為例。

#金融產品初始化

library(quantstrat)

currency("RMB")

stock("ZSYH", currency = "RMB", multiplier = 1)

Sys.setenv(TZ = "UTC") #設立時區

#讀取金融交易數據并轉換為月數據

ZSYH <- getSymbols("600036.ss", from = "2008-01-01", to = Sys.Date(), src = "yahoo",

??? auto.assign = FALSE)

ZSYH <- to.monthly(ZSYH, indexAt = "endof")

ZSYH$SMA10m <- SMA(Cl(ZSYH), 10)

#初始化組合和賬戶

q.strategy <- "qFaber"

initPortf(q.strategy, "ZSYH", initDate = "2007-12-31")

initAcct(q.strategy, portfolios = q.strategy, initDate = "2007-12-31", initEq = 1e+06) #初始的資金是1e6,即1000000

# 初始化指定和策略
initOrders(portfolio = q.strategy, initDate = "2007-12-31")
strategy(q.strategy, store = TRUE)
ls(all = T) #quantstrat
創建了.strategy環境

# 策略是什么呢?看一下
strategy <- getStrategy(q.strategy)
summary(strategy)

?

下面是quantstrat包的關鍵:加入指標、信號和規則。
#
加入一個指標,10月均線

add.indicator(strategy = q.strategy, name = "SMA", arguments = list(x = quote(Cl(mktdata)),n = 10), label = "SMA10")

# 加入信號,向上交叉10月線,向下交叉10月線

add.signal(q.strategy, name = "sigCrossover", arguments = list(columns = c("Close","SMA10"), relationship = "gt"), label = "Cl.gt.SMA")

add.signal(q.strategy, name = "sigCrossover", arguments = list(columns = c("Close","SMA10"), relationship = "lt"), label = "Cl.lt.SMA")

# 加入規則,買入規則和賣出規則

add.rule(q.strategy, name = "ruleSignal", arguments = list(sigcol = "Cl.gt.SMA",

??? sigval = TRUE, orderqty = 900, ordertype = "market", orderside = "long",

??? pricemethod = "market"), type = "enter", path.dep = TRUE) # 買入數量為900

add.rule(q.strategy, name = "ruleSignal", arguments = list(sigcol = "Cl.lt.SMA",

??? sigval = TRUE, orderqty = "all", ordertype = "market", orderside = "long",

??? pricemethod = "market"), type = "exit", path.dep = TRUE)

# 此時的策略對象

summary(getStrategy(q.strategy))## Length Class Mode

現在的策略strategy中有1個指標,2種信號和相應的兩個規則(買入、賣出)。

下面開始使用這個策略:

out <- applyStrategy(strategy = q.strategy, portfolios = q.strategy)


summary(out)

mktdata["2013"]

mktdata是在執行策略過程中創建的一個特殊的變量,包含了原交易數據的時間序列以及指標和信號。在我們上面的ZSYH里,在20136月出現一次賣出的信號。

接下來對相關對象(組合、賬戶和權益價值)進行更新

updatePortf(q.strategy)

updateAcct(q.strategy)

updateEndEq(q.strategy)

最后按照現在的組合和賬戶情況給出策略表現

myTheme <- chart_theme()
myTheme$col$dn.col <- "lightgreen"
myTheme$col$up.col <- "lightblue"
myTheme$col$dn.border <- "grey"
myTheme$col$up.border <- "grey"
#
策略表現可視化
chart.Posn(q.strategy, Symbol = "ZSYH", Dates = "2008::", theme = myTheme)

# 交易統計
(tstats <- tradeStats(Portfolio = q.strategy, Symbol = "ZSYH"))

# 指令簿(order book
ob <- getOrderBook(q.strategy)
head(ob$qFaber$ZSYH)
#quantstrat包給出了MAEmaximum adverse excursion)和MFEmaximum favorable excursion)的圖形
chart.ME(Portfolio = q.strategy, Symbol = "ZSYH", type = "MAE", scale = "percent")
chart.ME(Portfolio = q.strategy, Symbol = "ZSYH", type = "MFE", scale = "percent")






原文:http://site.douban.com/182577/widget/notes/10568316/note/313993652/

總結

以上是生活随笔為你收集整理的R语言quantstrat包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。