2015年3月30日 星期一

●指標組合 SAR 與成交量 [程式碼]

EasyTrader ArtNo 257
     本指標由威爾德所發明,這個指標的英文名稱為 Stop And Reverse,所以簡稱為SAR,依字面的意思是指<停止並轉向>之意。所謂的停止是兼指<停損>及<停利>兩者都有,如果只譯為<停損點反向>指標,則有未盡其義之憾。威爾德又將這個指標稱為「抛物線(Parabolic) SAR指標」,是因為這個指標畫出的形狀像抛物線。基本上SAR的指標值受股價及時間的影響,所以是屬於價格與時間並重之順勢操作系統。
內建函數公式中需注意的兩個重要參數,第一個是AF加速因子, 係以0.02為起始值,若在漲勢中,股價只要有創新高(以今天最高價高於昨天最高價為準),則AF值每次增加0.02,唯其最高上限值為0.2,當AF值到0.2時,爾後即使股價再創新高,其AF值還是以0.2代入計算。若是在跌勢中,股價只要有創新低(以今天最低價低於昨天最低價為準),則AF值每次亦增加0.02,同樣以0.2為上限,即使之後股價再創新低,亦以0.2代入計算。
第二個參數是到昨天為止的區間極值,這個數字是每一個波段到昨天為止的最高點(漲勢時),或是最低點(跌勢時),所以這個數字是經常在變化的。特別要注意的是,當SAR發生轉折時,亦即從上升變下跌,或從下跌變上升時,則SAR在反轉日的值,是直接以昨天的區間極值代入。
SAR指標的轉折點的決定是這樣的,在上升波段時,股價應該都是位於SAR上方的,一旦出現當日收盤價低於SAR指標時,那麼當日就是反轉的賣出點。請注意SAR值的計算公式當中,全部都是到昨天為止的數字,因此今天的反轉價位在哪裡,在開盤前就已經一清二楚。所以理論上在收盤前我們就可以進行反向操作。意思就是您當天就可以出清多頭部位,甚至反手作空。多空可以在同一日內完成,故而才說是「反向操作系統」。
資料來源: MoneyDJ 財經知識庫 
本篇介紹的交易系統是在 SAR轉向時一併考慮成交量的近期均量值是否被突破,也是量先價行的觀念也加入,從下圖中可以看到有一定的相依關係


測試程式碼
input:EntryType(1),ExitType(5);
inputs:NBarL(30),NBarS(27),TradeProfit(0.02),TradeStopLoss(0.02),ATRs_L(5),ATRs_S(5);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);

inputs: AccFact(0.03),VolAvg(7),SetupLen(5),HighBar(3),LowBar(3);
Vars: RevPoint(0),VAvg(0),BuySetup(False),SellSetup(False),BSFlag(False),BSP(0),SSFlag(False),SSP(0);

MP = MarketPosition ;
if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

{計算 SAR值與平均成交量}
RevPoint = Parabolic(AccFact)[1];
VAvg = Average(iff(DataCompression > 1 ,Volume,Ticks), VolAvg);

{設定進場條件}
BuySetup = High Crosses Above RevPoint AND iff(DataCompression > 1 ,Volume,Ticks) > VAvg;
SellSetup = Low Crosses Below RevPoint AND iff(DataCompression > 1 ,Volume,Ticks) > VAvg;

{Setup}
IF BuySetup Then Begin
BSFlag = True;
BSP = RevPoint[1];
End;

IF SellSetup Then Begin
SSFlag = True;
SSP = RevPoint[1];
End;

{在買方條件成立後 , N根K棒內以近期高價突破進場作多}
IF MP <> 1 and MRO(BuySetup, SetupLen, 1) <> -1 AND BSFlag Then Begin
Buy Next Bar at Highest(High,HighBar) Stop;
End;

{在賣方條件成立後 , N根K棒內以近期低價跌破進場作空}
IF MP <> -1 and MRO(SellSetup SetupLen, 1) <> -1 AND SSFlag Then Begin
Sell Next Bar at Lowest(Low,LowBar) Stop;
End;

{出場規則}
if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;

if ExitType = 2 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
end;

if ExitType = 3 then Begin
if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if ExitType = 4 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
if MP > 0 and BarsSinceEntry = NBarL then {Sell } ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then {Buy} ExitShort next bar at Market ;
end;

if ExitType = 5 then Begin
{*******************************************************************
Description : ATR Trailing Stop Long Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{Inputs: ATRs_L(3);}
Variables: PosHigh(0), ATRVal_L(0);
ATRVal_L = AvgTrueRange(10) * ATRs_L;
If BarsSinceEntry = 0 Then PosHigh = High;

If MarketPosition = 1 Then Begin
If High > PosHigh Then PosHigh = High;
ExitLong ("ATR") Next Bar at PosHigh - ATRVal_L Stop;
End else ExitLong ("ATR eb") Next bar at High - ATRVal_L Stop;

{*******************************************************************
Description : ATR Trailing Stop Short Exit
Provided By : Omega Research, Inc. (c) Copyright 1999
********************************************************************}
{Inputs: ATRs_S(3);}
Variables: PosLow(0), ATRVal_S(0);
ATRVal_S = AvgTrueRange(10) * ATRs_S;
If BarsSinceEntry = 0 Then PosLow = Low;

If MarketPosition = -1 Then Begin
If Low < PosLow Then PosLow = Low;
ExitShort ("ATR_1") Next Bar at PosLow + ATRVal_S Stop;
End else ExitShort ("ATR_1 eb") Next bar at Low + ATRVal_S Stop;
end;

if IsBalanceDay or date = 1150224 then setExitonClose ;
台指期 30 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200


台指期 60 min K 留倉 交易期間 2004/12/31 ~ 2014/12/31 交易成本 1200

3 留言:

風中的帆 提到...

請問回測參數是否有改變 我回測同時間卻得不出大大的績效 麻煩給予指導 謝謝

Unknown 提到...

請問編譯後出現------ 已编译但有错误: ------
syntax error, expecting 'bars'
错误行 39, 错误列 30
(本人用8.8版本)謝谢!

Unknown 提到...

28.IF SellSetup Then Begin
29.SSFlag = True;
30.SSP = RevPoint[1];
31.End;

{???????? , N?K?????????????}
34.IF MP <> 1 and MRO(BuySetup, SetupLen, 1) <> -1 AND BSFlag Then Begin
35.Buy Next Bar at Highest(High,HighBar) Stop;
36.End;

{???????? , N?K?????????????}
39.IF MP <> -1 and MRO(SellSetup SetupLen, 1) <> -1 AND SSFlag Then Begin
40.Sell Next Bar at Lowest(Low,LowBar) Stop;
41.End;


....

張貼留言

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

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