看完philipz大的解說以後, 決定我也來幫忙這個實驗. 其實source code公開以後, 有心人都能從閱讀source code得知策略的內容. 只是對不太會寫程式或是讀程式碼的人, 可能會比較吃虧. 正好小弟我平常的工作就是讀大量的source code來debug, 對我來說看別人的程式碼還蠻容易的, 所以就讓我來解說一下tradingBot的交易策略, 有錯也請不吝指正.
如前所述, 策略是從NewDdeClient:doit()這個function開始. input是server收到的報價, 可能有台指期, 摩台, 領先指等等. (先說明一下, source code看起來似乎有些地方沒有作用, 像是收了領先指的報價, 可是領先指似乎沒有真的參與策略). 下面稍微講解一下幾個比較重要的function:
doit(): doit一進去以後會把input parse出成交價/量/高/昨收等等. 然後進行detect(), add(), check()等等動作.
detect(): detect會用成交價來計算一些等等會用到的數值.
add(): 這個function有點意思, 他會把最近的400個成交價縮成25個點.
check(): 檢查進出場點, tradeingBot的進場可以分成2種模式, 一種是checkin()另一種是lowMcheckin(). 當手上有部位的時候, 則是檢查出場點(checkout()).
getQueryModel(): 剛剛add()把400筆資料縮成25個點以後, 這個function會找出最高最低價, 然後辨認四種模式:
1. 最小值在前6個點內; 最大值在後5個點內. (上升圖形)
2. 最大值在前6個點內; 最小值在後5個點內. (下降圖形)
3. 最小值在第17~21個點內; 最大值在後2個點內. (急升圖形)
4. 最大值在第17~21個點內; 最小值在後2個點內. (急降圖形)
checkin(): 如果圖形符合上面這四種模式其中之一的話, 就會進場. 特別要注意的是, 進場前會有兩個濾網:
1. 買進的話, 必須要摩台漲得比台指兇; 放空則是要摩台跌得比台指多. (和前一日收盤價比較). 如果摩台的漲跌幅沒有滿足這個濾網, 反而較弱的話, 就會切換到lowM的進場模式.
2. tradingBot一開始跑的時候, 會先call一個function ud.getDirection()決定今天要做的方向. 如果這個方向和現在要進場的方向相反的話, 就需要丟骰子來決定是否要進場. (getDirection()似乎是要讀檔案, 所以數值到底如何算出來, 我也不是很了解, 可能要請philipz大解釋了. )
然後接下來就是lowMcheckin()的進場和checkout()出場:
...先休刊, 改天續po. XDDD.
|