電子信箱 service [at] bituzi.com
幣圖誌首頁 facebook粉絲團 google plus google plus


第一次程式交易就上手-我變我變我變變變



上次教大家怎麼建構自己的的第一支程式,
不過不知道大家會不會舉一反三,
馬上就可以變出其它的程式呢?
有人跑pa可以一秒變格格,
我也可以一秒變出另一支程式阿!
大家拭目以待往下看就對了。



我們上次所建構的第一支程式的交易邏輯是,
設定開盤後一段時間的最高點跟最低點當作一個區間,
往上突破最高點的某個比例就進場做多;
往下跌破最低點的某個比例就進場做空。
不過知己知彼敗戰百勝,大家一定要了解自己程式的優缺點。
大家知道這個程式會有什麼缺點嗎?
因為這個程式是利用開盤後一段時間內的最高跟最低點的區間為基準,
當這區間太大的話,會讓你的程式進場反應會比較遲鈍,
怎麼說呢?如果區間太大就會像下圖所示



作多進在很上面,結果盤勢過高後無力往下殺,
結果又剛好殺破你的區間下限讓你的空單進場,
這時候,不知道哪個該死的傢伙又在拉盤,
結果又往上走讓你再度停損,這種N字盤大概就是他的一大死穴。
更不用說更機車的W字盤了,如果你沒限制交易次數,
當W字盤出現時,可能當天就讓你畢業了。

既然如此,我們把程式的交易邏輯轉個彎,
本來是突破區間上限某個比例後作多,
現在改成從區間底部往上拉過多少比例後作多。
然後把跌破區間下限某個比例後作多,
改成從區間高點往下拉回多少比例後作空。
當然,你也可以把比例換成點數試試看。
接下來我們來看看回測的結果。

回測時間,SHOW TIME!

回測目標:驗證兩種交易策略的獲利性?

回測標的:用台指5分K線作當沖交易。

回測成本設定:費用設定為1000元。

回測時間:從今天往回3000天。

進場方式
策略一:
(1) 當價格往上突破9點前的最高點往上0.5%,我們就進場作多。
(2) 當價格往上突破9點前的最低點往下0.5%,我們就進場作空。
策略二:
(1) 當價格往上突破9點前的最低點往上1%,我們就進場作多。
(2) 當價格往上突破9點前的最高點往下1%,我們就進場作空。

濾網:基本上沒有濾網,不過我們限制進場次數,作多作空最多各作一次。

出場方式
(1) 設定停損點數為50點。
(2) 1點40分 還有部位就全部出場。

我們把報表數據稍微整理如下:







基本上我們可以發現,策略二的績效比策略一的績效要好,
不過還是都有改進的空間,因為交易次數太多,
而且最大虧損也過大,不過最大虧損跟出場也有很大的關係,
這部分之後會再介紹其他出場方式。
不過我們還可以發現,最近這三年的績效很差,
除了出場方式太單調之外,也表示這兩種進場邏輯太過簡單,
可能需要加上一些其他的濾網來降低交易次數。
在策略二中我們原本設定的R是0.01,
當指數在8000點時,你必須要從低點往上拉80點後才會進場,
有時候80點已經是一天的波動了,都已經沒什麼利潤了。
讓R變小,這樣你就不用等指數拉開好一大段才進場,
不過R變小,交易次數會增加,要相對的降低交易次數,
就必須加入其他濾網來輔助,這樣才可以讓績效比較穩定。


最後把完整的程式碼分享給大家
input : R(0.01),BeginTime(0900),EndTime(1245);

var :TH(0),TL(0),mkp(0),ax(0),ay(0);


if date <> date[1] then begin
mkp=0;
ax=0;
ay=0;
end;
if time=BeginTime then begin
TH=highd(0);
TL=lowd(0);
end;


if BeginTime < Time and Time < EndTime then begin
if MarketPosition = 0 and ax < 1 and high > TL*(1+R) then buy at highest(h,1)+1 stop;
if MarketPosition = 0 and ay < 1 and low < TH*(1-R) then sell at lowest(l,1)-1 stop;
end;

mkp=marketposition;

if mkp[1] <> 1 and mkp=1 then ax=ax+1;

if mkp[1] <> -1 and mkp=-1 then ay=ay+1;

if marketposition =1 then begin
exitlong at entryprice-50 stop ;
if time>1339 then exitlong this bar on close;
end;

if marketposition =-1 then begin
exitshort at entryprice+50 stop ;
if time>1339 then exitshort this bar on close;
end;

setexitonclose;

0 意見: