2013年8月9日 星期五

●三重濾網策略(含程式碼)-by Eagle

     搭配不同週期在同一個視窗撰寫成策略, 這個觀念在很多國外的書中都有提到,因此我認為是一個值得學習的方向。說穿了邏輯很簡單,就是利用長週期的K線判定趨勢,再利用短週期的K線判斷進出場點位。下面是網友Eagle提供的TS歷史回測及策略開放程式碼,透過這個程式碼,希望讀者可以學會簡易多週期的語法。






原始程式碼(TS格式):


inputs: TradeProfit(0.04),TradeStopLoss(0.01) ;
Inputs: OverBought(95),OverSold(5),BuyLength(35),SellLength(45);
vars: IsBalanceDay(False),MP(0),KB(0),KS(0);

if DayOfMonth(Date) > 14 and DayOfMonth(Date) < 22 and DayOfWeek(Date)= 3 then IsBalanceDay = True else IsBalanceDay =False ;
MP = MarketPosition ;

{ ----- Preparation of Trade Setup -----}
{------- 1st Time Frame 60 min ------}
Condition1 = Macd(Close,12,26) of Data3 > Macd(Close,12,26)[1] of Data3 ;
Condition2 = Macd(Close,12,26) of Data3 < Macd(Close,12,26)[1] of Data3 ;

{------- 2nd Time Frame 12 mim ------}
Condition3 = FastK(9) of Data2 < OverBought and SlowD(9)of Data2 < OverBought ;
Condition4 = FastK(9) of Data2 > OverSold and SlowD(9)of Data2 > OverSold ;

{------- 3rd Time Frame 5 minutes ------}
Condition5 = Close of Data1 > Average(Close of Data1,BuyLength) ;
Condition6 = Close of Data1 < Average(Close of Data1,SellLength) ;

if Date <> Date[1] then Begin
KB = 0 ;
KS = 0 ;
end;

if (KB+KS)< 1 then Begin
if Condition1 and Condition3 and Condition5 and KB < 1 then Begin
Buy ("LB") at Market;
KB = KB +1 ;
end;

if Condition2 and Condition4 and Condition6 and KS < 1 then Begin
Sell ("SS") at Market;
KS = KS +1 ;
end;
end;

if MP > 0 then Begin
if MP > 0 and High > EntryPrice*(1 + TradeProfit) then ExitLong at EntryPrice*(1 + TradeProfit) stop;
if MP > 0 and Low < EntryPrice*(1 - TradeStopLoss) then ExitLong at EntryPrice *(1- TradeStopLoss) stop;
end;

{ ----- Exit of Short Trade -----}

if MP < 0 then Begin
if MP < 0 and Low < EntryPrice*(1 - TradeProfit) then ExitShort at EntryPrice*(1 - TradeProfit) stop;
if MP < 0 and High > EntryPrice*(1 + TradeStopLoss) then ExitShort at EntryPrice*(1 + TradeStopLoss) stop;
end;
{ ----- Balance on DayClose -----}

if MP <> 0 and time > 1335 then Begin
if MP > 0 then exitlong at market;
if MP < 0 then exitshort at market;
end;
{ ----- Balance on Monthly BalanceDay -----}
if IsBalanceDay then Begin
if MP <> 0 and time= 1315 then Begin
if MP > 0 then ExitLong at market ;
if MP < 0 then ExitShort at market ;
end ;
end;

0 留言:

張貼留言

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

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