日圓期貨使用趨勢線突破進場的示意圖 |
要畫趨勢線最簡單的方法就是拿起一支筆,在K棒上把波峰的高點相連,或近期波谷的低點相連,延伸出去的那條就是趨勢線了,這種型態的指標用手畫很簡單,但是要把它寫成程式碼就很頭痛了,為了要方便在程式中使用,我把趨勢線寫成了函數,提供給讀者學習。然而趨勢線的畫法很多,在國外論壇可以買更精美的程式語法,只是不見得合自己胃口。
我今天分享的是一種簡單的畫法,單純使用近期波峰及波谷的連線作為趨勢線,因為畫法很簡單,有興趣的人可以自行修改開發出成交量突破等不同用法。
當然如果不加任何濾網的話,趨勢線有時候也會在不適當的時候進場,例如遇到旗形收斂之後,壓力線常常會跑到支撐線下方,這個時候可能就會造成進場訊號的錯亂,因此實際運用在交易訊號的話,還是需要加上適當的濾網。
=================================================
★趨勢線函數程式 TL_Function的程式碼如下: (把下面這段寫在函數中)
input:PriceValue(NumericSeries),
Length(NumericSimple),
UpOrDn(TrueFalse),
ShowTrendLine(TrueFalse),
SetColor(NumericSimple);
var:MA(0),Tri(0),Slope(0),
Tri1Bar(0),Tri3Bar(0),
Tri1Date(0),Tri3Date(0),
Tri1Time(0),Tri3Time(0),
Tri1Price(0),Tri3Price(0),flag(0);
//var:NodPt(0);
/////=====Up Triangle=======/////
if UpOrDn=true then begin
MA=highest(PriceValue,Length);
flag=0;
switch Tri begin
case 0:
if MA<MA[1] then begin
Tri=1;
Tri1Bar=currentbar-Length;
Tri1Price=PriceValue[Length];
Tri1Date=d[Length];
Tri1Time=t[Length];
end;
case 1:
if MA>MA[1] then begin
Tri=2;
end;
case 2:
if MA<MA[1] then begin
flag=1;
Tri=1;
Tri3Bar=currentbar-Length;
Tri3Price=PriceValue[Length];
Tri3Date=d[Length];
Tri3Time=t[Length];
Slope=iff(Tri3Bar-Tri1Bar=0,0,(Tri3Price-Tri1Price)/(Tri3Bar-Tri1Bar));
if ShowTrendLine=true then begin
value1=tl_new(Tri1Date,Tri1Time,Tri1Price,Tri3Date,Tri3Time,Tri3Price);
tl_setcolor(value1,SetColor);
end;
Tri1Bar=currentbar-Length;
Tri1Price=PriceValue[Length];
Tri1Date=d[Length];
Tri1Time=t[Length];
// NodPt=Tri1Price;
//
text_new(Tri1Date,Tri1Time,Tri1Price+20,NumToStr(NodPt,0));
end;
end;
end;
/////============Dn Triangle============/////
if UpOrDn=False then begin
MA=lowest(PriceValue,Length);
flag=0;
switch Tri begin
case 0:
if MA>MA[1] then begin
Tri=1;
Tri1Bar=currentbar-Length;
Tri1Price=PriceValue[Length];
Tri1Date=d[Length];
Tri1Time=t[Length];
end;
case 1:
if MA<MA[1] then begin
Tri=2;
end;
case 2:
if MA>MA[1] then begin
flag=1;
Tri=1;
Tri3Bar=currentbar-Length;
Tri3Price=PriceValue[Length];
Tri3Date=d[Length];
Tri3Time=t[Length];
Slope=iff(Tri3Bar-Tri1Bar=0,0,(Tri3Price-Tri1Price)/(Tri3Bar-Tri1Bar));
if ShowTrendLine=true then begin
value2=tl_new(Tri1Date,Tri1Time,Tri1Price,Tri3Date,Tri3Time,Tri3Price);
tl_setcolor(value2,SetColor);
end;
Tri1Bar=currentbar-Length;
Tri1Price=PriceValue[Length];
Tri1Date=d[Length];
Tri1Time=t[Length];
// NodPt=Tri1Price;
//
text_new(Tri1Date,Tri1Time,Tri1Price-20,NumToStr(NodPt,0));
end;
end;
end;
Function_TL=(currentbar-Tri1Bar)*Slope+Tri1Price;
if ShowTrendLine=true then begin
if flag=flag[1] then begin
value3=tl_new(d[1],t[1],Function_TL[1],d,t,Function_TL);
tl_setcolor(value3,setcolor);
end;
if Tri[2]=2 and Tri[1]=1 then begin
value4=tl_new(Tri3Date,Tri3Time,Tri3Price,d,t,Function_TL);
tl_setcolor(value4,setcolor);
end;
end;
在這裡簡單說明一下,Function_TL的參數共5個:
(1)
PriceValue是要取峰谷值的value,通常壓力線在上方,所以會取high,支撐線在下方,所以會取low。當然也可以將成交量或是RSI這些指標餵給Function_TL運算。
(2)
Length用來調整趨勢線的敏感度,也就是峰值highest(h,len)或谷值lowest(l,len)裡面的那個len。
(3)
UpOrDn是用來選擇我們是要峰峰相連還是谷谷相連,像壓力線是峰峰相連,就用true,支撐線是谷谷相連就用false。
(4)
ShowTrendLine這個只是用來控制要不要把相連的壓力線和支撐線畫在圖表上,一般交易的時候都用false關掉,以減少資源的耗用。
(5)
SetColor是設定畫出來的線的顏色,當然如果ShowTrenLine是false的話,這個參數就沒有用了,隨便設一個就可以。
參數設定範例(如下圖),如果要計算UpTrend(壓力線),PriceValue=h,Length=6,UpOrDn=true表示峰峰相連,ShowTrendLine=false表示不要將線畫出來,SetColor=red表示如果畫線的話,線用紅色畫出。同理DnTrend(支撐線)也是一樣。計算出來的UpTrend就是這當根K棒的壓力價位,而DnTrend則是算出當根K棒的支撐價位。
趨勢線可以運用在很多地方,有時候也可把它拿來用在算成交量的突破位置,要怎麼用就看大家的想像力了。
下圖為台指期使用趨勢線函數指標的情形,為了讓圖表看起來比較乾淨,我只打開近期高點連線的UpTrend(如圖中紅線)。在使用上我很可能會將高點的連線視為價格壓力區,用簡單的順勢策略突破壓力作多 。
另一個例子,下圖為恆生指數期貨,我只開啟DnTrend (支撐線,如圖中黃線),在大多時候,支撐線的跌破意味著行情轉弱,如果是順勢交易的概念就可以跌破就放空,如果是長線投資的話,很可能是個低接的買點(因為過去十幾年的交易經驗告訴我,股市作多好像比較容易,跌破支撐就作多的勝算滿高的)
以上僅供教學使用,程式碼皆為範例,請勿直接使用於交易。
後記:
程式碼都提供了,有點基礎的人稍加濾網,要寫出個策略應該很容易了。大家自己研究研究吧。就不再提供策略程式碼了。
●CME的日圓期貨,回測如下:
手續費及滑價:每口USD$15
交易期間:2007/3/13~2019/10/18 (資料經修正換月價差)
K棒週期:120分K (24/7)
●台指期(TXF),回測如下:
手續費及滑價:每口$500
交易期間:1998/7/22~2019/10/18 (修正換月價差)
K棒週期:120分K (08:45~13:45)
交易期間:1998/7/22~2019/10/18 (修正換月價差)
K棒週期:120分K (08:45~13:45)
0 留言:
張貼留言
如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!