1. 程式人生 > 其它 >R語言構建追漲殺跌量化交易模型

R語言構建追漲殺跌量化交易模型

作者:張丹(Conan), 程式設計師Java,R,Javascript

原文:http://blog.fens.me/finance-chase-sell/#comment-4627

久經股市的老股民,通常都會使用一種常見的交易策略,追漲殺跌交易法。追漲殺跌法,是股市操作的一個重要技巧,就是在股市上漲時買入股票,股市下跌時賣出股票。如果操作得當是很好的贏利手段,在中國股市2015年上半年的牛市中,追漲殺跌交易法就是交易神器法門。

目錄

  1. 什麼是追漲殺跌?
  2. 追漲殺跌的建型和實現
  3. 模型優化

1. 什麼是追漲殺跌?

追漲殺跌是金融市場的專業術語,是金融技術派操盤的一種方式,與抄底摸頂的操作方式剛好相反。追漲殺跌的操作方法是,金融市場中在金融產品(股票,期貨,外匯等)價格上漲的時候買入,以期待漲得更多,並以更高的價格賣出獲利;在價格下跌的時候賣出進行止損,不管之前金融產品買入的價格是多少,都立刻賣出,以避免更大的損失。

下面以平安銀行(000001)股票日K線圖為例,擷取2005年到2015年7月的股票資料,股價為向前復權的價格。

上圖中有3條曲線,黑色線是平安銀行向前復權後的每日股價,紅色線為20日均線,藍色線為60日均線。關於均線的介紹,請參考文章 兩條均線打天下。圖中還有一條紅色的水平線虛線,是這10年的股價平均值等於7.14元。這10年間,平安銀行股價起起落落,每次上漲都會持續一段時間,那麼在我們可以上漲中段追入買進,在大幅下跌之前賣出,就是追漲殺跌法。

追漲

追漲通常有2種情況,短線追漲和中線追漲。以股票交易為例。

  • 短線追漲:當天股價已經漲了5個點或更多,這時追進去買入,期待當天收盤漲停,等下一個交易日高價賣出,這就是短線追漲。
  • 中線追漲:某隻股票的股價已經上漲了一段時間,走勢很強,底部上漲已經有30%或更多,這個時追進去買入,期待後勢持續上漲,是中線追漲。

不論短線追漲還是中線追漲,我們追漲的理由和判斷的標準都是一樣的,“漲得好的股票說明走勢很強,那麼追強勢股期待股票持續上漲”。但從另一個角度看,追漲的風險也是很大的,關鍵在於我們不知道它能漲到什麼時候,到什麼位置可能會回撥,什麼時候是莊家出貨。所以說追漲技巧性很強,什麼情況下能追,什麼情況下不能追,都是很有講究的。

殺跌

殺跌也是一門較深的操作技巧,殺得好的話既可以迴避風險。如果不能進行殺跌的準確判斷,則很可能會發生硬性止損,導致嚴重的虧損。

採取殺跌戰術,必須掌握以下操作要點:

  • 殺跌的重要前提是知變,就是對訊息、對量能、對周邊各種因素的影響有一個準確的、快速的知變過程。
  • 殺跌要善於觀察盤面、形態、訊息、輿論等方面的細微變化,在對大盤作出準確估量的基礎上,迅速作出反應就是確定賣出哪支股票,賣出多少等。
  • 殺跌要善於思考大盤與目標股之問的正向、反向的相關性,及目標股的能量能等方向的關係,從中找出變動的規律。
  • 當市場利好訊息接踵而至時,應隨時準備賣出股票。當利好出盡就會轉向利空,往往訊息明朗時,股價早已下跌大半,導致措手不及。

殺跌的後續操作就比較簡單了,只需保持良好的心態,耐心等待見底訊號後再抄底。一般只有在底部成功接回股票或換股才算成功的殺跌,否則殺跌會失去意義。應保持耐心,千萬不要在股價反彈時貿然介入,否則屢買屢跌、會加大損失,應待股價反轉時再介入。

追漲殺跌的技巧

要觀大勢,看清整個市場多空對決的優勢一方是誰。

追漲殺跌的假設條件:

  • 市場處於強勢交易格局。強勢格局賦予個股良好的運作基礎;相反,如果市場處於平衡狀態,就不適合進行追漲殺跌,更適合高拋低吸。
  • 市場形成了鮮明並有持續性上漲能力的熱點或板塊效應。

追漲操作的物件:

  • 市場形成鮮明的可持續性的熱點時,可追漲這個熱點。從理論上講,只要把握熱點板塊就能獲利,追漲時應重點關注龍頭企業。比如:滬深300指數的成分股,就是不錯的選擇。
  • 形成明顯的上漲趨勢的個股可以考慮追漲。個股突破重要的壓力線,如頭肩底形態的頸線位、整理箱體的箱頂位、三角形的上邊眼、長期下降趨勢線等,待回抽確認其突破的有效性後,可考慮追漲。

追漲殺跌的注意事項:

  • 追漲時應設好止盈位和止損位,確定自己的大致盈利目標。
  • 追漲殺跌應該注意頻率的減少,過於頻繁的操作,一旦失誤增多會嚴重影響情緒。
  • 追漲殺跌中要多一分平和的心態,少一些僥倖;多一分理性,少一分感性。

追漲殺跌的市場操作

在弱市中,短線追漲往往容易被套,因為弱市裡大部分股票的行情只有一天,當天追得高了,第二天多半沒有獲利逃出的機會。相反,弱市中,中線追漲比較可取,能夠在弱市中保持強勢的股票不多,但這種強勢反而可以持續。但很多時候,弱市中這樣的股票反倒不敢追了。

有些人專門追漲停板,追新股開板,追次新股開板等,對於2015年上半年IPO的新股來說收穫頗豐,如暴風科技,中超電纜等,其他的時候可能用這套追漲停策略就行不通了。

我自己操作並不會盲目追漲,安全第一,雖然還沒有吃過追漲的虧,但由於本人目前還不具備基本面的分析能力,也沒有訊息的渠道,僅僅從技術指標入手,投機性太重,很容易被莊家玩死的。道理很簡單,因為如果追漲了,下跌的空間自然就大了,尤其中線追漲,莊家獲利後隨時可能出貨。這時候就必須要做好殺跌的策略。莊股出貨跌個50%太普遍了,而且跌下去就很難再起來,這種時候不殺跌就等於自殺。所以,追漲之前一定要想清楚,務必先設好止損位,不能只憧憬獲利的美妙。

殺跌也有講究,不是一跌就殺,震盪、洗盤是很常見的,問題在於正確地區別震倉與出貨是很難的,所以很多人是硬性止損,即預先設定價位或百分比,到這個位置就堅決出局,不管它是震倉還是莊家出貨。這個時候如果沒有基本面的判斷或第一手訊息的來源,就容易被震盪出局。當然,和不確定的風險相比,我其實更願意早點出來。

2. 追漲殺跌的建型和實現

既然我們要進行追漲殺跌的操作,就要定義什麼是追漲,什麼又是殺跌,需要把追漲殺跌的概念量化出來,從而進行建模和實現。對於短線追漲策略可以簡單粗暴地選擇當日漲幅超過5%的股票進行買入,第二日開盤賣出或到止損位賣出,並沒有太多的技術細節,再計算一下勝率概率,就能知道我們要不要短線追漲。

下文我們將以中線追漲為例,進行建模和程式實現。

那麼對於中線追漲的情況,我們核心的策略思路就可以轉化為,當股價(成交量)向上突破最近20日最高價格(量)時買入,當股價向下突破最近10日最低價格賣出,並以滬深300成分股做為股票交易的標的。其中,為什麼是20日最高和10日最低都是經驗值,可以做為模型引數進行訓練和優化。選擇滬深300成分股為標的,是考慮到這些股票都是各個板塊的強勢股或龍頭股,要符合追漲殺跌的假設條件。

計算公式:

20日最高價 = max(T日股價,T-1日股價 ... , T-19日股價)
20日最高量 = max(T日成交量,T-1日成交量 ... , T-19日成交量)
10日最低價 = min(T日股價,T-1日股價 ... , T-9日股價)

當股價大於等於20日最高價時作為買入訊號點,當股價小於等於10日最低價時作為賣出訊號點。這樣我們就把追漲殺跌的投資理論,變成了一個數學模型。

接下來,我們利用R語言對股票資料的進行操作,來實現一個追漲殺跌模型的例項,從而驗證我的們投資理論,是否能發現賺錢的機會。

2.1 資料準備

R語言本身提供了豐富的金融函式工具包,時間序列包zoo和xts,指標計算包TTR,資料處理包plyr,可視包ggplot2等,我們會一起使用這些工具包來完成建模、計算和視覺化的工作。

我本次用到的資料是從 況客 ( https://qutke.com/ )直接匯出的,況客 會提供各種型別的金融資料API,讓開發者可以免費下載。當然,你也可以用quantmod包從Yahoo財經下載資料。

本文用到的資料,包括A股日K線(向前復權)資料,從2014年7月到2015年日8月,以CSV格式儲存到本地檔案stock.csv。

資料格式如下:

000001.SZ,2014-07-02,8.14,8.18,8.10,8.17,28604171
000002.SZ,2014-07-02,8.09,8.13,8.05,8.12,40633122
000004.SZ,2014-07-02,13.9,13.99,13.82,13.95,1081139
000005.SZ,2014-07-02,2.27,2.29,2.26,2.28,4157537
000006.SZ,2014-07-02,4.57,4.57,4.50,4.55,5137384
000010.SZ,2014-07-02,6.6,6.82,6.5,6.73,9909143

一共7列:

  • 第1列,股票程式碼,code,000001.SZ
  • 第2列,交易日期,date,2014-07-02
  • 第3列,開盤價,Open,8.14
  • 第4列,最高價,High,8.18
  • 第5列,最低價,Low,8.10
  • 第6列,收盤價,Close,8.17
  • 第7列,交易量,Volume,28604171

通過R語言載入股票資料,由於資料所有股票都是混合在一起的,而進行計算時又需要按每支票股計算,所以在資料載入時我就進行了轉換,按股票程式碼進行分組,生成R語言的list物件,同時把每支股票的data.frame型別物件轉成XTS時間序列型別物件,方便後續的資料處理。

#載入工具包
> library(plyr)
> library(xts)
> library(TTR)
> library(ggplot2)
> library(scales)

# 讀取CSV資料檔案
> read<-function(file){ 
+   df<-read.table(file=file,header=FALSE,sep = ",", na.strings = "NULL") # 讀檔案
+   names(df)<-c("code","date","Open","High","Low","Close","Volume")      # 設定列名
+   dl<-split(df[-1],df$code)                                             # 按ccode分組
+   
+   lapply(dl,function(row){                                              # 換成xts型別資料
+     xts(row[-1],order.by = as.Date(row$date))
+   })
+ }

# 載入資料
> data<-read("stock.csv")

# 檢視資料型別
> class(data)
[1] "list"

# 檢視資料的索引值
> head(names(data))
[1] "000001.SZ" "000002.SZ" "000004.SZ" "000005.SZ" "000006.SZ" "000007.SZ"

# 檢視包括的股票數量
> length(data)
[1] 2782

# 檢視股票000001.SZ
> head(data[['000001.SZ']])
               Open     High      Low    Close   Volume
2014-07-02 8.146949 8.180000 8.105636 8.171737 28604171
2014-07-03 8.171737 8.254364 8.122162 8.229576 44690486
2014-07-04 8.237838 8.270889 8.146949 8.188263 34231126
2014-07-07 8.188263 8.204788 8.097374 8.146949 34306164
2014-07-08 8.130424 8.204788 8.072586 8.204788 34608702
2014-07-09 8.196525 8.196525 7.915596 7.973434 58789114

把資料準備好了,我們就可以來建立模型了。

2.2 追漲殺跌模型

為了能拉近我們對市場的瞭解,我們取從2015年1月1日開始的資料,來建立追漲殺跌的模型。以樂視網(300104)的為例,畫出樂視網自2015年以來的每日收盤價,20日最高價和10日最低價。樂視網作為創業板標杆的上市公司,在2015年7月首次被納入滬深300指數。

# 日K線資料
> title<-'300104.SZ'
> stock<-data[[title]]                                # 獲得股票資料
> sDate<-as.Date("2015-01-01")                        # 開始日期
> eDate<-as.Date("2015-08-24")                        # 結束日期
> cdata<-stock[dateArea(sDate,eDate,360)]$Close       # 獲得收盤價
> vdata<-stock[dateArea(sDate,eDate,360)]$Volume      # 獲得交易量

# 收盤價
> names(cdata)<-"Value"   # 重置列名
> tail(cdata)
           Value
2015-08-14 49.81
2015-08-17 48.30
2015-08-18 45.57
2015-08-19 46.98
2015-08-20 45.79
2015-08-21 42.14
 
# 交易量
> tail(vdata)
             Volume
2015-08-14 42108324
2015-08-17 35939096
2015-08-18 52745702
2015-08-19 43447844
2015-08-20 32916746
2015-08-21 34802494

定義畫圖函式drawLine(),支援畫出多條曲線,包括收盤價,最高價,最低價。

# 畫圖函式
> drawLine<-function(cdata,titie="Stock",sDate=min(index(cdata)),eDate=max(index(cdata)),breaks="1 year"){
+     if(sDatemax(index(cdata))) eDate=max(index(cdata))  
+     cdata<-na.omit(cdata)
+     
+     g<-ggplot(aes(x=Index, y=Value),data=fortify(cdata[,1],melt=TRUE))
+     g<-g+geom_line()
+     
+     if(ncol(cdata)>1){ # 多條線
+         g<-g+geom_line(aes(colour=Series),data=fortify(cdata[,-1],melt=TRUE))  
+     }
+     
+     g<-g+scale_x_date(labels=date_format("%Y-%m"),breaks=date_breaks(breaks),limits = c(sDate,eDate))
+     g<-g+ylim(min(cdata$Value), max(cdata$Value))
+     g<-g+xlab("") + ylab("Price")+ggtitle(title)
+     g
+ }

# 畫出收盤價
# drawLine(cdata,title,sDate,eDate,'1 month')    # 畫圖

# 計算最近20日的最高價和10日的最低價
> minmax<-function(data,max=20,min=10){
+   d1<-na.locf(data,fromLast=TRUE)
+   d2<-merge(d1,min=runMin(d1,min),max=runMax(d1,max))
+   return(d2[,-1])
+ }
 
# 畫出股價,最高價和最低價
> ldata<-cbind(cdata,minmax(cdata))
> drawLine(ldata,title,sDate,eDate,'1 month')    # 畫圖

上圖中有3條線,黑色線為樂視網的每日收盤價,藍色線為最近20日最高價,紅色線為最近10日最低價。

根據模型的計算公式,我們計算買入訊號,當股價向上突破最近20日最高價格時買入。

# 買入訊號函式
> buyPoint<-function(ldata){   
+  idx<-which(ldata$Value == ldata$max)
+  return(ldata[idx,])                                  
+ }

# 計算買入的點
> buydata<-buyPoint(ldata)
> buydata
              Value      min      max
2015-01-08 17.43721 13.70164 17.43721
2015-01-09 17.98709 13.74254 17.98709
2015-01-12 19.53222 13.74254 19.53222
2015-01-15 20.21389 14.74232 20.21389

畫出買入的訊號圖,讓我們可以直觀的看到效果。

# 畫圖函式
> drawPoint<-function(ldata,pdata,titie,sDate,eDate,breaks="1 year"){
+     ldata<-na.omit(ldata)
+     g<-ggplot(aes(x=Index, y=Value),data=fortify(ldata[,1],melt=TRUE))
+     g<-g+geom_line()
+     g<-g+geom_line(aes(colour=Series),data=fortify(ldata[,-1],melt=TRUE))
+     
+     if(is.data.frame(pdata)){
+         g<-g+geom_point(aes(x=Index,y=Value,colour=op),data=pdata,size=4)
+     }else{
+         g<-g+geom_point(aes(x=Index,y=Value,colour=Series),data=na.omit(fortify(pdata,melt=TRUE)),size=4)  
+     }
+     g<-g+scale_x_date(labels=date_format("%Y-%m"),breaks=date_breaks(breaks),limits = c(sDate,eDate))
+     g<-g+xlab("") + ylab("Price")+ggtitle(title)
+     g
+ }

> drawPoint(ldata,buydata$Value,title,sDate,eDate,'1 month')  # 畫圖

如上圖所示,藍色的點為股價大於等於最近20日最高價的點,作為買入訊號。所有買入訊號點,都是出現在單邊上行的牛勢中,對於2015年上半年以來的行情來說,追漲的訊號會被大量觸發。

接下來,我們繼續計算賣出訊號點,當股價小於等於最近10日最低價時作為賣出訊號點。

> # 計算賣出的訊號點
> stopPoint<-function(ldata,buydata){  
+     idx<-which(ldata$Value == ldata$min)
+     idx<-idx[which(c(0,diff(idx))!=1)]   # 第一點用0表示
+     
+     selldata<-ldata[idx,]               # 所有低於最小值的點  
+     idx2<-sapply(index(buydata),function(e){  # 買後的賣點
+         head(which(index(selldata)>e),1)
+     })
+     
+     return(selldata[unique(idx2),])
+ } 

# 賣出訊號
> selldata<-stopPoint(ldata,buydata)
> selldata
              Value      min      max
2015-01-30 21.99533 21.99533 25.16284
2015-03-06 34.32453 34.32453 40.99130
2015-04-08 38.01011 38.01011 45.34946
2015-05-28 64.68000 64.68000 82.49000

一共有4筆賣出訊號,為了讓資料更加直觀,我們合併買入訊號和賣出訊號,進行畫圖視覺化。

# 買賣訊號,畫圖
> bsdata<-merge(buydata$Value,selldata$Value)
> names(bsdata)<-c("buy","sell")
> drawPoint(ldata,bsdata,title,sDate,eDate,'1 month') #畫圖

上圖中,紫色點為賣出訊號點,紅色點為買入訊號點。我們可以很明顯的看出,如果根據交易訊號在紅色點買入,紫色點賣出,我們是應該賺錢的。那麼具體賺了多少呢,我需要計算出來?

> # 合併交易訊號
> signal<-function(buy, sell){
+     selldf<-data.frame(sell,op=as.character(rep("S",nrow(sell))))
+     buydf<-data.frame(buy,op=as.character(rep("B",nrow(buy))))
+     sdata<-rbind(buydf,selldf)                                       # 交易訊號資料
+     sdata[order(as.Date(row.names(sdata))),]
+ }

# 合併交易訊號
> sdata<-signal(buydata,selldata)                                   
> sdata
              Value      min      max op
2015-01-08 17.43721 13.70164 17.43721  B
2015-01-09 17.98709 13.74254 17.98709  B
2015-01-12 19.53222 13.74254 19.53222  B
2015-01-15 20.21389 14.74232 20.21389  B
2015-01-16 22.23619 16.08749 22.23619  B
2015-01-19 23.04056 16.36016 23.04056  B
2015-01-20 23.89947 16.36016 23.89947  B
2015-01-26 24.77656 19.22774 24.77656  B
2015-01-27 25.16284 19.40043 25.16284  B

接下來,我們利用交易訊號資料,進行模擬交易。我們設定交易引數和規則:

  • 以10萬元人民幣為本金。
  • 買入訊號出現時,以收盤價買入,每次買入價值1萬元的股票。如果連續出現買入訊號,則一直買入。若現金不足1萬元時,則跳過買入訊號。
  • 賣出訊號出現時,以收盤價賣出,一次性平倉訊號對應的股票。
  • 手續費為0元

下面我們進行模擬交易。

> # 模擬交易
> trade<-function(sdata,capital=100000,fixMoney=10000){ # 交易訊號,總資金,每次定投資金
+     amount<-0
+     cash<-capital
+     
+     ticks<-data.frame()
+     for(i in 1:nrow(sdata)){
+         row<-sdata[i,]
+         if(row$op=='B'){
+             if(cash<fixMoney){
+                 print(paste(row.names(row),"No enough cash"))
+                 next
+             }
+             amount0<-floor(fixMoney/row$Value) # 本次交易量
+             amount<-amount+amount0
+             cash<-cash-amount0*row$Value
+         }
+         
+         if(row$op=='S'){
+             cash<-cash+amount*row$Value
+             amount<-0
+         }
+         
+         row$cash<-round(cash,2)
+         row$amount<-amount
+         row$asset<-round(cash+amount*row$Value,2)
+         ticks<-rbind(ticks,row)
+     }
+     
+     
+     ticks$diff<-c(0,round(diff(ticks$asset),2))
+     
+     rise<-ticks[intersect(which(ticks$diff>0),which(ticks$op=='S')),]   # 賺錢的交易
+     fall<-ticks[intersect(which(ticks$diff<0),which(ticks$op=='S')),]   # 賠錢的交易
+     
+     return(list(
+         ticks=ticks,
+         rise=rise,
+         fall=fall
+     ))
+ }

# 交易結果
> result<-trade(sdata,100000,10000)  

來看一下,每筆交易的明細。

> result$ticks
              Value      min      max op      cash amount    asset      diff
2015-01-08 17.43721 13.70164 17.43721  B  90008.48    573 100000.0      0.00
2015-01-09 17.98709 13.74254 17.98709  B  80025.65   1128 100315.1    315.08
2015-01-12 19.53222 13.74254 19.53222  B  70044.68   1639 102058.0   1742.91
2015-01-15 20.21389 14.74232 20.21389  B  60059.02   2133 103175.2   1117.26
2015-01-16 22.23619 16.08749 22.23619  B  50074.97   2582 107488.8   4313.56

一共發生了34筆交易,其中30筆買入,4筆賣出。最後,資金剩餘111495.9元,賺了11495元,收益率11.5%。

3. 模型優化

我們看到在強勢格局的大牛市中,通過追漲能讓我們獲利頗豐。其實我們可以把模型再進一步優化的,在構建賣出訊號時,是以最近10日最低價為賣出點來看,應該還有更好的賣出點可以選擇。那麼我們就要優化一下模型,比如按下面的優化條件。當股價低於前一個買入點價格的時進行賣出,把小於等於最近10日最低價設為止損點。按照這樣的優化策略,我們是不是可以有更大的收益呢?

這樣的優化思路,會讓我們策略對波動更敏感,更容易被震盪出局;當然好外在於,可以更快的觸發止盈和止損條件,牛市中收益更大。

# 優化條件,當股價低於前一個買入點價格時進行賣出,小於10日最低價為止損點。
> # 計算賣出的訊號點
> sellPoint<-function(ldata,buydata){
+     
+     arr<-c()
+     for(i in 1:nrow(buydata)){
+         
+         if(i>1){ # 跳轉第一個點
+             date<-index(buydata[i,])#;print(date)      
+             
+             # 價格 小於 上一次的買入的價格就賣出
+             last<-as.vector(buydata[i-1,]$Value) # 上一次買入的價格
+             lst<-ldata[paste(date,"/",sep="")]$Value      
+             idx<-head(which(lst < last),1)
+             
+             if(length(idx)>0){        
+                 arr<-rbind(arr,index(lst[idx]))
+             }
+         }
+     }
+     selldata<-ldata[as.Date(unique(arr)),]
+     
+     # 過濾多餘的賣出點
+     bsdata<-merge(buydata$Value,selldata$Value)
+     names(bsdata)<-c("buy","Value")
+     idx1<-which(!is.na(bsdata$Value))
+     idx2<-idx1[which(c(0,diff(idx1))==1)]
+     bsdata$Value[idx2]<-NA
+     return(bsdata$Value[which(!is.na(bsdata$Value))])
+     
+ }

# 賣出訊號
> selldata<-sellPoint(ldata,buydata)
> selldata
              Value
2015-01-21 22.81788
2015-01-28 23.60408
2015-02-25 36.89217
2015-03-17 39.97333
2015-03-19 40.96858
2015-03-26 39.25985
2015-05-14 74.24000

我們重新生成了,賣出的訊號點有7個,比上次多出3個點,畫出交易訊號的圖形。

合併買賣的交易訊號。

> sdata<-signal(buydata$Value,selldata$Value)                                   # 合併交易訊號
> sdata
              Value op
2015-01-08 17.43721  B
2015-01-09 17.98709  B
2015-01-12 19.53222  B
2015-01-15 20.21389  B
2015-01-16 22.23619  B
2015-01-19 23.04056  B
2015-01-20 23.89947  B
2015-01-21 22.81788  S
2015-01-26 24.77656  B
2015-01-27 25.16284  B
2015-01-28 23.60408  S
2015-02-05 26.91247  B
2015-02-10 28.68482  B

一共發生了37筆交易,其中30筆買入,7筆賣出。最後,資金剩餘137483.8元,賺了37483元,收益率37.5%。

我們把賣號訊號和止損訊號,合併畫到一張圖上。

# 止損訊號
> stopdata<-stopPoint(ldata,buydata)

# 合併買賣訊號,止損訊號
> bsdata<-merge(buydata$Value,selldata$Value,stopdata$Value)
> names(bsdata)<-c("buy","sell","stop")
> drawPoint(ldata,bsdata,title,sDate,eDate,'1 month') #畫圖

圖中紅色點為買點,藍色點為優化的賣點,紫色點為止損點。從圖中可以非常清楚的看到,藍色賣出點要優於紫色的止損點。這樣就達到了,模型優化的目的了。雖然只是一個很小的優化,就可以給我們帶來不錯的收益。

接下來,通過況客平臺,我來夠建一個每日更新的交易列表,實現把靜態圖變成了動態圖。

追漲殺跌策略在牛市中會讓我們賺取非常大的利潤,那麼對於2015年下半年行情,牛市已經不復存在,震盪市會一直持續,那麼我們可以使用均值迴歸策略,發現逆市中的投資機會

最後總結,本文從 追漲殺跌 的思路開始,到市場特徵檢驗,再到數學公式,R語言建模,再到歷史資料回測。通過R語言,很簡單地就實現了一個我們腦子中的投資想法。類似的投資想法其實誰都有,利用IT人的技術優勢,可以真正地與實際操作結合起來。

這樣就可以更容易地實現,從IT技術到價值的轉變。IT人,加油!