TradeStarTrend[EA]

Author: Copyright � 2006, Yannis
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open time of each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
Indicators Used
Movement directional indexStandard Deviation indicator
Miscellaneous
It sends emails
0 Views
0 Downloads
0 Favorites
TradeStarTrend[EA]
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+-----------------------------------------------------------------------------+
//|                                                      TradeStarTrend[EA].mq4 |
//|                                                    Copyright © 2006, Yannis |
//|                                                         All rights reserved |
//| Special Thanks to :                                                         |
//|    Todd Geiger for the initial version of star trend ea         (atp.1.mq4) |
//|    Geir Laastad for his help on gls-startrend           (GLS-StarTrend.ex4) |
//|    Shimodax, Mr Pip and Perky for std deviation limit code          (juice) |
//+-----------------------------------------------------------------------------+
#property copyright "Copyright © 2006, Yannis"
#property link      "jsfero@otenet.gr"
//+-----------------------------------------------------------------------------+
//|                       TradeStarTrend[EA] v1.10                              |
//+-----------------------------------------------------------------------------+

//+----------------------User interface-----------------------------------------+
extern string  Star_Trend_Options="--------------------------";
extern int     Trigger.Period=60;                                 // gls-startrend trigger time frame
extern int     Filter.Period.1=240;                               // gls-startrend first filter time frame.
                                                                  //     If set = to Trigger.Period the ea trades on 1 indicator only
extern int     Filter.Period.2=1440;                              // gls-startrend second filter time frame - can be optional
extern bool    Entry.On.Yellow=true;                              // enter a position if yellow appears on any t/f
extern bool    Exit.On.Yellow=true;                               // exit a position if yellow appears on t/f specified below and all t/f above that
extern int     Exit.On.Yellow.Period=60;                          // t/f for yellow change exit
extern bool    Use.Only.First2.Indicators=false;                  // if true, entries and exits will be based on trigger.period and filter.period.1 only
extern string  SL_TP_Trail_Options="--------------------------";
extern int     StopLoss.Pips=80;                                  // static, initial s/l. Unused if Use.Adr.for.sl.pips = true
extern int     TakeProfit.Pips=300;                               // static, initial take profit
extern int     Trail.Pips=50;                                     // trail.pips. Unused if Use.Adr.for.sl.pips=true or if value=0
extern bool    Trail.Starts.After.BreakEven=false;                // if true trailing will start after a profit of "Move.To.BreakEven.at.pips" is made
extern int     Move.To.BreakEven.at.pips=35;                      // trades in profit will move to entry price + Move.To.BreakEven.Lock.pips
                                                                  // as soon as trade is at entry price + Move.To.BreakEven.at.pips
extern int     Move.To.BreakEven.Lock.pips=1;
extern int     Move.Trail.Every.xx.Pips=0;                        // If > 0 then ALL other s/l are dropped and trail will only move by
                                                                  // Trail.Pips amount for every "Move.Trail.Every.Pips" in profit

extern bool    Use.ADR.for.SL.pips=false;                         // if true s/l and trail according to average daily range and tsl.divisor
extern double  tsl.divisor=0.40;
extern string  Lot_Money_Management="--------------------------";
extern bool    Use.Money.Management=false;
extern double  Minimum.Lot=0.1;
extern double  MaximumRisk=0.03;
extern int     Lot.Margin=50;
extern int     Magic=2006;
extern string  Trading_Hours_Options="--------------------------";
extern bool    Use.Trading.Hours.Restriction = false;             // time filter. if true, expert will open new orders only between
extern int     Start.Trading.Hour.Begin=0;                        // Start.Trading.Hour.Begin and Start.Trading.Hour.End
extern int     Start.Trading.Hour.End=24;
extern string  Juice_Options="--------------------------";
extern bool    Use.Juice=false;                                   // if true, std deviation limit will be used as filter (know as Juice indicator)
extern int     Juice.TimeFrame=5;                                 // time frame for juice. Should be in accordance with trigger.period
extern int     Juice.Period=7;                                    // Juice Period
extern int     Juice.Level=4;                                     // Juice Threshold level used for the filtering
extern string  ADX_Option="--------------------------";
extern bool    Use.Adx= false;                                    // if true, Avereage Directional Movement Index (ADX) MAIN LINE will be used as filter
extern int     Adx.TimeFrame= 5;                                  // time frame on which to evaluate ADX
extern int     Adx.Period=14;                                     // ADX Period
extern int     Adx.Threshold=20;                                  // ADX Main Line threshold value used for the filtering

//+---------------------- Global Variables Definition --------------------------------------+
int b.ticket, s.ticket,slip, TodaysRange;
string DR, DR1, comment=" TST v1.10",ScreenComment="TradeStarTrend[EA] v1.10";
double avg.rng, rng, sum.rng, x;
int Trig_1_Green, Trig_1_MediumSeaGreen, Trig_1_Red, Trig_1_LightCoral, Trig_1_Yellow;
int Trig_2_Green, Trig_2_MediumSeaGreen, Trig_2_Red, Trig_2_LightCoral, Trig_2_Yellow;
int Per1_1_Green, Per1_1_MediumSeaGreen, Per1_1_Red, Per1_1_LightCoral, Per1_1_Yellow;
int Per1_2_Green, Per1_2_MediumSeaGreen, Per1_2_Red, Per1_2_LightCoral, Per1_2_Yellow;
int Per2_1_Green, Per2_1_MediumSeaGreen, Per2_1_Red, Per2_1_LightCoral, Per2_1_Yellow;
int Per2_2_Green, Per2_2_MediumSeaGreen, Per2_2_Red, Per2_2_LightCoral, Per2_2_Yellow;
bool TradingEnabled, LongTradeEnabled, ShortTradeEnabled, ShortTradeShouldClose, LongTradeShouldClose;
double ADXMain1, PlusDI1, MinusDI1, ADXMain2, PlusDI2, MinusDI2, CurrentJuice, TPPrice;


int init()
{  //HideTestIndicators(true);
   slip=(Ask-Bid)/Point;
   return(0);
}

int deinit()
{  return(0);
}

int start()
{  if (TakeProfit.Pips==0) TakeProfit.Pips=999;
   if (StopLoss.Pips  ==0) StopLoss.Pips  =999;
   if (Use.ADR.for.SL.pips)
   {  StopLoss.Pips=NormalizeDouble(Daily.Range()/Point,Digits);
   }
   x=NormalizeDouble(Daily.Range()*tsl.divisor,Digits);

   TodaysRange=MathAbs(iHigh(Symbol(),PERIOD_D1,0)-iLow(Symbol(),PERIOD_D1,0))/Point;

//+---------------------- Main Code Start ---------------------------+
   Indicator.Values    ();                      // Check gls-startrend values
   Filter.Values       ();                      // check values for other indicators / filters used
   PosCounter          ();                      // check for open positions. Sets b.ticket, s.ticket

   if (Move.To.BreakEven.at.pips!=0 && (s.ticket>0 || b.ticket>0))
   {    MoveToBreakEven();                      // Check if condition are met to move to breakeven only if have a position
   }
   if (s.ticket>0 || b.ticket>0)
   {         Trail.Stop();                      // Check if we can trail our stops if we have a position
   }
   comments();                                  // print comments on Screen

   // for CheckForOrderClosing we dont evaluate s.ticket or b.ticket as we always want this to execute
   CheckForOrderClosing();                      // Check if conditions for closing any open order based on exit rules
                                                // also sets LongTradeShouldClose and ShortTradeShouldClose that will be checked
                                                // to avoid conflict on yellow color that results in opening and closing trades at the same time

   Mail();                                      // check mail routine

   TradingEnabled=CheckIfConditionsAllowEntry();// Check if conditions are met for opening a new trade
                                                // returns 0 if no trading conditions according to filters and indicators
                                                // returns 1 if conditions for Long are met
                                                // returns 2 if conditions for Short are met

   if (TradingEnabled==1)
   {  TPPrice=NormalizeDouble(Ask+Point*TakeProfit.Pips,Digits);
   }
   else if (TradingEnabled==2)
   {  TPPrice=NormalizeDouble(Bid-Point*TakeProfit.Pips,Digits);
   }
   if (TradingEnabled==1 && !LongTradeShouldClose)
   {  b.ticket=OrderSend(Symbol(),
      OP_BUY,
      LotCalc(),
      NormalizeDouble(Ask,Digits),
      slip,
      NormalizeDouble(Ask-Point*StopLoss.Pips,Digits),
      NormalizeDouble(TPPrice,Digits),
      Period()+" min"+comment,
      Magic,0,Cyan);
      if(b.ticket>0)
      {  if(OrderSelect(b.ticket,SELECT_BY_TICKET,MODE_TRADES))
         {  Print(b.ticket);
         }
         else Print("Error Opening Buy Order: ",GetLastError());
         return(0);
      }
   }
   else if (TradingEnabled==1 && LongTradeShouldClose)
   {  // yellow indicator's value evaluation problem. We have ok for Long but at same time ok to close
      // todo => inform the user by message or display of this problem
   }
   else if (TradingEnabled==2 && !ShortTradeShouldClose)
   {  s.ticket=OrderSend(Symbol(),
      OP_SELL,
      LotCalc(),
      NormalizeDouble(Bid,Digits),
      slip,
      NormalizeDouble(Bid+Point*StopLoss.Pips,Digits),
      NormalizeDouble(TPPrice,Digits),
      Period()+" min"+comment,
      Magic,0,Magenta);
      if(s.ticket>0)
      {  if(OrderSelect(s.ticket,SELECT_BY_TICKET,MODE_TRADES))
         {  Print(s.ticket);
         }
         else Print("Error Opening Sell Order: ",GetLastError());
         return(0);
      }
   }
   else if (TradingEnabled==2 && ShortTradeShouldClose)
   {  // yellow indicator's value evaluation problem. We have ok for Short but at same time ok to close
      // todo => inform the user by message or display of this problem
   }
   return(0);
} // start
//+---------------------- Main Code End -----------------------------+



//+------------ Function and Procedures called in Main Code ---------+
void Indicator.Values()
{  Trig_1_Green            =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 0, 1); //Green.
   Trig_1_MediumSeaGreen   =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 1, 1); //MediumSeaGreen.
   Trig_1_Red              =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 2, 1); //Red.
   Trig_1_LightCoral       =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 3, 1); //LightCoral.
   Trig_1_Yellow           =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 4, 1); //Neutral Yellow.

   Trig_2_Green            =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 0, 2); //Green.
   Trig_2_MediumSeaGreen   =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 1, 2); //MediumSeaGreen.
   Trig_2_Red              =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 2, 2); //Red.
   Trig_2_LightCoral       =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 3, 2); //LightCoral.
   Trig_2_Yellow           =iCustom(NULL,Trigger.Period, "GLS-StarTrend", 4, 2); //Neutral Yellow.

   Per1_1_Green            =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 0, 1); //Green.
   Per1_1_MediumSeaGreen   =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 1, 1); //MediumSeaGreen.
   Per1_1_Red              =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 2, 1); //Red.
   Per1_1_LightCoral       =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 3, 1); //LightCoral.
   Per1_1_Yellow           =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 4, 1); //Neutral Yellow.

   Per1_2_Green            =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 0, 2); //Green.
   Per1_2_MediumSeaGreen   =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 1, 2); //MediumSeaGreen.
   Per1_2_Red              =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 2, 2); //Red.
   Per1_2_LightCoral       =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 3, 2); //LightCoral.
   Per1_2_Yellow           =iCustom(NULL,Filter.Period.1, "GLS-StarTrend", 4, 2); //Neutral Yellow.

   Per2_1_Green            =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 0, 1); //Green.
   Per2_1_MediumSeaGreen   =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 1, 1); //MediumSeaGreen.
   Per2_1_Red              =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 2, 1); //Red.
   Per2_1_LightCoral       =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 3, 1); //LightCoral.
   Per2_1_Yellow           =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 4, 1); //Neutral Yellow.

   Per2_2_Green            =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 0, 2); //Green.
   Per2_2_MediumSeaGreen   =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 1, 2); //MediumSeaGreen.
   Per2_2_Red              =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 2, 2); //Red.
   Per2_2_LightCoral       =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 3, 2); //LightCoral.
   Per2_2_Yellow           =iCustom(NULL,Filter.Period.2, "GLS-StarTrend", 4, 2); //Neutral Yellow.
}

void Filter.Values()
{  if (Use.Adx)
   {  ADXMain1=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MAIN,1);
      //MinusDI1=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MINUSDI,1);
      //PlusDI1 =iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_PLUSDI,1);
      ADXMain2=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MAIN,2);
      //MinusDI2=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MINUSDI,2);
      //PlusDI2 =iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_PLUSDI,2);
   }
   if (Use.Juice)
   {  CurrentJuice = Juice(1, Juice.Period, Juice.Level,Juice.TimeFrame);
   }
}

double Daily.Range()
{  if (DR==TimeToStr(CurTime(),TIME_DATE))
   {  return(NormalizeDouble(avg.rng,Digits));
   }
   rng=0;sum.rng=0;avg.rng=0;
   for (int i=0;i<iBars(Symbol(),1440);i++)
   {  rng=(iHigh(Symbol(),PERIOD_D1,i)-iLow(Symbol(),PERIOD_D1,i));
      sum.rng+=rng;
   }
   double db=iBars(Symbol(),1440);
   avg.rng=sum.rng/db;
   DR=TimeToStr(CurTime(),TIME_DATE);
   return (NormalizeDouble(avg.rng,Digits));
}

void PosCounter()
{  b.ticket=0;s.ticket=0;
   for (int cnt=0;cnt<=OrdersTotal();cnt++)
   {  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      {  if (OrderType()==OP_SELL)
         {  s.ticket=OrderTicket();
         }
         if (OrderType()==OP_BUY)
         {  b.ticket=OrderTicket();
         }
      }
   }
}

double LotCalc()
{  double lot;
   if (Use.Money.Management)
   {  //lot=AccountFreeMargin()*(MaximumRisk/Lot.Margin);
      lot=NormalizeDouble((AccountFreeMargin()*MaximumRisk)/(MarketInfo(Symbol(),MODE_TICKVALUE)*StopLoss.Pips),2);
   }
   if (!Use.Money.Management) {lot=Minimum.Lot;}
   return(lot);
}

void comments()
{  string s0="", s1="", s2="", s3="", swap="", sCombo="", sStr ;
   int PipsProfit;
   double AmountProfit;
   PipsProfit=0; AmountProfit=0;
   PosCounter();
   if (b.ticket>0) 
   {  OrderSelect(b.ticket,SELECT_BY_TICKET);
      PipsProfit=NormalizeDouble(((Bid - OrderOpenPrice())/Point),Digits);
      AmountProfit=OrderProfit();
   }
   else if (s.ticket>0) 
   {  OrderSelect(s.ticket,SELECT_BY_TICKET);
      PipsProfit=NormalizeDouble(((OrderOpenPrice()-Ask)/Point),Digits);
      AmountProfit=OrderProfit();
   }
   if (Exit.On.Yellow)              s0="Exit if Yellow on "+Exit.On.Yellow.Period+" min";
   else                             s0="";
   if (Move.To.BreakEven.at.pips>0) s1="s/l will move to b/e after: "+Move.To.BreakEven.at.pips+" pips   and lock: "+Move.To.BreakEven.Lock.pips+" pips"+"\n\n";
   else                             s1="";
   if (Use.Juice)                   s2="Use Juice: Yes  Juice.TimeFrame: "+Juice.TimeFrame+"\n";
   else                             s2="Use Juice: No";
   if (Use.Adx)                     s3="Use ADX: Yes    ADX TimeFrame:"+Adx.TimeFrame +"    Adx Threshold: "+Adx.Threshold+"\n";
   else                             s3="Use ADX: No";
   if (Use.Only.First2.Indicators) sCombo=Trigger.Period+"/"+Filter.Period.1;
   else sCombo=Trigger.Period+"/"+Filter.Period.1+"/"+Filter.Period.2;
   Comment( ScreenComment,"\n",
            "Today\'s Range: ",TodaysRange,"\n",
            "Combo Used: ",sCombo,"  ",s0,"\n",
            "s/l: ",StopLoss.Pips,"  tp:",TakeProfit.Pips,"  trail:",Trail.Pips,"\n",
            s1,
            s2,"\n",
            s3,"\n",
            "\n", "Pips: ",PipsProfit,"  /  $ ", AmountProfit,
          );
}

void Trail.With.ADR(int AfterBE)
{  double bsl, b.tsl, ssl, s.tsl;
   PosCounter();
   // x=Minimum Wave Range of Average Daily Range Trailing Stop Calculation
   if (AfterBE==0) // Trail Starts immediately
   {  if(b.ticket>0)
      {  bsl=NormalizeDouble(x,Digits);
         b.tsl=0;
         OrderSelect(b.ticket,SELECT_BY_TICKET);
         //if stoploss is less than minimum wave range, set bsl to current SL
         if (OrderStopLoss()<OrderOpenPrice() && OrderOpenPrice()-OrderStopLoss()<x)
         {  bsl=OrderOpenPrice()-OrderStopLoss();
         }
         //if stoploss is equal to, or greater than minimum wave range, set bsl to minimum wave range
         if (OrderStopLoss()<OrderOpenPrice() && OrderOpenPrice()-OrderStopLoss()>=x)
         {  bsl=NormalizeDouble(x,Digits);
         }
         //determine if stoploss should be modified
         if (Bid>(OrderOpenPrice()+bsl) && OrderStopLoss()<(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl))))
         {  b.tsl=NormalizeDouble(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl)),Digits);
            Print("b.tsl ",b.tsl);
            if (OrderStopLoss()<b.tsl)
            {  OrderModify(b.ticket,OrderOpenPrice(),b.tsl,OrderTakeProfit(),OrderExpiration(),MediumSpringGreen);
            }
         }
      }
      if(s.ticket>0)
      {  ssl=NormalizeDouble(x,Digits);
         s.tsl=0;
         OrderSelect(s.ticket,SELECT_BY_TICKET);
         //if stoploss is less than minimum wave range, set ssl to current SL
         if (OrderStopLoss()>OrderOpenPrice() && OrderStopLoss()-OrderOpenPrice()<x)
         {  ssl=OrderStopLoss()-OrderOpenPrice();
         }
         //if stoploss is equal to, or greater than minimum wave range, set bsl to minimum wave range
         if (OrderStopLoss()>OrderOpenPrice() && OrderStopLoss()-OrderOpenPrice()>=x)
         {  ssl=NormalizeDouble(x,Digits);
         }
         //determine if stoploss should be modified
         if (Ask<(OrderOpenPrice()-ssl) && OrderStopLoss()>(OrderOpenPrice()-(OrderOpenPrice()-ssl)-Ask))
         {  s.tsl=NormalizeDouble(OrderOpenPrice()-((OrderOpenPrice()-ssl)-Ask),Digits);
            Print("s.tsl ",s.tsl);
            if(OrderStopLoss()>s.tsl)
            {  OrderModify(s.ticket,OrderOpenPrice(),s.tsl,OrderTakeProfit(),OrderExpiration(),MediumVioletRed);
            }
         }
      }
   }
   else // If Trail.Starts.After.BreakEven
   {  if (b.ticket>0)
      {  bsl=NormalizeDouble(x,Digits);
         b.tsl=0;
         OrderSelect(b.ticket,SELECT_BY_TICKET);
         if (Bid>=(OrderOpenPrice()+(Move.To.BreakEven.at.pips*Point)))
         {  //if stoploss is less than minimum wave range, set bsl to current SL
            if (OrderStopLoss()<OrderOpenPrice() && OrderOpenPrice()-OrderStopLoss()<x)
            {  bsl=OrderOpenPrice()-OrderStopLoss();
            }
            //if stoploss is equal to, or greater than minimum wave range, set bsl to minimum wave range
            if (OrderStopLoss()<OrderOpenPrice() && OrderOpenPrice()-OrderStopLoss()>=x)
            {  bsl=NormalizeDouble(x,Digits);
            }
            //determine if stoploss should be modified
            if (Bid>(OrderOpenPrice()+bsl) && OrderStopLoss()<(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl))))
            {  b.tsl=NormalizeDouble(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl)),Digits);
               Print("b.tsl ",b.tsl);
               if (OrderStopLoss()<b.tsl)
               {  OrderModify(b.ticket,OrderOpenPrice(),b.tsl,OrderTakeProfit(),OrderExpiration(),MediumSpringGreen);
               }
            }
         }
      }
      if (s.ticket>0)
      {  ssl=NormalizeDouble(x,Digits);
         s.tsl=0;
         OrderSelect(s.ticket,SELECT_BY_TICKET);
         if (Ask<=(OrderOpenPrice()-(Move.To.BreakEven.at.pips*Point)))
         {  //if stoploss is less than minimum wave range, set ssl to current SL
            if(OrderStopLoss()>OrderOpenPrice() && OrderStopLoss()-OrderOpenPrice()<x)
            {  ssl=OrderStopLoss()-OrderOpenPrice();
            }
            //if stoploss is equal to, or greater than minimum wave range, set bsl to minimum wave range
            if(OrderStopLoss()>OrderOpenPrice() && OrderStopLoss()-OrderOpenPrice()>=x)
            {  ssl=NormalizeDouble(x,Digits);
            }
            //determine if stoploss should be modified
            if(Ask<(OrderOpenPrice()-ssl) && OrderStopLoss()>(OrderOpenPrice()-(OrderOpenPrice()-ssl)-Ask))
            {  s.tsl=NormalizeDouble(OrderOpenPrice()-((OrderOpenPrice()-ssl)-Ask),Digits);
               Print("s.tsl ",s.tsl);
               if(OrderStopLoss()>s.tsl)
               {  OrderModify(s.ticket,OrderOpenPrice(),s.tsl,OrderTakeProfit(),OrderExpiration(),MediumVioletRed);
               }
            }
         }
      }
   }
}

void Trail.With.Standard.Trailing(int AfterBE)
{  double bsl, b.tsl, ssl, s.tsl;
   PosCounter();
   if (AfterBE==0)
   {  if (b.ticket>0)
      {  bsl=Trail.Pips*Point;
         OrderSelect(b.ticket,SELECT_BY_TICKET);
         //determine if stoploss should be modified
         if(Bid>(OrderOpenPrice()+bsl) && OrderStopLoss()<(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl))))
         {  b.tsl=NormalizeDouble(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl)),Digits);
            Print("b.tsl ",b.tsl);
            if (OrderStopLoss()<b.tsl)
            {  OrderModify(b.ticket,OrderOpenPrice(),b.tsl,OrderTakeProfit(),OrderExpiration(),MediumSpringGreen);
            }
         }
      }
      if(s.ticket>0)
      {  ssl=Trail.Pips*Point;
         //determine if stoploss should be modified
         OrderSelect(s.ticket,SELECT_BY_TICKET);
         if (Ask<(OrderOpenPrice()-ssl) && OrderStopLoss()>(OrderOpenPrice()-(OrderOpenPrice()-ssl)-Ask))
         {  s.tsl=NormalizeDouble(OrderOpenPrice()-((OrderOpenPrice()-ssl)-Ask),Digits);
            Print("s.tsl ",s.tsl);
            if (OrderStopLoss()>s.tsl)
            {  OrderModify(s.ticket,OrderOpenPrice(),s.tsl,OrderTakeProfit(),OrderExpiration(),MediumVioletRed);
            }
         }
      }
   }
   else // If Trail.Starts.After.BreakEven
   {  if (b.ticket>0)
      {  OrderSelect(b.ticket,SELECT_BY_TICKET);
         if (Bid>=(OrderOpenPrice()+(Move.To.BreakEven.at.pips*Point)))
         {  bsl=Trail.Pips*Point;
            if (Bid>(OrderOpenPrice()+bsl) && OrderStopLoss()<(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl))))
            {  b.tsl=NormalizeDouble(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl)),Digits);
               Print("b.tsl ",b.tsl);
               if (OrderStopLoss()<b.tsl)
               {  OrderModify(b.ticket,OrderOpenPrice(),b.tsl,OrderTakeProfit(),OrderExpiration(),MediumSpringGreen);
               }
            }
         }
      }
      if(s.ticket>0)
      {  OrderSelect(s.ticket,SELECT_BY_TICKET);
         if (Ask<=(OrderOpenPrice()-(Move.To.BreakEven.at.pips*Point)))
         {  ssl=Trail.Pips*Point;
            //determine if stoploss should be modified
            if(Ask<(OrderOpenPrice()-ssl) && OrderStopLoss()>(OrderOpenPrice()-(OrderOpenPrice()-ssl)-Ask))
            {  s.tsl=NormalizeDouble(OrderOpenPrice()-((OrderOpenPrice()-ssl)-Ask),Digits);
               Print("s.tsl ",s.tsl);
               if(OrderStopLoss()>s.tsl)
               {  OrderModify(s.ticket,OrderOpenPrice(),s.tsl,OrderTakeProfit(),OrderExpiration(),MediumVioletRed);
               }
            }
         }
      }
   }
}


void Trail.With.Every.xx.Pips()
{  double bsl, b.tsl, ssl, s.tsl, CurrProfit;
   int Factor;
   PosCounter();
   if (b.ticket>0)
   {  OrderSelect(b.ticket,SELECT_BY_TICKET);
      CurrProfit=((Bid-OrderOpenPrice())/Point);
      if (CurrProfit>=Move.Trail.Every.xx.Pips)
      {  Factor=MathFloor(CurrProfit/Move.Trail.Every.xx.Pips);
         bsl=Factor*Trail.Pips*Point;
         //determine if stoploss should be modified
         if(Bid>(OrderOpenPrice()+bsl) && OrderStopLoss()<(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl))))
         {  b.tsl=NormalizeDouble(OrderOpenPrice()+(Bid-(OrderOpenPrice()+bsl)),Digits);
            Print("b.tsl ",b.tsl);
            if (OrderStopLoss()<b.tsl)
            {  OrderModify(b.ticket,OrderOpenPrice(),b.tsl,OrderTakeProfit(),OrderExpiration(),MediumSpringGreen);
            }
         }
      }
   }
   if(s.ticket>0)
   {  OrderSelect(s.ticket,SELECT_BY_TICKET);
      CurrProfit=((OrderOpenPrice()-Ask)/Point);
      if (CurrProfit>=Move.Trail.Every.xx.Pips)
      {  Factor=MathFloor(CurrProfit/Move.Trail.Every.xx.Pips);
         ssl=Factor*Trail.Pips*Point;
         //determine if stoploss should be modified
         if (Ask<(OrderOpenPrice()-ssl) && OrderStopLoss()>(OrderOpenPrice()-(OrderOpenPrice()-ssl)-Ask))
         {  s.tsl=NormalizeDouble(OrderOpenPrice()-((OrderOpenPrice()-ssl)-Ask),Digits);
            Print("s.tsl ",s.tsl);
            if (OrderStopLoss()>s.tsl)
            {  OrderModify(s.ticket,OrderOpenPrice(),s.tsl,OrderTakeProfit(),OrderExpiration(),MediumVioletRed);
            }
         }
      }
   }
}

void Trail.Stop()
{  if (Move.Trail.Every.xx.Pips>0 && Trail.Pips>0)
   {  Trail.With.Every.xx.Pips();
   }
   else
   {  if (Use.ADR.for.SL.pips)
      {  if (Trail.Starts.After.BreakEven)   Trail.With.ADR(1);
         else                                Trail.With.ADR(0);
      }
      else if (Trail.Pips>0)
      {  if (Trail.Starts.After.BreakEven)   Trail.With.Standard.Trailing(1);
         else                                Trail.With.Standard.Trailing(0);
      }
   }
}

void Mail()
{  OrderSelect(b.ticket,SELECT_BY_TICKET);
   if(OrderCloseTime()>0)
   {  SendMail(Symbol()+" "+OrderComment(),"Buy Order Closed, $"+DoubleToStr(OrderProfit(),2)+" "+DoubleToStr(Bid,Digits)+"/"+DoubleToStr(Ask,Digits));
   }
   OrderSelect(s.ticket,SELECT_BY_TICKET);
   if(OrderCloseTime()>0)
   {  SendMail(Symbol()+" "+OrderComment(),"Sell Order Closed, $"+DoubleToStr(OrderProfit(),2)+" "+DoubleToStr(Bid,Digits)+"/"+DoubleToStr(Ask,Digits));
   }
}

void MoveToBreakEven()
{  PosCounter();
   if (b.ticket > 0)
   {  OrderSelect(b.ticket,SELECT_BY_TICKET);
      if (OrderStopLoss()<OrderOpenPrice())
      {  if (Bid >((Move.To.BreakEven.at.pips*Point) +OrderOpenPrice()))
         {  OrderModify(b.ticket, OrderOpenPrice(), (OrderOpenPrice()+(Move.To.BreakEven.Lock.pips*Point)),OrderTakeProfit(),OrderExpiration(),MediumSpringGreen);
            if (OrderSelect(b.ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Long StopLoss Moved to BE at : ",OrderStopLoss());
            else Print("Error moving Long StopLoss to BE: ",GetLastError());
         }
      }
   }
   if (s.ticket > 0)
   {  OrderSelect(s.ticket,SELECT_BY_TICKET);
      if (OrderStopLoss()>OrderOpenPrice())
      {  if ( Ask < (OrderOpenPrice()-(Move.To.BreakEven.at.pips*Point)))
         {  OrderModify(OrderTicket(), OrderOpenPrice(), (OrderOpenPrice()-(Move.To.BreakEven.Lock.pips*Point)),OrderTakeProfit(),OrderExpiration(),MediumVioletRed);
            if(OrderSelect(s.ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Short StopLoss Moved to BE at : ",OrderStopLoss());
            else Print("Error moving Short StopLoss to BE: ",GetLastError());
         }
      }
   }
}

double Juice(int shift, int period, int level, int jtimeframe)
{  double osma= 0;
   osma= iStdDev(NULL,jtimeframe, period, MODE_EMA, 0, PRICE_CLOSE,shift) - level*Point;
   return (osma);
}

int CheckIfConditionsAllowEntry() // 0=no entry 1=ok for long 2=ok for short
{  bool StarTrendIsOK;
   bool AdxIsOK;
   PosCounter(); // Check if current orders running.
   //General Conditions / Filtering
        if (!(b.ticket==0 && s.ticket==0))                                                                        return (0); // if a position is open, skip checking
   else if (Use.Trading.Hours.Restriction && (Hour()<Start.Trading.Hour.Begin || Hour()>Start.Trading.Hour.End))  return (0); // Check Time Filter
   else if (Use.Juice && CurrentJuice<=0)                                                                         return (0); // check Juice
   else if (Use.Adx && (!(ADXMain1>=ADXMain2 && ADXMain1>=Adx.Threshold)))                                        return (0); // Check Adx rising and above threshold

   // Conditions for Long
   StarTrendIsOK=false;
   // Check Star Trend
   if (Entry.On.Yellow) // if Entry.On.Yellow = true
   {  if (!Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (red or light coral or yellow) to (green or mediumseagreen)
                  // and 15 and 60 are (green or mediumseagreen)
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Trig_2_Red==1   || Trig_2_LightCoral==1 || Trig_2_Yellow==1) &&
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1) && (Per2_1_Green==1 || Per2_1_MediumSeaGreen==1)
               )
               || // OR
               (  // If 15 turns from (red or light coral or yellow) to (green or mediumseagreen)
                  // and 5 and 60 are (green or mediumseagreen)
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1) && (Per1_2_Red==1   || Per1_2_LightCoral==1 || Per1_2_Yellow==1) &&
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Per2_1_Green==1 || Per2_1_MediumSeaGreen==1)
               )
               || // OR
               (  // If 60 turns from (red or light coral or yellow) to (green or mediumseagreen)
                  // and 5 and 15 are (green or mediumseagreen)
                (Per2_1_Green==1 || Per2_1_MediumSeaGreen==1) && (Per2_2_Red==1   || Per2_2_LightCoral==1 || Per2_2_Yellow==1) &&
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1)
               )
            )
          ) {StarTrendIsOK=True;}
      else
      if (Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (red or light coral or yellow) to (green or mediumseagreen)
                  // and 15 is (green or mediumseagreen)
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Trig_2_Red==1   || Trig_2_LightCoral==1 || Trig_2_Yellow==1) &&
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1)
               )
               || // OR
               (  // If 15 turns from (red or light coral or yellow) to (green or mediumseagreen)
                  // and 5 is (green or mediumseagreen)
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1) && (Per1_2_Red==1   || Per1_2_LightCoral==1 || Per1_2_Yellow==1) &&
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1)
               )
            )
         ) {StarTrendIsOK=True;}
   }
   else // if Entry.On.Yellow = false
   {  if (!Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (red or light coral) to (green or mediumseagreen)
                  // and 15 and 60 are (green or mediumseagreen)
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Trig_2_Red==1   || Trig_2_LightCoral==1) &&
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1) && (Per2_1_Green==1 || Per2_1_MediumSeaGreen==1)
               )
               || // OR
               (  // If 15 turns from (red or light coral) to (green or mediumseagreen)
                  // and 5 and 60 are (green or mediumseagreen)
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1) && (Per1_2_Red==1   || Per1_2_LightCoral==1) &&
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Per2_1_Green==1 || Per2_1_MediumSeaGreen==1)
               )
               || // OR
               (  // If 60 turns from (red or light coral) to (green or mediumseagreen)
                  // and 5 and 15 are (green or mediumseagreen)
                (Per2_1_Green==1 || Per2_1_MediumSeaGreen==1) && (Per2_2_Red==1   || Per2_2_LightCoral==1) &&
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1)
               )
            )
          ) {StarTrendIsOK=True;}
      else
      if (Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (red or light coral) to (green or mediumseagreen)
                  // and 15 is (green or mediumseagreen)
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1) && (Trig_2_Red==1   || Trig_2_LightCoral==1) &&
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1)
               )
               || // OR
               (  // If 15 turns from (red or light coral) to (green or mediumseagreen)
                  // and 5 is (green or mediumseagreen)
                (Per1_1_Green==1 || Per1_1_MediumSeaGreen==1) && (Per1_2_Red==1   || Per1_2_LightCoral==1) &&
                (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1)
               )
            )
         ) {StarTrendIsOK=True;}
   }
   if (StarTrendIsOK) return(1);


   // Conditions for Short
   StarTrendIsOK=false;

   // Check Star Trend
   if (Entry.On.Yellow)
   {  // if Entry.On.Yellow = true
      if (!Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (green or mediumseagreen or yellow) to (red or lightcoral)
                  // and 15 and 60 are (red or lightcoral)
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Trig_2_Green==1 || Trig_2_MediumSeaGreen==1 || Trig_2_Yellow==1) &&
                (Per1_1_Red==1 || Per1_1_LightCoral==1) && (Per2_1_Red  ==1 || Per2_1_LightCoral==1)
               )
               || // OR
               (  // If 15 turns from (green or mediumseagreen or yellow) to (red or lightcoral)
                  // and 5 and 60 are (red or lightcoral)
                (Per1_1_Red==1 || Per1_1_LightCoral==1) && (Per1_2_Green==1 || Per1_2_MediumSeaGreen==1 || Per1_2_Yellow==1) &&
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Per2_1_Red  ==1 || Per2_1_LightCoral==1)
               )
               || // OR
               (  // If 60 turns from (green or mediumseagreen or yellow) to (red or lightcoral)
                  // and 5 and 15 are (red or lightcoral)
                (Per2_1_Red==1 || Per2_1_LightCoral==1) && (Per2_2_Green==1 || Per2_2_MediumSeaGreen==1 || Per2_2_Yellow==1) &&
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Per1_1_Red  ==1 || Per1_1_LightCoral==1)
               )
            )
          ) {StarTrendIsOK=True;}
      else
      if (Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (green or mediumseagreen or yellow) to (red or lightcoral)
                  // and 15 is (red or lightcoral)
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Trig_2_Green==1 || Trig_2_MediumSeaGreen==1 || Trig_2_Yellow==1) &&
                (Per1_1_Red==1 || Per1_1_LightCoral==1)
               )
               || // OR
               (  // If 15 turns from (green or mediumseagreen or yellow) to (red or lightcoral)
                  // and 5 is (red or lightcoral)
                (Per1_1_Red==1 || Per1_1_LightCoral==1) && (Per1_2_Green==1 || Per1_2_MediumSeaGreen==1 || Per1_2_Yellow==1) &&
                (Trig_1_Red==1 || Trig_1_LightCoral==1)
               )
            )
         ) {StarTrendIsOK=True;}
   }
   else
   {  // if Entry.On.Yellow = false
      if (!Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (green or mediumseagreen) to (red or lightcoral)
                  // and 15 and 60 are (red or lightcoral)
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Trig_2_Green==1 || Trig_2_MediumSeaGreen==1) &&
                (Per1_1_Red==1 || Per1_1_LightCoral==1) && (Per2_1_Red  ==1 || Per2_1_LightCoral==1)
               )
               || // OR
               (  // If 15 turns from (green or mediumseagreen) to (red or lightcoral)
                  // and 5 and 60 are (red or lightcoral)
                (Per1_1_Red==1 || Per1_1_LightCoral==1) && (Per1_2_Green==1 || Per1_2_MediumSeaGreen==1) &&
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Per2_1_Red  ==1 || Per2_1_LightCoral==1)
               )
               || // OR
               (  // If 60 turns from (green or mediumseagreen) to (red or lightcoral)
                  // and 5 and 15 are (red or lightcoral)
                (Per2_1_Red==1 || Per2_1_LightCoral==1) && (Per2_2_Green==1 || Per2_2_MediumSeaGreen==1) &&
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Per1_1_Red  ==1 || Per1_1_LightCoral==1)
               )
            )
          ) {StarTrendIsOK=True;}
      else
      if (Use.Only.First2.Indicators &&
            (  (  // If 5 turns from (green or mediumseagreen) to (red or lightcoral)
                  // and 15 is (red or lightcoral)
                (Trig_1_Red==1 || Trig_1_LightCoral==1) && (Trig_2_Green==1 || Trig_2_MediumSeaGreen==1) &&
                (Per1_1_Red==1 || Per1_1_LightCoral==1)
               )
               || // OR
               (  // If 15 turns from (green or mediumseagreen) to (red or lightcoral)
                  // and 5 is (red or lightcoral)
                (Per1_1_Red==1 || Per1_1_LightCoral==1) && (Per1_2_Green==1 || Per1_2_MediumSeaGreen==1) &&
                (Trig_1_Red==1 || Trig_1_LightCoral==1)
               )
            )
         ) {StarTrendIsOK=True;}
   }

   if (StarTrendIsOK) return(2);
   return(0);
}

void CheckForOrderClosing()
{  bool iShouldExit=false;
   PosCounter(); // Check if current orders running.
   iShouldExit=false;
   ShortTradeShouldClose=false;
   LongTradeShouldClose=false;

   // --------------------------------
   // Check Exit Conditions for Longs
   // --------------------------------
  if (!Exit.On.Yellow) // Yellow is ignored
   {  if (!Use.Only.First2.Indicators) // if user choose all 3 time frames
      {  // if we have a change of colour in any time frame from (green or mediumseagreen) to (red or lightcoral) exit longs
         if (Trig_1_Red==1 || Trig_1_LightCoral==1 || Per1_1_Red==1 || Per1_1_LightCoral==1 || Per2_1_Red==1 || Per2_1_LightCoral==1)
         {iShouldExit=true;}
      }
      else // if we have a change of colour only in the first 2 time frames from (green or mediumseagreen) to (red or lightcoral) exit longs
      {  if (Trig_1_Red==1 || Trig_1_LightCoral==1 || Per1_1_Red==1 || Per1_1_LightCoral==1)
         {iShouldExit=true;}
      }
   }
   else // use yellow for exit
   {  if (!Use.Only.First2.Indicators) // if user choose all 3 time frames
      {  if (Exit.On.Yellow.Period==Trigger.Period &&
               (Trig_1_Red==1 || Trig_1_LightCoral==1 || Trig_1_Yellow==1 ||
                Per1_1_Red==1 || Per1_1_LightCoral==1 || Per1_1_Yellow==1 ||
                Per2_1_Red==1 || Per2_1_LightCoral==1 || Per2_1_Yellow==1)
            ) {iShouldExit=true;}
         if (Exit.On.Yellow.Period==Filter.Period.1 &&
               (Trig_1_Red==1 || Trig_1_LightCoral==1                     ||
                Per1_1_Red==1 || Per1_1_LightCoral==1 || Per1_1_Yellow==1 ||
                Per2_1_Red==1 || Per2_1_LightCoral==1 || Per2_1_Yellow==1)
            ) {iShouldExit=true;}
         if (Exit.On.Yellow.Period==Filter.Period.2 &&
               (Trig_1_Red==1 || Trig_1_LightCoral==1                     ||
                Per1_1_Red==1 || Per1_1_LightCoral==1                     ||
                Per2_1_Red==1 || Per2_1_LightCoral==1 || Per2_1_Yellow==1)
            ) {iShouldExit=true;}
      }
      else // if user choose only the first 2 time frames
      {  if (Exit.On.Yellow.Period==Trigger.Period &&
               (Trig_1_Red==1 || Trig_1_LightCoral==1 || Trig_1_Yellow==1 ||
                Per1_1_Red==1 || Per1_1_LightCoral==1 || Per1_1_Yellow==1)
            ) {iShouldExit=true;}
         if (Exit.On.Yellow.Period==Filter.Period.1 &&
               (Trig_1_Red==1 || Trig_1_LightCoral==1                     ||
                Per1_1_Red==1 || Per1_1_LightCoral==1 || Per1_1_Yellow==1)
            ) {iShouldExit=true;}
      }
   }
   if (iShouldExit)
   {  LongTradeShouldClose=true;
      if (b.ticket>0)
      {  OrderSelect(b.ticket,SELECT_BY_TICKET);
         OrderClose(OrderTicket(),OrderLots(),Bid,slip,Blue);
      }
   }

   // --------------------------------
   // Check Exit Conditions for Shorts
   // --------------------------------
   iShouldExit=false;
   if (!Exit.On.Yellow) // Yellow is ignored
   {  if (!Use.Only.First2.Indicators) // if user choose all 3 time frames
      {  // if we have a change of colour in any time frame from (red or lightcoral) to (green or mediumseagreen) exit shorts
         if (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1 || Per1_1_Green==1 || Per1_1_MediumSeaGreen==1 || Per2_1_Green==1 || Per2_1_MediumSeaGreen==1)
            {iShouldExit=true;}
      }
      else // if we have a change of colour only in the first 2 time frames from (red or lightcoral) to (green or mediumseagreen) exit shorts
      {  if (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1 || Per1_1_Green==1 || Per1_1_MediumSeaGreen==1)
            {iShouldExit=true;}
      }
   }
   else // use of yellow for exit
   {  if (!Use.Only.First2.Indicators) // if user choose all 3 time frames
      {  if (Exit.On.Yellow.Period==Trigger.Period &&
               (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1 || Trig_1_Yellow==1 ||
                Per1_1_Green==1 || Per1_1_MediumSeaGreen==1 || Per1_1_Yellow==1 ||
                Per2_1_Green==1 || Per2_1_MediumSeaGreen==1 || Per2_1_Yellow==1)
            ) {iShouldExit=true;}
         if (Exit.On.Yellow.Period==Filter.Period.1 &&
               (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1                     ||
                Per1_1_Green==1 || Per1_1_MediumSeaGreen==1 || Per1_1_Yellow==1 ||
                Per2_1_Green==1 || Per2_1_MediumSeaGreen==1 || Per2_1_Yellow==1)
            ) {iShouldExit=true;}
         if (Exit.On.Yellow.Period==Filter.Period.2 &&
               (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1                     ||
                Per1_1_Green==1 || Per1_1_MediumSeaGreen==1                     ||
                Per2_1_Green==1 || Per2_1_MediumSeaGreen==1 || Per2_1_Yellow==1)
            ) {iShouldExit=true;}
      }
      else //if user choose only the first 2 time frames
      {  if (Exit.On.Yellow.Period==Trigger.Period &&
               (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1 || Trig_1_Yellow==1 ||
                Per1_1_Green==1 || Per1_1_MediumSeaGreen==1 || Per1_1_Yellow==1)
            ) {iShouldExit=true;}
         if (Exit.On.Yellow.Period==Filter.Period.1 &&
               (Trig_1_Green==1 || Trig_1_MediumSeaGreen==1                     ||
                Per1_1_Green==1 || Per1_1_MediumSeaGreen==1 || Per1_1_Yellow==1)
            ) {iShouldExit=true;}
      }
   }
   if (iShouldExit)
   {  ShortTradeShouldClose=true;
      if (s.ticket>0)
      {  OrderSelect(s.ticket,SELECT_BY_TICKET);
         OrderClose(OrderTicket(),OrderLots(),Ask,slip,Red);
      }
   }
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---