哈囉~我是Richard
繼上次講完資料讀取,接著就是如何將策略落實到程式上。
通常會不知道怎麼落實,是因為不知道怎麼把技術線型闡述出來,而非基本面。
基本面:假設要求三率三升,月營收增加等,XQ都有提供欄位,較為直觀。
技術面:V轉,W底等等,XQ並沒有個欄位叫做V轉,而且V的底要多深,這個V字型要多大,都可以自己定義。
這部分先以簡單的V轉作為例子
複雜的拼圖我們可能無法馬上就知道怎麼拼,但我們可以拆成邊框,顏色,慢慢組成
寫策略前,我們可以思考,這策略是怎麼達成的?
V轉,我們先看簡單的圖
我們一定需要
可能需要
明確知道條件後,就可以開始了
在此先附上XQ官方提供的函數說明網站:函數說明網站
首先,先確定資料讀取範圍,既然是兩至三個禮拜(約10~15天)的V轉,那首先就是
settotalbar(15) //強制讀取15筆資料
input:loading(10);
var:Low_price_locate(0); // V底的位置
設定資料讀取範圍,並宣告需要的變數
接著使用lowestBar,這個函數可以回傳一個區間最小值的位置
Low_price_locate = lowestBar(low,loading); //10天中每天都有當天K棒最低價,找到這10個最低價中最小值的位置
使用XQ內建函式:angle
可以計算任意二個日期的走勢角度,那這裡先以標準的-45度以及45度來寫
condition1 = angle(date[loading],date[Low_price_locate]) < -45 and angle(date[Low_price_locate],date) > 45 ;
angle裡面放的是,兩個日期位置的角度,所以放的是V型左邊(1)到V底(2)的位置,至於為甚麼要用condition的方式,是個人習慣寫法,好維護。
乍看好像條件寫完了,但如果只寫到這裡,可能會篩出很神奇的股票,像是
請問V在哪裡?這是因為沒有定義出V型左邊至V底的距離,若只隔一天的距離,那跌一點點也會符合條件。
因此要加上
condition2 = loading - low_price_locate >= 3 and low_price_locate >= 3;
讓V型左邊和右邊離V底部至少都有3天的距離,看起來才會像個V型。
最後就是
if condition1 and condition2 then ret = 1;
這句寫完後編譯,就大功告成~
寫選股條件程式時本來就是這樣,慢慢優化,認為篩出來的股票圖形不如預期,也可以把變數print出來查看,再做微調。
大家不妨也可以試試看W底該如何撰寫,今天就分享到這裡~