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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

mchain r语言_布林带交易策略R语言实现

發(fā)布時間:2023/12/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mchain r语言_布林带交易策略R语言实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

布林帶(Bollinger Bands)指標是股市技術分析的常用工具之一。該指標由約翰 布林提出,基于K線圖畫出三條線,其中上下兩條線可以分別看成是股價的壓力線和支撐線,而在兩條線之間還有一條股價平均線。布林線的交易規(guī)則比較復雜,可適用于震蕩行情、單邊行情、開口和縮口等不同情況,熟練運用需要結合行情進行分析。

不過筆者更樂意從統(tǒng)計的角度進行分析,布林帶的上下線相當于圍繞均值的置信區(qū)間帶,只要是震蕩行情,可以根據(jù)上限買下限賣,容易獲利;但在趨勢市場中,考慮到指標的滯后性,會出現(xiàn)K線一直位于布林線的上限或下限情況,因此,對于單邊行情,感覺有悖統(tǒng)計學原理,筆者不喜歡用布林線進行單邊行情的交易。

布林線雖然能夠適合不同的行情,實際運用過程中,需要預先對市場行情進行預判,才會得到合理的運用。但并不是說布林線萬能,布林帶與大多數(shù)技術性指標一樣,存在的問題就是滯后性和帶寬的不對稱性,當震蕩(或波動)增加時,帶寬會隨之增加,但波動減少時,帶寬會緩慢縮小。也就是說,帶寬增加和減少具有不對稱性。考慮到這個特點,實際分析中,有人對布林帶指標進行修正。其中布林線均線、上限和下限對應的公式分別為:

為了對布林線和修正布林線指標有直觀的理解,如下圖6.1是以中國銀行2017年度數(shù)據(jù)為例,其中紅色虛線為原始布林線上下限,藍色實線為修正的布林線上下限,可以看出,修正布林線帶寬收縮比較快,如2018年上漲過程中,原始布林線下限大幅遠離K線,而修正布林線下限的偏離程度很大程度上得到修正。

圖6.1 布林線(虛線)與調整布林線(實線)指標在中國銀行股票上的表現(xiàn)

下面基于修正布林帶指標建立策略,分析布林帶策略的有效性。此處僅考慮在震蕩行情的運用,即布林線下限時買入,上限時賣出。此處把此指標運用于震蕩市場中。同時為了防止趨勢市場中這種策略的失效,附加止損5%。對應的策略設定見表6.1。

表6.1 修正布林帶策略

在此基礎上,利用quantstrat工具包系統(tǒng),構建布林帶指標,并建立相應信號和交易規(guī)則,并驗證策略的有效性。對應的策略代碼如下:

#----------------------------------------加載工具包并獲取數(shù)據(jù)-----------------------------------------

加載相關工具包:

>library(quantstrat)

>library(data.table)

運用本地自建函數(shù),用于讀取本地下載好的股票數(shù)據(jù)并把數(shù)據(jù)轉換時間序列格式:

>source('read.local.xts.R')

設置起止時間:

>startDate

獲取股票代碼,考慮到對數(shù)字開頭變量的引用會帶來較大的麻煩,在股票代碼前面加個X,從而方便后續(xù)的引用:

>symbols='X601988'

>X601988

#-----------------------------創(chuàng)建修正布林帶指標-------------------------------------

由于系統(tǒng)工具包只有布林帶指標,現(xiàn)在需要的是修正布林帶指標,因此自建修正布林線函數(shù),根據(jù)上述修正布林線公式,創(chuàng)建修正布林線函數(shù),對應命令如下:

>MBbands

> a

> Mt

> Ut

> Dt

> mt

> ut

> dt

> bu

> bl

> result

> colnames(result)

> reclass(result, x)

>}

#---------------------------策略初始化------------------------------------------

設置初始資產:

>initEq=10000*length(symbols)

設置初始策略、組合和賬戶,為了引用方便,都命名為'bbands':

>strategy.st

初始化策略和基礎框架環(huán)境空間,這個一定要有,否則后續(xù)出現(xiàn)問題:

>.blotter

為了保持策略的重復可用性,刪除歷史投資組合和策略

>rm.strat(portfolio.st)

>rm.strat(strategy.st)

設置市場類型和時區(qū):

>currency('CNY')

>Sys.setenv(TZ="UTC")

>stock(symbols,currency='CNY',multiplier=1)

依順序初始化投資組合、賬戶和委托單:

>initPortf(portfolio.st,symbols=symbols,initDate=initDate,currency='CNY')

>initAcct(account.st,portfolio.st,initDate,initEq,currency='CNY')

>initOrders(portfolio.st,initDate=initDate)

設置每次交易頭寸:

>for (symbol in symbols){

> addPosLimit(portfolio.st, symbol, startDate, 10000, 1 )

>} #set max pos

設置參數(shù):

>n = 20 #布林帶均線參數(shù)

>sdp = 2 #帶寬參數(shù)

>.stoploss=0.05 # 止損參數(shù)8%

保存策略:

>strategy(strategy.st, store=TRUE)

#-----------------------------增加指標-------------------------------------------

增加布林帶指標

>add.indicator(strategy = strategy.st, name = "MBbands",

> arguments = list(x = quote(Cl(mktdata)),n=20, sd=2 ),

> label='mbbands')

#-----------------------------------增加信號-------------------------------------------

依據(jù)布林線與收盤價關系增加交易信號,包括買入信號和賣出信號,分別如下:

>add.signal(strategy = strategy.st,name="sigCrossover",

> arguments = list(columns=c("Close","dn"),relationship="gt"),

> label="Cl.gt.LowerBand")

>add.signal(strategy = strategy.st,name="sigCrossover",

> arguments = list(columns=c("Close","up"),relationship="gt"),

> label="Cl.gt.UpperBand")

#------------------------增加交易規(guī)則----------------------------------------------

根據(jù)交易信號增加買入和賣出交易規(guī)則,當收盤價小于布林帶下線時買入,當收盤價大于布林線上線時賣出,對應的命令為:

>add.rule(strategy = strategy.st,name='ruleSignal',

> arguments = list(sigcol="Cl.gt.LowerBand",sigval=TRUE,

> orderqty= 100, ordertype='market',orderside='long',

> threshold=NULL,osFUN=osMaxPos, prefer='open'),

> type='enter',label='enterlong')

>add.rule(strategy = strategy.st,name='ruleSignal',

> arguments = list(sigcol=" Cl.gt.UpperBand ",sigval=TRUE,

> orderqty= 'all',ordertype='market',orderside='long',

> threshold=NULL, prefer='open'),#osFUN=osMaxPos

> label='exitMid',type='exit')

增加止損交易規(guī)則,具體在Cl.gt.LowerBand基礎上設置止損,其中ordertype為限價止損'stoplimit',同時增加tmult=T和threshold項,具體threshold=quote(.stoploss),即當價格小于買入價*(1-stoploss)時賣出,同時考慮到時效性,設置在開盤價買賣,即prefer='open'對應的命令如下:

>add.rule(strategy.st, name = 'ruleSignal', tmult=T

> arguments=list(sigcol='Cl.gt.LowerBand', sigval=T,replace=F,orderside='long',

> ordertype='stoplimit', tmult=T, threshold=quote(stoploss),

> TxnFees=-5,orderqty='all',orderset='ocolong',prefer='open'),

> type='chain', parent='enterlong',

> label='StopLossLONG',enabled=T)#enabled or not!

#-------------------------策略運行及績效統(tǒng)計---------------------------------------

運行策略:

>out

得到的結果為:

[1] "2013-04-0100:00:00 X601988 10000 @ 2.01"

[1] "2013-05-2000:00:00 X601988 -10000 @ 2.03"

[1] "2013-06-2700:00:00 X601988 10000 @ 1.86"

[1] "2013-09-1000:00:00 X601988 -10000 @ 2.11"

[1] "2017-04-0500:00:00 X601988 -10000 @ 3.5"

[1] "2017-04-2400:00:00 X601988 10000 @ 3.37"

[1] "2017-05-1500:00:00 X601988 -10000 @ 3.5"

[1] "2017-10-3100:00:00 X601988 10000 @ 4.02"

[1] "2018-01-0400:00:00 X601988 -10000 @ 4"

依順序更新投資組合、賬戶和最終資產:

>updatePortf(strategy.st)

>updateAcct(account.st)

>updateEndEq(portfolio.st)

策略結果圖顯示:

>chart.Posn(portfolio.st,Symbol= symbols)

感興趣可以進一步參考《量化投資基礎、方法與策略——R語言實戰(zhàn)指南》(電子工業(yè)出版社)

總結

以上是生活随笔為你收集整理的mchain r语言_布林带交易策略R语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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