/*[[ Name := MA-ENV cross system Author := TR (Modified from Smokey's 2EMA system) MA/Env Modes: 1=SMA 2=EMA 3=Smoothed 4=LWMA(wma) Link := http://www.company.com/ Notes := 2 ema I use 5 minute on EUR Update on every tick := Yes Positions := Long & Short Enable Alerts := Yes Disable alert once hit := No Lots := 1 Stop Loss := 50 Take Profit := 360 Trailing Stop := 0 ]]*/ Defines: MAperiods(300), MAmode(1), EnvPeriods(30), EnvMode(2), EnvDev(0.2), MA_Env_Crossbars(3), PsarStep(0.02), PsarMax(0.2), PsarBars(6), TsATRmultiplier(5.5), SecondsBetweenOps(1800), OncePerBar(0), Slip(5), mm(0), risk(40); vars: orders(0), first(0), mode(0), cnt(0), Ilo(0), sym(0), TS(0), LastBarChecked(0), PsarCurr(0), PsarPrevX(0), MAcurr(0), MAprevX(0), EnvUpperCurr(0), EnvUpperPrevX(0), EnvLowerCurr(0), EnvLowerPrevX(0), SecondsToWait(0), LastTradeByExpert(0); Var: EntryOrderTicket(0), PositionOpen(False), LastBarWithPosOpen(0), LastOpenPositionTP(0), LastOpenPositionSL(0), EntryHitBar(0), Straddles(0), OpenBarHitSL(0); Comment("Account: ",AccNum," - ",AccName, "\n"," StopLoss ", TS, "\n"," Lots ",Ilo); If Bars=20 then SecondsToWait=SecondsBetweenOps else SecondsToWait=20; If CurTime - LastTradeByExpert < SecondsToWait Then Exit; If OncePerBar=1 and LastBarChecked = Time[0] then Exit Else LastBarChecked = Time[0]; if IsTesting then { EntryOrderTicket = 0; PositionOpen = False; For cnt=1 to TotalTrades Begin If (OrderValue(cnt,VAL_TYPE)=OP_BUYSTOP OR OrderValue(cnt,VAL_TYPE)=OP_SELLSTOP) AND OrderValue(cnt,VAL_SYMBOL)=Symbol then EntryOrderTicket = OrderValue(cnt,VAL_TICKET); If (OrderValue(cnt,VAL_TYPE)=OP_BUY OR OrderValue(cnt,VAL_TYPE)=OP_SELL) AND OrderValue(cnt,VAL_SYMBOL)=Symbol then { PositionOpen = True; LastOpenPositionTP=OrderValue(cnt,VAL_TAKEPROFIT); LastOpenPositionSL=OrderValue(cnt,VAL_STOPLOSS); }; End; if PositionOpen = True then { LastBarWithPosOpen=time[0]; If EntryHitBar=0 then EntryHitBar=time[0] Else If EntryHitBar=time[1] then //If position opened in previous bar (and still open) { If LastOpenPositionTP>LastOpenPositionSL then { If l[1]-point*5 <= LastOpenPositionSL then //If bar where position was opened reached SL { OpenBarHitSL++; Alert("Straddles: ",Straddles," OpenBarHitSL: ",OpenBarHitSL); }; } Else { If h[1]+point*5 >= LastOpenPositionSL then { OpenBarHitSL++; Alert("Straddles: ",Straddles," OpenBarHitSL: ",OpenBarHitSL); }; } EntryHitBar=1; //Just so that it's ignored until position is closed and EntryHitBar is reset to 0 below }; } Else If LastBarWithPosOpen = time[1] then { If LastOpenPositionTP>LastOpenPositionSL then { If h[1]+point*5 >= LastOpenPositionTP and l[1]-point*5 <= LastOpenPositionSL then //If bar where position was closed reached both SL and TP { Straddles++; Alert("Straddles: ",Straddles," OpenBarHitSL: ",OpenBarHitSL); }; } Else { If h[1]+point*5 >= LastOpenPositionSL and l[1]-point*5 <= LastOpenPositionTP then { Straddles++; Alert("Straddles: ",Straddles," OpenBarHitSL: ",OpenBarHitSL); }; } LastBarWithPosOpen=0; EntryHitBar=0; }; }; /**********************************Money and Risk Management*************************************** Changing the value of mm will give you several money management options mm = 0 : Single 1 lot orders. mm = -1 : Fractional lots/ balance X the risk factor.(use for Mini accts) mm = 1 : Full lots/ balance X the risk factor up to 100 lot orders.(use for Regular accounts) *************************************************************************************************** RISK FACTOR: risk can be anything from 1 up. Factor of 5 adds a lot for every $20,000.00 added to the balance. Factor of 10 adds a lot with every $10.000.00 added to the balance. The higher the risk, the easier it is to blow your margin.. **************************************************************************************************/ if mm < 0 then { Ilo = ceil(Balance*Risk/10000)/10; If Ilo > 100 then { Ilo = 100; } } else { Ilo = lots; }; if mm > 0 then { Ilo = ceil(Balance*Risk/10000)/10; If Ilo > 1 then { Ilo = ceil(Ilo); } if Ilo < 1 then { Ilo = 1; } If Ilo > 100 then { Ilo = 100; } }; //------------------------------------------------------------------------------------------------ PsarCurr=iSAR(PsarStep,PsarMax,0); PsarPrevX=iSAR(PsarStep,PsarMax,PsarBars); // MA/Env Modes: 1=SMA 2=EMA 3=Smoothed 4=LWMA(wma) Switch MAmode Begin Case 1: MAcurr=iMA(MAperiods,MODE_SMA,0); MAprevX=iMA(MAperiods,MODE_SMA,MA_Env_Crossbars); Case 2: MAcurr=iMA(MAperiods,MODE_EMA,0); MAprevX=iMA(MAperiods,MODE_EMA,MA_Env_Crossbars); Case 3: MAcurr=iMA(MAperiods,MODE_SMMA,0); MAprevX=iMA(MAperiods,MODE_SMMA,MA_Env_Crossbars); Case 4: MAcurr=iMA(MAperiods,MODE_LWMA,0); MAprevX=iMA(MAperiods,MODE_LWMA,MA_Env_Crossbars); End; // MA/Env Modes: 1=SMA 2=EMA 3=Smoothed 4=LWMA(wma) Switch EnvMode Begin Case 1: EnvUpperCurr=iEnvelopes(EnvPeriods,MODE_SMA,EnvDev,PRICE_CLOSE,MODE_UPPER,0); EnvUpperPrevX=iEnvelopes(EnvPeriods,MODE_SMA,EnvDev,PRICE_CLOSE,MODE_UPPER,MA_Env_Crossbars); EnvLowerCurr=iEnvelopes(EnvPeriods,MODE_SMA,EnvDev,PRICE_CLOSE,MODE_LOWER,0); EnvLowerPrevX=iEnvelopes(EnvPeriods,MODE_SMA,EnvDev,PRICE_CLOSE,MODE_LOWER,MA_Env_Crossbars); Case 2: EnvUpperCurr=iEnvelopes(EnvPeriods,MODE_EMA,EnvDev,PRICE_CLOSE,MODE_UPPER,0); EnvUpperPrevX=iEnvelopes(EnvPeriods,MODE_EMA,EnvDev,PRICE_CLOSE,MODE_UPPER,MA_Env_Crossbars); EnvLowerCurr=iEnvelopes(EnvPeriods,MODE_EMA,EnvDev,PRICE_CLOSE,MODE_LOWER,0); EnvLowerPrevX=iEnvelopes(EnvPeriods,MODE_EMA,EnvDev,PRICE_CLOSE,MODE_LOWER,MA_Env_Crossbars); Case 3: EnvUpperCurr=iEnvelopes(EnvPeriods,MODE_SMMA,EnvDev,PRICE_CLOSE,MODE_UPPER,0); EnvUpperPrevX=iEnvelopes(EnvPeriods,MODE_SMMA,EnvDev,PRICE_CLOSE,MODE_UPPER,MA_Env_Crossbars); EnvLowerCurr=iEnvelopes(EnvPeriods,MODE_SMMA,EnvDev,PRICE_CLOSE,MODE_LOWER,0); EnvLowerPrevX=iEnvelopes(EnvPeriods,MODE_SMMA,EnvDev,PRICE_CLOSE,MODE_LOWER,MA_Env_Crossbars); Case 4: EnvUpperCurr=iEnvelopes(EnvPeriods,MODE_LWMA,EnvDev,PRICE_CLOSE,MODE_UPPER,0); EnvUpperPrevX=iEnvelopes(EnvPeriods,MODE_LWMA,EnvDev,PRICE_CLOSE,MODE_UPPER,MA_Env_Crossbars); EnvLowerCurr=iEnvelopes(EnvPeriods,MODE_LWMA,EnvDev,PRICE_CLOSE,MODE_LOWER,0); EnvLowerPrevX=iEnvelopes(EnvPeriods,MODE_LWMA,EnvDev,PRICE_CLOSE,MODE_LOWER,MA_Env_Crossbars); End; orders=0; For cnt=1 to TotalTrades begin If Ord(cnt,Val_Symbol)=Symbol then { orders++; }; End; If orders=0 then { if MAprevXEnvLowerCurr & PsarPrevXO then { SetOrder( OP_SELL, ILO, Bid, Slip, Bid+Stoploss*Point, Bid-TakeProfit*Point, Red); LastTradeByExpert=Curtime; Exit; }; if MAprevX>EnvUpperPrevX & MAcurrO[PsarBars] & PsarCurr(TS)then { If Ord(sym,VAL_STOPLOSS)<(Bid-TS) then { ModifyOrder( Ord(sym,VAL_TICKET), Ord(sym,VAL_OPENPRICE), Bid-TS, Ord(sym,VAL_TAKEPROFIT), LimeGreen); LastTradeByExpert=Curtime; Exit; }; }; }; If mode=OP_SELL & OrderValue(sym,VAL_SYMBOL)=Symbol then { If (Ord(sym,VAL_OPENPRICE)-Ask)>(TS) then { If Ord(sym,VAL_STOPLOSS)>(Ask+TS) then { ModifyOrder( Ord(sym,VAL_TICKET), Ord(sym,VAL_OPENPRICE), Ask+TS, Ord(sym,VAL_TAKEPROFIT), HotPink); LastTradeByExpert=Curtime; Exit; }; }; }; }; End;