由 醜媳婦總是要見公婆-績效報表 的最佳化報表可知,無論我們將連續創高或創低的K棒數如何改變,均不可能讓淨利變正,代表我們不可能靠單一個指標值來獲利,此時改善方式只能再回到觀察圖表,由圖表中的訊號觀察是否有什麼改善方式。
由圖表中可發現當標示的紅點或綠點離均線越遠,則進場的時機點越好,如果可以增加一個乖離率的濾網(一個濾網代表著一個條件判斷),應該可以改善策略的績效。
話不多說,立刻新增一個「_Bias」的函式及指標來觀察這現象(新增函式及指標的作法請參閱MultiCharts初體驗-函式撰寫、MultiCharts初體驗-指標撰寫),由於乖離率並非MC內建的函式,我們需要自行撰寫,首先說明一下乖離率的定義:
乖離率(Bias Ratio, BIAS)是股票技術分析中的一個指標。它衡量了股價與移動平均線之間的偏離程度,即當前股價與移動平均線的差值(移動平均線是指一定時間內的股價平均值)。乖離率用來評估當前股價相對於移動平均線的偏離程度,主要用於分析短期內股票是否處於超買或超賣狀態的技術指標。
其公式如下:
乖離率 = (收盤價 - 移動平均) / 移動平均 * 100 (以百分比表示)
以下是函式及指標的程式碼:
函式(_Bias)的程式碼:
Inputs:Len(NumericSimple), ComparePrice(NumericSeries);
Variable:AvgValue(0);
AvgValue = Average(Close, Len);
_Bias = (CompareValue - AvgValue) / AvgValue * 100;
指標(_Bias)的程式碼:
Inputs: Len(5), CompareValue(Close);
Variables: Bias(0);
Bias = _Bias(Len, CompareValue);
Plot1(Bias);
在設計乖離率的函式時,筆者多加了一個彈性,在其定義是評估收盤價的偏離程度,而筆者寫的函式預留了一個CompareValue的參數,可傳入High、Low、Close⋯⋯等不同的欄位(在MC中定義成數值序列),來計算不同欄位與收盤價移動平均的偏離程度,這種設計方式,可在訊號撰寫時,放空時,可選擇高點的乖離率,做多時,可選擇低點的乖離率,來與均用收盤價的乖離率進行比較,看何者的績效比較好。
由乖離率對照,當偏離程度較大時再進場,的確可改善進場的時機,我們就將乖離率的判斷加進訊號中,先以簡單的收盤價乖離率判斷。
Inputs: BarCount(5), BiasLen(20), BiasThreadhold(1);
Variables: BiasValue(0);
BiasValue = _Bias(BiasLen, Close);
If _ContinueBreakOut(BarCoun, 1) And (BiasValue > BiasThreadhold) Then
Begin
SellShort ("SE_BreakOut") Next Bar Open;
End;
If _ContinueBreakOut(BarCoun, -1) And (BiasValue < -BiasThreadhold) Then
Begin
Buy ("LE_BreakOut") Next Bar Open;
End;
訊號中,加入二個輸入參數,說明如下:
訊號的邏輯也還很簡單
由績效報表可發現只是加個簡單的條件判斷,淨利就馬上有顯著的提升(此報表以訊號的參數預設值),依筆者的經驗,會賺錢的訊號通常不會有太複雜的條件,簡單直接往往可以得到最好的結果,太複雜的條件判斷,常會削足適履,在樣本內的績效很好,但加入了樣本外區間後,績效往往不如預期。