xMeter

Minggu, 01 Januari 2012

Silakan Copy script Dibawah ini :

/*
xMeterMTF.mq4  
Copyright © 2007, MetaQuotes Software Corp.  
Price Meter System™ ©GPL  

Hartono Setiono
   5/17/2007 Redsigned based on xMeter_mini.mq4 indicator
*/

#property copyright "x Meter System™ ©GPL"
#property link      "forex-tsd dot com"
#property  indicator_chart_window
#property  indicator_buffers 0

#include <stdlib.mqh>
#include <stderror.mqh>

#define TABSIZE  10                     // scale of currency's power !!!DON'T CHANGE THIS NUMBER!!!
#define ORDER    2                      // available type of order !!!DON'T CHANGE THIS NUMBER!!!

extern bool AccountIsIBFXmini = false;
/*extern*/ bool LoopOnInit=false;

/* You can change any of the following arrays */
   string aTradePair[]= {"GBPJPY"};
   string aPair[]   = {"EURUSD","GBPUSD","AUDUSD","USDJPY","USDCHF","USDCAD",
                       "EURJPY","EURGBP","EURCHF","EURAUD","GBPJPY","GBPCHF"};
                     
/* The following can also be changed but both must have the same dimension */
   string aMajor[] = {"USD","EUR","GBP","CHF","CAD","AUD","JPY"};
   int    aMajorPos[] = {130, 110, 90, 70, 50, 30, 10};


string aOrder[ORDER]    = {"BUY ","SELL "};
int    aTable[TABSIZE]  = {0,3,10,25,40,50,60,75,90,97};                 // grade table for currency's power

int PairCount;
int CurrencyCount;
double aMeter[];
double aHigh[];
double aLow[];
double aBid[];
double aAsk[];
double aRatio[];
double aRange[];
double aLookup[];
double aStrength[];
int aIndex[2][];

//+------------------------------------------------------------------+
//     expert initialization function                                |    
//+------------------------------------------------------------------+
int init()
  {
   int err,lastError, ps;
   PairCount=ArrayRange(aPair,0);
   CurrencyCount=ArrayRange(aMajor,0);
   ps=ArrayRange(aMajorPos,0);
   if(CurrencyCount!=ps) Print("The size of array aMajor is not equals to aMajorPos");

   ArrayResize(aMeter,CurrencyCount);
   ArrayResize(aHigh,PairCount);
   ArrayResize(aLow,PairCount);
   ArrayResize(aBid,PairCount);
   ArrayResize(aAsk,PairCount);
   ArrayResize(aRatio,PairCount);
   ArrayResize(aRange,PairCount);
   ArrayResize(aLookup,PairCount);
   ArrayResize(aStrength,PairCount);
 
   init_tradepair_index();

//----
   initGraph();
   if (LoopOnInit)
   {
      while (true)                                                           // infinite loop for main program
      {
        if (IsConnected()) main();
        if (!IsConnected()) objectBlank();
        WindowRedraw();
        Sleep(1000);                                                          // give your PC a breath
      }
   }
//----
   return(0);                                                               // end of init function
  }
//+------------------------------------------------------------------+
//     expert deinitialization function                              |    
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectsDeleteAll(0,OBJ_LABEL);
   Print("shutdown error - ",ErrorDescription(GetLastError()));                               // system is detached from platform
//----
   return(0);                                                               // end of deinit function
  }
//+------------------------------------------------------------------+
//     expert start function                                         |    
//+------------------------------------------------------------------+
int start()
  {
//----
   if (!LoopOnInit) main();
//----
   return(0);                                                               // end of start funtion
  }
//+------------------------------------------------------------------+
//     expert custom function                                        |    
//+------------------------------------------------------------------+  
void main()                                                                 // this a control center
  {
//----
   double point;
   int    index, pindex, cnt;
   string mySymbol;
   double cmeter;
   
   for (index = 0; index < PairCount; index++)                                // initialize all pairs required value
   {
      RefreshRates();                                                       // refresh all currency's instrument
      if (AccountIsIBFXmini)
         mySymbol = aPair[index]+'m';                                       // Add "m for IBFX mini
      else
         mySymbol = aPair[index];                      
      point            = GetPoint(mySymbol);                                // get a point basis
      aHigh[index]     = MarketInfo(mySymbol,MODE_HIGH); //iHigh(mySymbol,mTimeFrame,iHighest(mySymbol,mTimeFrame,MODE_HIGH,mPeriod,0));   // find highest
      aLow[index]      = MarketInfo(mySymbol,MODE_LOW); //iLow(mySymbol,mTimeFrame,iLowest(mySymbol,mTimeFrame,MODE_LOW,mPeriod,0));   // find lowest
      aBid[index]      = MarketInfo(mySymbol,MODE_BID);                 // set a last bid
      aAsk[index]      = MarketInfo(mySymbol,MODE_ASK);                 // set a last ask
      aRange[index]    = MathMax((aHigh[index]-aLow[index])/point,1);       // calculate range today
      aRatio[index]    = (aBid[index]-aLow[index])/aRange[index]/point;     // calculate pair ratio
      aLookup[index]   = iLookup(aRatio[index]*100);                        // set a pair grade
      aStrength[index] = 9-aLookup[index];                                  // set a pair strengh
   }

   // calculate all currencies meter      
   for (pindex=0; pindex<CurrencyCount; pindex++)
   {
     cnt=0;
     cmeter=0;
     for (index = 0; index < PairCount; index++)                                // initialize all pairs required value
     {
       if (StringSubstr(aPair[index],0,3)==aMajor[pindex])
       {
        cnt++;
        cmeter = cmeter + aLookup[index];
       }
       if (StringSubstr(aPair[index],3,3)==aMajor[pindex])
       {
        cnt++;
        cmeter = cmeter + aStrength[index];
       }
       if (cnt>0) aMeter[pindex]=NormalizeDouble(cmeter / cnt,1); else aMeter[pindex]=-1;
     }
   }
           
   objectBlank();
 
   for (pindex=0; pindex<CurrencyCount; pindex++)
   {
     paintCurr(pindex, aMeter[pindex]);
   }
   paintLine();
                                                                         
//----
  }

void init_tradepair_index()
{
  int i,n,tpcount, m1index, m2index;
  string cpair, m1,m2;
  tpcount=ArraySize(aTradePair);

  for(n=0; n<tpcount; n++)
  {
    cpair=aTradePair[0];
    m1=StringSubstr(cpair,0,3);
    m2=StringSubstr(cpair,3,3);
    aIndex[0,n]=-1;
    aIndex[1,n]=-1;
    for(i=0;i<CurrencyCount;i++)
    {
      if(m1==aMajor[i]) aIndex[0,n]=i;
      if(m2==aMajor[i]) aIndex[1,n]=i;
    }
    if(aIndex[0,n]==-1 || aIndex[1,n]==-1)
      Print("Currency Pair : ",cpair," is not tradeable, check array definition!");
  }
}

string GetSymbol(string mSymbol)
{
  string RetSymbol;
  if (AccountIsIBFXmini) RetSymbol = mSymbol + "m"; else RetSymbol = mSymbol;  
  return (RetSymbol);
}

double GetPoint(string mSymbol)
{
 double myPoint = 0.0001, YenPoint = 0.01;
 string mySymbol;
 if (StringSubstr(mySymbol,3,3) == "JPY") return (YenPoint);
 return(myPoint);
}

int iLookup(double ratio)                                                   // this function will return a grade value
  {                                                                         // based on its power.
   int   index=-1, i;
 
   if      (ratio <= aTable[0]) index = 0;
   else {
     for (i=1; i<TABSIZE; i++) if(ratio < aTable[i]) {index=i-1;  break; }
     if(index==-1) index=9;
   }
   return(index);                                                           // end of iLookup function
  }

void initGraph()
  {
   int pindex;
   ObjectsDeleteAll(0,OBJ_LABEL);

   for (pindex=0; pindex<CurrencyCount; pindex++)
   {
   objectCreate(aMajor[pindex]+"_1",aMajorPos[pindex],43);
   objectCreate(aMajor[pindex]+"_2",aMajorPos[pindex],35);
   objectCreate(aMajor[pindex]+"_3",aMajorPos[pindex],27);
   objectCreate(aMajor[pindex]+"_4",aMajorPos[pindex],19);
   objectCreate(aMajor[pindex]+"_5",aMajorPos[pindex],11);
   objectCreate(aMajor[pindex],aMajorPos[pindex]+2,12,aMajor[pindex],7,"Arial Narrow",SkyBlue);
   objectCreate(aMajor[pindex]+"p",aMajorPos[pindex]+4,21,DoubleToStr(9,1),8,"Arial Narrow",Silver);
   }
 
   objectCreate("line",10,6,"-----------------------------------",10,"Arial",DimGray);
   objectCreate("line1",10,27,"-----------------------------------",10,"Arial",DimGray);
   objectCreate("line2",10,69,"-----------------------------------",10,"Arial",DimGray);
   objectCreate("sign",11,1,"»»» Price Meter System™ ©GPL «««",8,"Arial Narrow",DimGray);
   WindowRedraw();
  }
//+------------------------------------------------------------------+
void objectCreate(string name,int x,int y,string text="-",int size=42,
                  string font="Arial",color colour=CLR_NONE)
  {
   ObjectCreate(name,OBJ_LABEL,0,0,0);
   ObjectSet(name,OBJPROP_CORNER,3);
   ObjectSet(name,OBJPROP_COLOR,colour);
   ObjectSet(name,OBJPROP_XDISTANCE,x);
   ObjectSet(name,OBJPROP_YDISTANCE,y);
   ObjectSetText(name,text,size,font,colour);
  }

void objectBlank()
  {
   int pindex;
 
   for (pindex=0; pindex<CurrencyCount; pindex++)
   {
   ObjectSet(aMajor[pindex]+"_1",OBJPROP_COLOR,CLR_NONE);
   ObjectSet(aMajor[pindex]+"_2",OBJPROP_COLOR,CLR_NONE);
   ObjectSet(aMajor[pindex]+"_3",OBJPROP_COLOR,CLR_NONE);
   ObjectSet(aMajor[pindex]+"_4",OBJPROP_COLOR,CLR_NONE);
   ObjectSet(aMajor[pindex]+"_5",OBJPROP_COLOR,CLR_NONE);
   ObjectSet(aMajor[pindex],OBJPROP_COLOR,CLR_NONE);
   ObjectSet(aMajor[pindex]+"p",OBJPROP_COLOR,CLR_NONE);
   }

   ObjectSet("line1",OBJPROP_COLOR,CLR_NONE);
   ObjectSet("line2",OBJPROP_COLOR,CLR_NONE);
  }

void paintCurr(int pindex, double value)
{
  if (value > 0) ObjectSet(aMajor[pindex]+"_5",OBJPROP_COLOR,Red);
  if (value > 2) ObjectSet(aMajor[pindex]+"_4",OBJPROP_COLOR,Orange);
  if (value > 4) ObjectSet(aMajor[pindex]+"_3",OBJPROP_COLOR,Gold);
  if (value > 6) ObjectSet(aMajor[pindex]+"_2",OBJPROP_COLOR,YellowGreen);
  if (value > 7) ObjectSet(aMajor[pindex]+"_1",OBJPROP_COLOR,Lime);
  ObjectSet(aMajor[pindex],OBJPROP_COLOR,SkyBlue);
  ObjectSetText(aMajor[pindex]+"p",DoubleToStr(value,1),8,"Arial Narrow",Silver);
}

void paintLine()
  {
   ObjectSet("line1",OBJPROP_COLOR,DimGray);
   ObjectSet("line2",OBJPROP_COLOR,DimGray);
  }
Read more >>

Multi_Lot_Scalper

Silakan Copy script Dibawah ini :



//+------------------------------------------------------------------+
//|                                Multi_Lot_Scalper(10points 3).mq4 |
//|                              Copyright © 2005, Alejandro Galindo |
//|                                              http://elCactus.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Alejandro Galindo"
#property link      "http://elCactus.com"
//----
extern double TakeProfit = 40;
extern double Lots = 0.1;
extern double InitialStop = 0;
extern double TrailingStop = 20;
extern int MaxTrades = 10;
extern int Pips = 15;
extern int SecureProfit = 10;
extern int AccountProtection = 1;
extern int OrderstoProtect = 3;
extern int ReverseCondition = 0;
extern double EURUSDPipValue = 10;
extern double GBPUSDPipValue = 10;
extern double USDCHFPipValue = 10;
extern double USDJPYPipValue = 9.715;
extern int StartYear = 2005;
extern int StartMonth = 1;
extern int EndYear = 2006;
extern int EndMonth = 12;
extern int EndHour = 22;
extern int EndMinute = 30;
extern int mm = 0;
extern int risk = 12;
extern int AccountisNormal = 0;
//----
int  OpenOrders = 0, cnt = 0;
int  slippage = 5;
double sl = 0, tp = 0;
double BuyPrice = 0, SellPrice = 0;
double lotsi = 0, mylotsi = 0;
int mode = 0, myOrderType = 0;
bool ContinueOpening = True;
double LastPrice = 0;
int  PreviousOpenOrders = 0;
double Profit = 0;
int LastTicket = 0, LastType = 0;
double LastClosePrice = 0, LastLots = 0;
double Pivot = 0;
double PipValue = 0;
string text = "", text2 = "";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(AccountisNormal == 1)
     if(mm != 0)
         lotsi = MathCeil(AccountBalance()*risk/10000);
    else
        lotsi=Lots;
   else
       // then is mini
       if(mm != 0)
           lotsi = MathCeil(AccountBalance()*risk / 10000) / 10;
    else
        lotsi = Lots;
//----
   if(lotsi > 100)
       lotsi = 100;
   OpenOrders = 0;
//----
   for(cnt = 0; cnt < OrdersTotal(); cnt++)  
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     //----
       if(OrderSymbol() == Symbol())
        OpenOrders++;
     }      
//----
   if(OpenOrders < 1)
     {
     if(TimeYear(CurTime()) < StartYear)
         return(0);
     //----
       if(TimeMonth(CurTime()) < StartMonth)
         return(0);
     //----
       if(TimeYear(CurTime()) > EndYear)
         return(0);
     //----
       if(TimeMonth(CurTime()) > EndMonth )
         return(0);
     }
//----
   if(Symbol() == "EURUSD")
       PipValue = EURUSDPipValue;
//----
   if(Symbol() == "GBPUSD")
       PipValue = GBPUSDPipValue;
//----
   if(Symbol() == "USDJPY")
       PipValue = USDJPYPipValue;
//----
   if(Symbol() == "USDCHF")
       PipValue = USDCHFPipValue;
//----
   if(PipValue == 0)
     {
       PipValue = 5;
     }
//----
   if(PreviousOpenOrders > OpenOrders)
     for(cnt = OrdersTotal(); cnt >= 0; cnt--)
       {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
        mode = OrderType();
        //----
           if(OrderSymbol() == Symbol())
          {
           if(mode == OP_BUY)
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Blue);
           //----
               if(mode == OP_SELL)
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Red);
           return(0);
          }
       }
   PreviousOpenOrders = OpenOrders;
//----
   if(OpenOrders >= MaxTrades)
     ContinueOpening = False;
   else
     ContinueOpening = True;
//----
   if(LastPrice == 0)
     for(cnt = 0; cnt < OrdersTotal(); cnt++)
       {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
        mode = OrderType();
        //----
           if(OrderSymbol() == Symbol())
          {
           LastPrice = OrderOpenPrice();
           //----
               if(mode == OP_BUY)
               myOrderType = 2;
           //----
               if(mode == OP_SELL)
               myOrderType = 1;
          }
       }
//----
   if(OpenOrders < 1)
     {
     myOrderType = 3;
     //----
       if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) >
        iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 1))
         myOrderType = 2;
     //----
       if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) <
        iMACD(NULL,0,14,26,9,PRICE_CLOSE, MODE_MAIN, 1))
         myOrderType = 1;
     //----
       if(ReverseCondition == 1)
        if(myOrderType == 1)
            myOrderType = 2;
        else
            if(myOrderType == 2)
                myOrderType=1;
     }
   // if we have opened positions we take care of them
   for(cnt = OrdersTotal(); cnt >= 0; cnt--)
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     //----
       if(OrderSymbol() == Symbol())
       {
        if(OrderType() == OP_SELL)
           if(TrailingStop > 0)
              if(OrderOpenPrice() - Ask >= (TrailingStop + Pips)*Point)
                 if(OrderStopLoss() > (Ask + Point*TrailingStop))
                   {
                     OrderModify(OrderTicket(), OrderOpenPrice(),
                                 Ask + Point*TrailingStop, OrderClosePrice() -
                                 TakeProfit*Point - TrailingStop*Point, 800, Purple);
                    return(0);  
                   }
        if(OrderType() == OP_BUY)
           if(TrailingStop > 0)
               if(Bid - OrderOpenPrice() >= (TrailingStop + Pips)*Point)
                 if(OrderStopLoss() < (Bid - Point*TrailingStop))
                   {  
                     OrderModify(OrderTicket(), OrderOpenPrice(),
                                 Bid - Point*TrailingStop, OrderClosePrice() +
                                 TakeProfit*Point + TrailingStop*Point, 800, Yellow);
                           return(0);
                   }
        }
     }
   Profit = 0;
   LastTicket = 0;
   LastType = 0;
 LastClosePrice = 0;
 LastLots = 0;
//----
 for(cnt = 0; cnt < OrdersTotal(); cnt++)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     //----
       if(OrderSymbol() == Symbol())
       {
        LastTicket = OrderTicket();
       //----
           if(OrderType() == OP_BUY)
           LastType = OP_BUY;
       //----
           if(OrderType() == OP_SELL)
           LastType = OP_SELL;
       LastClosePrice = OrderClosePrice();
       LastLots = OrderLots();
       //----
           if(LastType == OP_BUY)
         {
          if(OrderClosePrice() < OrderOpenPrice())
             Profit = Profit - (OrderOpenPrice() - OrderClosePrice())*OrderLots() /
                      Point;
          //----
               if(OrderClosePrice() > OrderOpenPrice())
             Profit = Profit + (OrderClosePrice() - OrderOpenPrice())*OrderLots() /
                      Point;
         }
       //----
           if(LastType==OP_SELL)
         {
          if(OrderClosePrice() > OrderOpenPrice())
             Profit = Profit - (OrderClosePrice() - OrderOpenPrice())*OrderLots() /
                      Point;
          //----
               if(OrderClosePrice() < OrderOpenPrice())
             Profit = Profit + (OrderOpenPrice() - OrderClosePrice())*OrderLots() /
                      Point;
         }
       }
     }
 Profit = Profit*PipValue;
 text2 = "Profit: $" + DoubleToStr(Profit,2) + " +/-";
//----
   if(OpenOrders >= (MaxTrades - OrderstoProtect) && AccountProtection == 1)
     if(Profit >= SecureProfit)
       {
         OrderClose(LastTicket, LastLots, LastClosePrice, slippage, Yellow);
         ContinueOpening = False;
         return(0);
       }
//----
   if(!IsTesting())
     {
     if(myOrderType == 3)
         text="No conditions to open trades";
     else
         text="                         ";
     Comment("LastPrice=", LastPrice, " Previous open orders=", PreviousOpenOrders,
             "\nContinue opening=", ContinueOpening, " OrderType=", myOrderType, "\n",
             text2, "\nLots=", lotsi, "\n", text);
     }
//----
   if(myOrderType == 1 && ContinueOpening)
     {
       if((Bid - LastPrice) >= Pips*Point || OpenOrders < 1)
         {
           SellPrice = Bid;
           LastPrice = 0;
           //----
           if(TakeProfit == 0)
               tp = 0;
           else
               tp = SellPrice - TakeProfit*Point;
           //----
           if(InitialStop == 0)
               sl = 0;
           else
               sl = SellPrice + InitialStop*Point;
           //----
           if(OpenOrders != 0)
             {
               mylotsi = lotsi;
               //----
               for(cnt = 1; cnt <= OpenOrders; cnt++)
                 if(MaxTrades > 12)
                     mylotsi = NormalizeDouble(mylotsi*1.5, 1);
                 else
                     mylotsi = NormalizeDouble(mylotsi*2, 1);
          }
        else
            mylotsi=lotsi;
        //----
           if(mylotsi > 100)
            mylotsi = 100;
        OrderSend(Symbol(), OP_SELL, mylotsi, SellPrice, slippage, sl, tp, NULL, 0, 0,
                  Red);      
        return(0);
       }
     }    
   if(myOrderType == 2 && ContinueOpening)
     {
       if((LastPrice-Ask) >= Pips*Point || OpenOrders < 1)
         {
           BuyPrice = Ask;
           LastPrice = 0;
           //----
           if(TakeProfit == 0)
               tp = 0;
           else
               tp = BuyPrice + TakeProfit*Point;
           //----
           if(InitialStop==0)
               sl = 0;
           else
               sl = BuyPrice - InitialStop*Point;
           //----
           if(OpenOrders != 0)
             {
               mylotsi = lotsi;
               for(cnt = 1; cnt <= OpenOrders; cnt++)
                 if(MaxTrades > 12)
                     mylotsi = NormalizeDouble(mylotsi*1.5, 1);
                 else
                     mylotsi = NormalizeDouble(mylotsi*2, 1);
             }
           else
               mylotsi = lotsi;
           //----
           if(mylotsi > 100)
               mylotsi = 100;
           OrderSend(Symbol(), OP_BUY, mylotsi, BuyPrice, slippage, sl, tp, NULL, 0, 0,
                     Blue);  
           return(0);
         }
     }  
//----
   return(0);
  }
//+------------------------------------------------------------------+
Read more >>

Super_Trend

Silakan Copy script di bawah ini:



//+------------------------------------------------------------------+
//|                                              SuperTrend.mq4 v1.2 |
//|                   Copyright © 2008, Jason Robinson (jnrtrading). |
//|                                   http://www.spreadtrade2win.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Jason Robinson."
#property link      "http://www.spreadtrade2win.com"

#property indicator_chart_window
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_buffers 2
double TrendUp[], TrendDown[];
int changeOfTrend;
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0, TrendUp);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexLabel(0, "Trend Up");
   SetIndexBuffer(1, TrendDown);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexLabel(1, "Trend Down");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit, i, flag, flagh, trend[5000];
   double up[5000], dn[5000], medianPrice, atr;
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) counted_bars--;
   limit=Bars-counted_bars;
   //Print(limit);
 
//----
   for (i = Bars; i >= 0; i--) {
      TrendUp[i] = EMPTY_VALUE;
      TrendDown[i] = EMPTY_VALUE;
      atr = iATR(NULL, 0, Nbr_Periods, i);
      //Print("atr: "+atr[i]);
      medianPrice = (High[i]+Low[i])/2;
      //Print("medianPrice: "+medianPrice[i]);
      up[i]=medianPrice+(Multiplier*atr);
      //Print("up: "+up[i]);
      dn[i]=medianPrice-(Multiplier*atr);
      //Print("dn: "+dn[i]);
      trend[i]=1;
 
     
      if (Close[i]>up[i+1]) {
         trend[i]=1;
         if (trend[i+1] == -1) changeOfTrend = 1;
         //Print("trend: "+trend[i]);
       
      }
      else if (Close[i]<dn[i+1]) {
         trend[i]=-1;
         if (trend[i+1] == 1) changeOfTrend = 1;
         //Print("trend: "+trend[i]);
      }
      else if (trend[i+1]==1) {
         trend[i]=1;
         changeOfTrend = 0;      
      }
      else if (trend[i+1]==-1) {
         trend[i]=-1;
         changeOfTrend = 0;
      }

      if (trend[i]<0 && trend[i+1]>0) {
         flag=1;
         //Print("flag: "+flag);
      }
      else {
         flag=0;
         //Print("flagh: "+flag);
      }
     
      if (trend[i]>0 && trend[i+1]<0) {
         flagh=1;
         //Print("flagh: "+flagh);
      }
      else {
         flagh=0;
         //Print("flagh: "+flagh);
      }
     
      if (trend[i]>0 && dn[i]<dn[i+1])
         dn[i]=dn[i+1];
     
      if (trend[i]<0 && up[i]>up[i+1])
         up[i]=up[i+1];
     
      if (flag==1)
         up[i]=medianPrice+(Multiplier*atr);
       
      if (flagh==1)
         dn[i]=medianPrice-(Multiplier*atr);
       
      //-- Draw the indicator
      if (trend[i]==1) {
         TrendUp[i]=dn[i];
         if (changeOfTrend == 1) {
            TrendUp[i+1] = TrendDown[i+1];
            changeOfTrend = 0;
         }
      }
      else if (trend[i]==-1) {
         TrendDown[i]=up[i];
         if (changeOfTrend == 1) {
            TrendDown[i+1] = TrendUp[i+1];
            changeOfTrend = 0;
         }
      }
   }
   WindowRedraw();
     
//----
   return(0);
  }
//+------------------------------------------------------------------+
Read more >>