2020年3月31日 星期二

★黃豆當沖交易策略 (含程式碼)

     最近看了David Bennett《Day Trading Grain Futures》,發現裡面有一些觀念很簡單的農作物當沖交易策略,在這邊跟大家分享。書中作者以2分鐘K線找到的壓力和支撐做為參考,以此來計算出進場和出場的點,進出場方式不難,大家可以做為參考。

     在對農產品進行當沖交易前,我們先將交易時段設定在9:30~13:15(交易所時間),此時段農產品的波動對當沖交易有利,流動性也比較足夠。操作的方式是根據開盤之後已經出現的K棒來判斷目前的趨勢是向上還是向下,並且決定支撐和壓力的位置,等待回調之後的再次突破才進場,並設定好停損及停利點。以黃豆期貨為例,如下圖是2020年3月25日的黃豆期貨2分鐘K線圖。一開盤之後的前三根K棒都一直向下突破,直到第四根K棒時才拉回了一些而沒有再創新低,這時第三根K棒的最低點就是目前的支撐,開盤第一根K棒的最高點是目前的最高點,這點就是壓力,第四、五根K棒則稱為回調,一旦回調之後再度向下貫破支撐就進場做空,這裡的回調必須沒有突破上方的支撐,並且必須要有至少兩根以上的K棒回調,一旦突破向上的支撐則趨勢就要改成看多,而每次要進場前都必須要出現有效的回調。如圖我們可以看到在第六根K棒時貫破了支撐,於是在這裡進場,並設定好停損停利。

黃豆期貨2分K線



     要設定停損停利的大小,我們要從已經出現的K棒中尋找參考範圍,作者稱這個範圍為r(如下圖所示),r的範圍以多單為例,上界是壓力,下界是在進場之前,一根一根依序倒回檢查進場之前的K棒,當發現有一根K棒的Low低於相臨兩根的K棒的Low時,這個Low就是r的下界,由上界及下界範圍決定的r為參考,我們可以決定停損和停利點。找出r之後,我們可以設定r的幾倍做為停損停利點,另外因位是當沖,所以加上最後一根K棒強制平倉。

設定範圍為r的支撐及壓力區間





編寫成程式碼如下:

input:rLoss(18),rProfit(3.5),DailyExit(1314);
var:Support(0),Pressure(0),LongOrShort(0),PullBack(0),r(0);

if d<>d[1] then begin
   LongOrShort=0;
   Support=l; Pressure=h;
   PullBack=0;
   if c>o then LongOrShort=1
   else if c<o then LongOrShort=-1;
end;

if LongOrShort=0 then begin
   if l<Support and h<Pressure then LongOrShort=-1
   else if h>Pressure and l>Support then LongOrShort=1
   else if l<Support and h>Pressure then begin
     if c>o then LongOrShort=1 else if c<o then LongOrShort=-1;
   end;
end else if LongOrShort=1 then begin
   if l>Support and h<Pressure then begin
      PullBack=PullBack+1;
   end;
   if (EntriesToday(d)=0 or (EntriesToday(d)=1
         and ((marketposition=0 and marketposition(1)=-1) or marketposition=-1)))
      and PullBack>=2 and h<=Pressure and l>Support
      then buy 1 contract next bar Pressure+minmove/pricescale stop;
   if l<Support and (c<o or h<Pressure) then begin
      LongOrShort=-1;
   end;
   if marketposition<=0 and l<l[1] then r=Pressure-l;
end else if LongOrShort=-1 then begin
   if l>Support and h<Pressure then begin
      PullBack=PullBack+1;
   end;
   if (EntriesToday(d)=0  or (EntriesToday(d)=1
         and ((marketposition=0 and marketposition(1)=1) or marketposition=1)))
      and PullBack>=2 and l>=Support and h<Pressure
      then sellshort 1 contract next bar Support-minmove/pricescale stop;
   if h>Pressure and (c>o or l>Support) then begin
     LongOrShort=1;
   end;
   if marketposition>=0 and h>h[1] then r=h-Support;
end;
if t>=DailyExit then begin
   buytocover next bar market;
   sell next bar market;
end;
setstoploss(r*bigpointvalue*rLoss);
setprofittarget(r*bigpointvalue*rProfit);

Pressure=highd(0); Support=lowd(0);

不加手續費回測如下:






  當然我們可以發現這個策略的交易次數有點太多了,所以不用測也知道加上手續費表現會變得不好,因此實際運用還需要加上一些濾網,這方面留給讀者自己研究。




1 留言:

Kit 提到...

沒想到這個古老的策略竟然還能實行,站長有嘗試過在其他期貨運行嗎?

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------