EasyTrader ArtNo 171
參閱 布林通道壓縮噴出策略 先依內容建立指標作觀察{ 布林通道寬度指標}
input:BarNo(20),Sueeze(300),StdMulti(4) ;
Vars: BandWidth(0) ;
BandWidth = StdDev(Close,BarNo)*StdMulti ;
Plot1(BandWidth,"BandWidth") ;
Plot2(Sueeze,"Sqeeze") ;
{ % BBand 指標 }
input:BarNo(60),HB(1),MB(0.5),LB(0) ;
Value1 = StdDev(Close,20) ;
Value2 = (Close-(Average(Close,20)-2*Value1))/(Value1*4) ;
Plot1(Value2,"%B") ;
Plot2(HB,"HB") ;
Plot3(MB,"MB") ;
Plot4(LB,"LB") ;
策略程式碼
input:EntryType(1),ExitType(1);
inputs:LongLen(20),Multi_L(4),CheckBar_L(10),Ratio_L(0.8),ShortLen(20),Multi_S(4),CheckBar_S(10),Ratio_S(0.8),SqueezeL(0.07),SqueezeS(0.07) ;
input:NBarL(2),NbarS(2),TradeProfit(0.019),TradeStopLoss(0.017),ATRs_L(19),ATRs_S(7) ;
Vars: SQZ_L(0),Pnt_L(0),Setup_L1(false),Setup_L2(false),SQZ_S(0),Pnt_S(0),Setup_S1(false),Setup_S2(false) ;
Vars:Exit_L(0),Exit_S(0),EntryL(false),EntryS(false) ;
vars:isBalanceDay(false),MP(0),PL(0),PF(0) ;
if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;
PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;
MP = MarketPosition ;
{ 計算多空通道寬度 }
SQZ_L = StdDev(Close,LongLen)* Multi_L ;
SQZ_S = StdDev(Close,ShortLen)* Multi_S ;
{ 計算收盤價在通道中的位階 }
if SQZ_L <> 0 then Pnt_L = (Close-(Average(Close,LongLen)-Multi_L*0.5))/SQZ_L ;
if SQZ_S <> 0 then Pnt_S = (Close-(Average(Close,ShortLen)-Multi_S*0.5))/SQZ_S ;
{ 設定收盤價在上下通道中的持續時間 }
Setup_L1 = Countif(Pnt_L >= 0.5 and Pnt_L <= 1 , CheckBar_L ) >= CheckBar_L * Ratio_L ;
Setup_L2 = Countif(Pnt_L >= 0 and Pnt_L <= 0.5 , CheckBar_L ) >= CheckBar_L * Ratio_L ;
Setup_S1 = Countif(Pnt_S >= 0.5 and Pnt_S <= 1 , CheckBar_S ) >= CheckBar_S * Ratio_S ;
Setup_S2 = Countif(Pnt_S >= 0 and Pnt_S <= 0.5 , CheckBar_S ) >= CheckBar_S * Ratio_S ;
if EntryType = 1 then Begin
{ 當通道壓縮到某定值 - 以收盤價的百分比作計算 , 且符合 SetUp_L1 SetUp_L2 條件作多}
if SQZ_L < Close*SqueezeL and (Setup_L1 or SetUp_L2) then Begin
Buy next bar at Highest(High,3) stop ;
Exit_L = Average(Low,CheckBar_L) ;
End;
{ExitLong next bar at Exit_L stop ;}
{ 當通道壓縮到某定值 - 以收盤價的百分比作計算 , 且符合 SetUp_S1 SetUp_S2 條件作空}
if SQZ_S < Close*SqueezeS and (Setup_S1 or SetUp_S2) then Begin
Sell next bar at Lowest(Low,3) stop ;
Exit_S = Average(High,CheckBar_S) ;
End;
{ExitShort next bar at Exit_S stop ;}
End;
if EntryType = 2 then Begin
{ 另一種思維,單純突破壓縮值即作多或作空 }
if SQZ_L Cross over Close*SqueezeL then EntryL = true ;
if MP <> 0 then EntryL = false ;
if SQZ_L Cross under Close*SqueezeL then EntryL = false ;
if EntryL then Begin
Buy next bar at Highest(High,3) stop ;
Sell next bar at Lowest(Low,3) stop ;
Exit_L = Average(Low,CheckBar_L)[1] ;
end ;
{ExitLong next bar at Exit_L 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
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
{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;
{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;
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 then setExitonClose ;
台指期 60分K 留倉 2004/5/31 ~ 2014/5/30 交易成本 1200
台指期 30分K 留倉 2004/5/31 ~ 2014/5/30 交易成本 1200
台指期 30分K 留倉 2004/5/31 ~ 2014/5/30 交易成本 1200 + 如意多空網
MagicQS093
請問MagicQS093可以用mc使用嗎
回覆刪除買賣指令是TS2000i的語法,改一下就可以在MC編譯
回覆刪除Buy—>Buy
Sell—>sellshort
ExitLong—>Sell
ExitShort—>BuyToCover