EasyTrader TestNo 014
參考文章 日內動量指標 (Intraday Momentum Index)
// Public Variable
vars:MP(0),PF(0),PL(0),DayLast(1345),NightLast(0500),BuyPrice(0),ShortPrice(0),BasePF(150),BasePL(100),FilterA(0),FilterB(0) ;
vars:BarPass(5),HLRange(0),WinPoint(0),HBarPos(0),LBarPos(0),ExitH(0),ExitL(0),TimeOK(false),EntryExitCond(false),SelectNo(0) ;
//****************** Basic Setup ****************************************
MP = MarketPosition ;
if MP <> 0 then Begin
PF = EntryPrice*TradeProfit ;
PL = EntryPrice*TradeStopLoss ;
end else begin
PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;
end ;
// 依據目前指數來設定最大停利與停損點數
if Close > 10000 then begin
BasePF = BasePF+IntPortion((Close-10000)/1000)*30 ;
BasePF = MinList(BasePF,450) ;
BasePL = BasePL+IntPortion((Close-10000)/1000)*15 ;
BasePL = MinList(BasePL,225) ;
end ;
PF = MinList(PF,BasePF) ;
PL = MinList(PL,BasePL)*iff(CurrentContracts=1,1,0.67) ;
// ************ High/Low data *****************
BarPass = MaxList(HBar,LBar) ;
// ************ for week High/Low box *****************
Vars:WH(0),WL(0);
WH = 近週高點;
WL = 近週低點 ;
// ************ for Day High/Low box *****************
Vars:DayLong(5),DayShort(5),DH(0),DL(0),HLDay(0),DCount(0) ;
DH = 近日高點;
DL = 近日低點 ;
if BarNumber = 1 then begin
Buy this bar on Close ;
Sell this bar on Close ;
end ;
// ************* Time Set Up *************
TimeOK = ((time >= 1000 and time <= 2100)) or (time >= 0300 and time <= 0500 ) ;
//***************** BuyPrice & ShortPrice Setup *****************
BuyPrice = DH-Range ;
ShortPrice = WL ;
// ********** Main Strategy *********
vars:CandleBarNo(0),CandleHL(0),SumBar(0),SumIMI(0),IMI(0),IMIPlus(0),Strength(0);
CandleBarNo = MaxList(IntPortion(BarPass*1.6),25) ;
//計算區間平均動量
SumBar = Summation(AbsValue(Close-Open),CandleBarNo) ;
if SumBar <> 0 then IMI = (Summation(iff(Close > Open ,Close-Open,0),CandleBarNo)/SumBar)*100 ;
//計算區間上漲動量
SumIMI = Summation(AbsValue(IMI-50),CandleBarNo) ;
IMIPlus = Summation(iff((IMI-50)>0,(IMI-50),0),CandleBarNo) ;
if SumIMI <> 0 then Strength = IMIPlus/SumIMI * 100 ;
if TimeOK then begin
//動量強度大於50 且收盤價突破特定價格 進場做多
if MP <> 1 and Strength > MaxList(HighBand*4,50) and Close < BuyPrice then
Buy ("LE_IMI_2T") next bar at BuyPrice stop ;
//動量強度小於50 且收盤價跌破特定價格 進場做空
if MP <> -1 and Strength < MinList(LowBand*4,50) and Close > ShortPrice then
SellShort ("SE_IMI_2T") next bar at ShortPrice stop ;
end ;
//基本停利+移動停損出場
// ************* Base Exit *************
if MP > 0 then Sell ("PL1_"+NumtoStr(PL,0)) next bar at HighSinceEntry-PL stop ;
if MP > 0 then Sell ("PF1_"+NumtoStr(PF,0)) next bar at EntryPrice+PF limit ;
if MP < 0 then BuytoCover ("PL2_"+NumtoStr(PL,0)) next bar at LowSinceEntry+PL stop ;
if MP < 0 then BuytoCover ("PF2_"+NumtoStr(PF,0)) next bar at EntryPrice-PF limit ;
//進場後部位虧損大於預期則反手單進場
if MP > 0 and (BarsSinceEntry <= 300/Barinterval and maxpositionloss/currentcontracts < -20000)
then Sellshort ("WrongEntryL8") next bar at Close stop ;
// ************* rev N Day trade Exit *************
//收盤價自近日高點回落一段距離 再次突破該價格 反手做多
if MP < 0 and Close < DH-(HLday*FracA*0.1) then
buy ("rLX_DTrade1") next bar at DH-(HLday*FracA*0.1)+Range Stop ;
//收盤價自近日低點反彈一段距離 再次跌破該價格 反手做空
if MP > 0 and Close > DL+(HLday*FracB*0.1) then
sellshort ("rSX_DTrade1") next bar at DL+(HLday*FracB*0.1)-Range Stop ;
//結算日出場
if _IsSettlementDay and time >= CalcTime(1300,-1*BarInterVal) and Time <= 1330 then begin
if MP > 0 then Sell ("LX_Bal") next bar at market ;
if MP < 0 then BuyToCover ("SX_Bal") next bar at market ;
end;
台指期 留倉 交易週期 2018/1/1 ~ 2022/12/31 交易成本 1200
沒有留言:
張貼留言