如何用技術分析確定買入點-以R語言為量化工具
來自專欄如何使用R語言來進行技術分析
很多人聽說過技術分析,比如均線指標(MA),簡單地講就是短期均線向上穿越長期均線時作為買點(比如5日均線向上超越20日均線),短期均線向下穿越均線時作為賣點(比如5日均線向下穿越20日均線)。也可以用10日均線超越80日來作為買賣點,或者20日超越100日,但如何確定哪個的時間長度是最好的呢?萬一30日超越60日收益率更高呢?
這就需要用歷史數據作為參考去回測,考慮到計算量的問題,需要用到軟體,這裡我將用R語言(R studio)演示一遍如何確定MA指標。
基本原則如下:
1、計算公式:MA(i)-MA(j)>0,買入點
MA(i)-MA(j)<0,賣出點
2、採用窮舉法,i ∈(5,10,20,30,40,50,60,70,80,90,100,110)
j∈(10,20,30,40,50,60,70,80,90,100,110,120),同時j>i,即測試每一種i和j的情況
3、採取收益率和勝率兩個指標綜合比較
4、原始數據來自wind,數據為2004年1月2日-2018年6月8日的上證綜指每日收盤價,漲跌幅等數據,以及wind自動計算出的5-120日平均值。
由於直接從wind提取數據到excel的文件後綴是.xls,需要轉存為csv後綴方便R讀取。#號後邊的文字是方便理解的備註,R語言會自動跳過不執行。
######################R代碼:
setwd("D:/Rdata") #設置默認數據讀取目錄
mydata<-read.table("MAjiaocha original data.csv",header=TRUE,sep=",",fill=TRUE)#輸入csv數據,第一行為數據名,從第二行開始讀取數據,數據間隔是逗號。
mydata1<-head(mydata,n=3401)
mydata1<-tail(mydata1,n=2917)
tradeday<-mydata[,1]#第一列數據命名為交易日期
index<-mydata[,5]#上證指數命名為index
index<-index[487:3403]#選擇2006年1月4日-2017年12月29日的收盤數據
change<-mydata[,9]#漲跌幅命名為change
change<-(change+100)/100#把漲跌幅轉化成可以直接計算收益率的乘數
change<-change[486:3402]#選擇2006年1月4日-2017年12月29日的收益率數據
y=matrix(rep(0,2917),2917,1)#創建一個1列2917行的0矩陣,用來記錄每日漲跌幅
x=matrix(rep(0,169),13,13)#構造一個13行13列的0矩陣,用來記錄每種策略的總收益
#n兩個循環,計算MA交叉倉位,累計收益率,i取值10-21是因為文件第10列是MA5,22列是MA120
for(i in 10:21){for(j in 11:22){if(i<j){
{cangwei<-mydata1[,i]-mydata1[,j]}
{for(c in 1:2917){if(cangwei[c]>0){cangwei[c]=1}else{cangwei[c]=0}}}
(y=cangwei*change)
(z=1)
for(v in 1:2917)
{if(y[v]>0){z=z*y[v]}else{z=z}}
(x[i-9,j-9]=z)}else{x[i-9,j-9]=0}}}
##運行完以上循環後,運行如下程序,得到12X12的收益率表格並存儲到目標文件夾
write.table(x,"MAjiaocha.csv",sep=",")
#####################
在D:\Rdata文件夾中我們得到結果MAjiaocha.csv,裡面結果如下:
我們選取收益率最高的5個組合:
MA70>MA90, MA60>MA90, MA40>MA90, MA5>MA100, MA90>MA110(其中列為i即短期,行為j即長期)
然後我們在excel表裡單獨測試這5個指標的勝率,變倉總數和頻率,結果如下:
最終70>90勝率和收益率綜合結果最好,收益為7.49倍,勝率為58%。
以上就是我用R語言計算MA的過程,供參考。
寫在最後的話:
1、技術指標是一種思路,其基礎假設是過去能夠反映未來。但如果未來僅僅是未來,跟過去沒有關係,則技術指標就沒有意義。這時候就需要採取別的方法,如Monte-Carlo模擬。
2、MA是技術指標中最簡單的,還有其他的如RSI、TRIX、成交額、成交量等,一般情況下需要幾個指標一起考慮,單獨看MA的效果還可以但不如綜合幾種好。
推薦閱讀: