Channels_v1





//+----------------------------------------------------------+
//| Copyright 2005, Gordago Software Corp.                   |
//| http://www.gordago.com/                                  |
//| version 2.0                                              |
//+----------------------------------------------------------+
#property copyright "Copyright 2005, Gordago Software Corp."
#property link "http://www.gordago.com"
//----
#define MIN_STOPLOSS_POINT 10
#define MIN_TAKEPROFIT_POINT 10
#define MAGIC 0
//----
extern string sNameExpert="Generate from Gordago";
extern int nAccount =0;
extern double dBuyStopLossPoint=0;
extern double dSellStopLossPoint=0;
extern double dBuyTakeProfitPoint=0;
extern double dSellTakeProfitPoint=0;
extern double dBuyTrailingStopPoint=30;
extern double dSellTrailingStopPoint=30;
extern double dLots=0.10;
extern int nSlippage=1;
extern bool lFlagUseHourTrade=False;
extern int nFromHourTrade=0;
extern int nToHourTrade=23;
extern bool lFlagUseSound=False;
extern string sSoundFileName="alert.wav";
extern color colorOpenBuy=Blue;
extern color colorCloseBuy=Aqua;
extern color colorOpenSell=Red;
extern color colorCloseSell=Aqua;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void deinit() 
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int start()
  {
     if (lFlagUseHourTrade)
     {
        if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) 
        {
         Comment("Time for trade has not come else!");
         return(0);
        }
     }
     if(Bars < 100)
     {
      Print("bars less than 100");
      return(0);
     }
     if (nAccount > 0 && nAccount!=AccountNumber())
     {
      Comment("Trade on account :"+AccountNumber()+" FORBIDDEN!");
      return(0);
     }
   if((dBuyStopLossPoint > 0 && dBuyStopLossPoint <
   MIN_STOPLOSS_POINT) ||
   (dSellStopLossPoint > 0 && dSellStopLossPoint <
       MIN_STOPLOSS_POINT))
     {
      Print("StopLoss less than " + MIN_STOPLOSS_POINT);
      return(0);
     }
   if((dBuyTakeProfitPoint > 0 && dBuyTakeProfitPoint <
   MIN_TAKEPROFIT_POINT) ||
   (dSellTakeProfitPoint > 0 && dSellTakeProfitPoint <
       MIN_TAKEPROFIT_POINT))
     {
      Print("TakeProfit less than " + MIN_TAKEPROFIT_POINT);
      return(0);
     }
   double diMA0=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0);
   double diEnvelopes1=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_LOWER,0);
   double diMA2=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0);
   double diEnvelopes3=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0);
   double diMA4=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0);
   double diEnvelopes5=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0);
   double diMA6=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0);
   double diMA7=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0);
   double diMA8=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0);
   double diEnvelopes9=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0);
   double diMA10=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0);
   double diEnvelopes11=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0);
   double diMA12=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0);
   double diEnvelopes13=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_UPPER,0);
   double diMA14=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0);
   double diEnvelopes15=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0);
   double diMA16=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0);
   double diEnvelopes17=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0);
   double diMA18=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0);
   double diMA19=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0);
   double diMA20=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0);
   double diEnvelopes21=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0);
   double diMA22=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0);
   double diEnvelopes23=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0);
   double diMA24=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1);
   double diEnvelopes25=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_LOWER,0);
   double diMA26=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1);
   double diEnvelopes27=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0);
   double diMA28=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1);
   double diEnvelopes29=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0);
   double diMA30=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1);
   double diMA31=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0);
   double diMA32=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1);
   double diEnvelopes33=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0);
   double diMA34=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1);
   double diEnvelopes35=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0);
   double diMA36=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1);
   double diEnvelopes37=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_UPPER,0);
   double diMA38=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1);
   double diEnvelopes39=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0);
   double diMA40=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1);
   double diEnvelopes41=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0);
   double diMA42=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1);
   double diMA43=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0);
   double diMA44=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1);
   double diEnvelopes45=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0);
   double diMA46=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1);
   double diEnvelopes47=iEnvelopes
   (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0);
     if(AccountFreeMargin() < (1000*dLots))
     {
      Print("We have no money. Free Margin = " + AccountFreeMargin
      ());
      return(0);
     }
   bool lFlagBuyOpen=false, lFlagSellOpen=false, lFlagBuyClose=
   false, lFlagSellClose=false;
//----
   lFlagBuyOpen=((diMA0>diEnvelopes1 && diMA24<diEnvelopes25) ||
   (diMA2>diEnvelopes3 && diMA26<diEnvelopes27) || (diMA4<diEnvelopes5
   && diMA28<diEnvelopes29) || (diMA6>diMA7 && diMA30<diMA31) ||
   (diMA8>diEnvelopes9 && diMA32<diEnvelopes33) ||
   (diMA10>diEnvelopes11 && diMA34<diEnvelopes35));
   lFlagSellOpen=((diMA12<diEnvelopes13 && diMA36>diEnvelopes37)
   || (diMA14<diEnvelopes15 && diMA38>diEnvelopes39) ||
   (diMA16<diEnvelopes17 && diMA40>diEnvelopes41) || (diMA18<diMA19 &&
   diMA42>diMA43) || (diMA20<diEnvelopes21 && diMA44>diEnvelopes45) ||
   (diMA22<diEnvelopes23 && diMA46>diEnvelopes47));
   lFlagBuyClose=False;
   lFlagSellClose=False;
//----
     if (!ExistPositions())
     {
        if (lFlagBuyOpen)
        {
         OpenBuy();
         return(0);
        }
        if (lFlagSellOpen)
        {
         OpenSell();
         return(0);
        }
     }
     if (ExistPositions())
     {
        if(OrderType()==OP_BUY)
        {
           if (lFlagBuyClose)
           {
            bool flagCloseBuy=OrderClose(OrderTicket(), OrderLots
            (), Bid, nSlippage, colorCloseBuy);
            if (flagCloseBuy && lFlagUseSound)
               PlaySound(sSoundFileName);
            return(0);
           }
        }
        if(OrderType()==OP_SELL)
        {
           if (lFlagSellClose)
           {
            bool flagCloseSell=OrderClose(OrderTicket(), OrderLots
            (), Ask, nSlippage, colorCloseSell);
            if (flagCloseSell && lFlagUseSound)
               PlaySound(sSoundFileName);
            return(0);
           }
        }
     }
     if (dBuyTrailingStopPoint > 0 || dSellTrailingStopPoint > 0)
     {
        for(int i=0; i<OrdersTotal(); i++) 
        {
           if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
           {
            bool lMagic=true;
            if (MAGIC > 0 && OrderMagicNumber()!=MAGIC)
               lMagic=false;
              if (OrderSymbol()==Symbol() && lMagic) 
              {
               if (OrderType()==OP_BUY && dBuyTrailingStopPoint > 0)
                 {
                  if (Bid-OrderOpenPrice() >
                      dBuyTrailingStopPoint*Point) 
                      {
                     if (OrderStopLoss()<Bid-
                     dBuyTrailingStopPoint*Point)
                        ModifyStopLoss(Bid-
                        dBuyTrailingStopPoint*Point);
                    }
                 }
                 if (OrderType()==OP_SELL) 
                 {
                  if (OrderOpenPrice()-
                      Ask>dSellTrailingStopPoint*Point) 
                      {
                     if (OrderStopLoss()
                     >Ask+dSellTrailingStopPoint*Point || OrderStopLoss()==0)
                        ModifyStopLoss
                        (Ask+dSellTrailingStopPoint*Point);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  bool ExistPositions() 
  {
     for(int i=0; i<OrdersTotal(); i++) 
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
        {
         bool lMagic=true;
//----
         if (MAGIC > 0 && OrderMagicNumber()!=MAGIC)
            lMagic=false;
           if (OrderSymbol()==Symbol() && lMagic) 
           {
            return(True);
           }
        }
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void ModifyStopLoss(double ldStopLoss) 
  {
   bool lFlagModify=OrderModify(OrderTicket(), OrderOpenPrice(),
   ldStopLoss, OrderTakeProfit(), 0, CLR_NONE);
   if (lFlagModify && lFlagUseSound)
      PlaySound(sSoundFileName);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void OpenBuy() 
  {
   double dStopLoss=0, dTakeProfit=0;
   if (dBuyStopLossPoint > 0)
      dStopLoss=Bid-dBuyStopLossPoint*Point;
   if (dBuyTakeProfitPoint > 0)
      dTakeProfit=Ask + dBuyTakeProfitPoint * Point;
   int numorder=OrderSend(Symbol(), OP_BUY, dLots, Ask, nSlippage,
   dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
//----
   if (numorder > -1 && lFlagUseSound)
      PlaySound(sSoundFileName);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void OpenSell() 
  {
   double dStopLoss=0, dTakeProfit=0;
//----   
   if (dSellStopLossPoint > 0)
      dStopLoss=Ask+dSellStopLossPoint*Point;
   if (dSellTakeProfitPoint > 0)
      dTakeProfit=Bid-dSellTakeProfitPoint*Point;
//----      
   int numorder=OrderSend(Symbol(),OP_SELL, dLots, Bid, nSlippage,
   dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell);
   if (numorder > -1 && lFlagUseSound)
      PlaySound(sSoundFileName);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:
It Closes Orders by itself
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy

Other Features:


It plays sound alerts