2016年8月12日 星期五

用excel批次取得台股歷史資料1

大家好,今天要來跟大家分享excel如何取得台灣股價加權指數的歷史資料。

除了作為試算表以及表格製作外,excel其實有很多功能。其中最為我所讚賞的是可以透過VBA操作excel。
除此之外,也可以透過錄製的方式取得這個動作的程式碼,只要稍微修飾過後,就可以透過批次執行,而達到自動化的效果。

如果要取得證交所的個股歷史資料,首先我們要去證交所歷史資料的網站,找到該功能後,把網址留存下來
以台積電為例,以下這個網址可以取得台積電在2016年7月的日成交價格與成交量資料
http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/genpage/Report201607/201607_F3_1_8_2330.php?STK_NO=2330&myear=2016&mmon=07
雖然目前證交所將網頁改版,如果自他的官方網站進入,網址的顯示內容與上述網址不同。但是經測試過後,原本的連結還是可以使用

我們可以透過excel內自網頁取讀資料的功能,把些資料導入到excel內

方法很簡單,以excel2010為例,首先先找到資料頁籤,並按下自web取得資料功能
之後會出現自網頁取得資料的工作視窗,再把以上的網址貼到網址列內,然後勾選成交資訊的表格
按下"匯入"後,系統會要你選擇要在哪一個儲存格寫入他取得的訊息,再按下確認之後
網頁內的成交資訊就會出現在excel內供你使用了。

但是這樣僅能取得一個月的資訊,對於取得資料並做分析幫助不大,這時我們可以透過錄製的功能,取得以上這個動作的程式碼。

流程如下

在excel的開發人員業籤內選擇錄製巨集
之後系統會詢問你要錄製在何處,直接按下確定後可以看到剛剛我們按下的錄製巨集按鈕變成了停止錄製。
現在,把剛剛我們取資料的動作,原封不動的重做一次。之後我們可以在excel巨集編輯處取得系統錄製的程式碼。

為了簡化,我直接把程式碼節錄在這裡

Public Sub GetData()
aazz = "URL;http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY/genpage/Report201607/201607_F3_1_8_2330.php?STK_NO=2330&myear=2016&mmon=07"


With ActiveSheet.QueryTables.Add(Connection:=aazz, Destination:=Range(Cells(1, 1), Cells(1, 1)))
.RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "8" .Refresh BackgroundQuery:=False End With End Sub

以上的程式可以順利取得台積電的2016年7月日成交資訊。

2016年7月27日 星期三

excel介接api:元件篇

最近花了一點時間,研究了一下如何使用excel介接api的部分。其中其實做了很多嘗試,也花了很多時間在繞圈子。網路上提及這方面的技巧或是紀錄的文章也偏少,所以在這裡做個紀錄與分享。

其實現在各家券商在提供api界接服務的同時,也同時會提供一些範例。只是範例往往拿到自己的電腦,就會出現你預期內不應發生的錯誤。而券商的人員能個協助解決這個問題的人可說是少之又少,在這邊要推薦康和期貨的何志鵬大大,具有一般營業員所沒有的資訊能力,在這方面能夠提供給我很多協助。

這次的嘗試,主要是以康和的api為主。

以康和的文件為例,在執行最基本的下單功能前,要先將他的元件初始化

Public oSgtpocxapi As Object 
    If oSgtpocxapi Is Nothing Then 
        ' Set oSgtpocxapi = CreateObject("SGTPOCXAPI.SgtpOcxApiCtrl.3") 
        Set oSgtpocxapi = Sheet2.SgtpOcxApi1
        oSgtpocxapi.InitAPIOrder 
    End If

但是實際在執行這一段時,一開始會出現找不到元件的錯誤訊息。
要排除此問題,一開始要插入康和的元件

插入方法如下:
在excel的開發人員頁籤內,按下插入,並找到康和的元件Sgtpocxapi Control
這個動作是指:


在這裡,選取插入後,找到ActiveX控制項,並選擇插入其他控制項


但是如果使用的是office 2010,這裡很可能會遇到第二個問題。
就是找不到Sgtpocxapi Control

這個問題其實也卡了我很久,後來在多方測試後,發現如果券商提供的api是32位元,就必須使用32位元的office才能夠找到這個元件。而各個券商提供的api也各有不同,大家在自己試著接api時一定要注意這個問題。

如果能夠順利找到這個ocx元件並引用到excel內,以康和的api為例,他的長相會像是一個計時器timer

而這個元件也就是前述程式碼中Sheet2.SgtpOcxApi1。如果仔細觀察康和提供的範例,其實也會觀察到這個元件一開始就已被引用進來。

附帶一提,每家券商提供的元件被引用出來的長相各不同。舉例來說,元大的api元件看起來會像是一個icon。


如果能夠成功引用這個ocx元件,並且成功初始化,就可以嘗試使用api的login function看能否登入成功並下單。


2016年7月26日 星期二

箱型理論策略1

這個策略主要是最近研究了箱型理論,所以開發出的策略雛形。

策略的想法很簡單,用長期的資料區間畫出箱型的上下緣後,再使用短期的資料區間去判斷買進與賣出訊號。

經過測試,此策略使用的時間區間是3日線與一小時線,如果要試用看看的朋友可以試試看其他日期區間。

附帶一提,這個策略並沒有加上台指到期日出場的語法。要試用的人也可以自己加上去測試看看。

好了,說了這麼多,程式碼如以下所示。

vars:HighBox(0),LowBox(0);

condition1 = (high[1] > (high[2]) and high[1] > (high)) of data2;
condition3 = ((Low[1] )< low[2] and (Low[1])< low) of data2;


if condition1 then
    HighBox = high[1];
        
if condition3 then
    LowBox = Low[1];
        
    
    
if C > HighBox and O < highbox then begin   //long
    if marketposition = 0 then  
        buy("B") this bar at close;
          
    
    if marketposition = -1 then    
        buytocover("BC") this bar at close;
            
end;

if C < LowBox and O > lowbox then begin  //short    
    if marketposition = 0 then
        sellshort("SH") this bar at close;
        
    if marketposition = 1 then
        sell("S") this bar at close;
    
end;



SetPercentTrailing(100000, 10);



這個策略的實測結果如下,測試使用資料是台指期10年資料。

跟大家分享,有使用的朋友,也可以回饋您的心得給我喔。

2016年1月21日 星期四

能夠穩定獲利的策略,幾乎到現在都沒有找到。目前遇到的問題在於出場策略會造成停損過早(每個交易都只有存續一天,隔天就出場了)。很明顯這個策略並不適合用於出場。

所以,更好的出場時點是甚麼?出場條件一定要跟進場條件做搭配,這是一個成對的條件。

找正確的建倉點與平倉點是一個想法,但是這樣的思維目前要處理的問題是針對何時該使用何種策略,同一指標一定有有效的區間與無效的區間,先試著把區間區分出來,再去確認該使用何種策略。目前先想辦法區分趨勢盤與盤整盤

或許可以先從ADX這樣的指標開始?