Author: Copyright � 2009, Koss
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 prices of each barSeries array that contains close prices for each bar
Orders Execution
Checks for the total of open ordersChecks for the total of closed orders
Indicators Used
Moving average indicator
Miscellaneous
It issuies visual alerts to the screenImplements a curve of type %1
0 Views
0 Downloads
0 Favorites
MCP_v3
//+------------------------------------------------------------------+
//|                                                  MultiCharts.mq4 |
//|                                           Copyright © 2009, Koss |
//|                                                  kosmic@inbox.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Koss"
#property link      "kosmic@inbox.ru"

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_minimum -15
#property indicator_maximum 115

#import "user32.dll"
   int GetWindowDC(int dc);
   int ReleaseDC(int h, int dc);
  bool GetWindowRect(int h, int& pos[4]);
   /*int GetParent(int h);
   int GetTopWindow(int h);*/
#import
#import "gdi32.dll"
   int GetPixel(int dc, int x, int y);
#import



extern color  BearCandleColor    = Lime;
extern color  BullCandleColor    = White;
extern color  TextColor          = Gold;
extern color  ProfitColor        = ForestGreen;
extern color  LossColor          = Red;
extern color  TakeProfitColor    = LimeGreen;
extern color  StopLossColor      = IndianRed;
extern color  FastMA_Color       = Gold;
extern color  SlowMA_Color       = OrangeRed;
extern int    FastMA_Period      = 21;
extern int    SlowMA_Period      = 38;
extern int    MA_Metod           = 0;
extern int    Applied_Price      = 0;
extern bool   UseMovingAverages  =false;
extern bool   UseHeikenAshiChart =false;
extern bool   ViewOHLC           =true;
extern bool   FifthDigit         =true;
extern bool   ViewOrders         =true;
extern int    ProfitCalcMode     = 0;                               // ñïîñîá ðàñ÷åòà ïðèáûëè 0-â ïóíêòàõ, 1-â âàëþòå äåïîçèòà    
extern int    Charts             =5;
extern string Chart1             ="EURUSD";
extern string Chart2             ="GBPUSD";
extern string Chart3             ="AUDUSD";
extern string Chart4             ="USDCAD";
extern string Chart5             ="USDCHF";

//+------------------------------------------------------------------+
//| êîíñòàíòû                                                        |
//+------------------------------------------------------------------+
#define TotalCharts                                        5

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double SlowMABuffer[];
double FastMABuffer[];


//----
int    CandelsCountOnWindow=0,
       Frame,
       hWnd,
       Win_Charts,
       CandleWidth,
       HistoWidth,
       MAWidth=1,
       TimeFrame,
       MA,
       Ap_Price,
       idWnd;

       
color  Win_color;
color  clNames[TotalCharts];                            // Ìàññèâ öâåòà
double ChartValues[6][4];                               // Ìàññèâ äëÿ õðàíåíèÿ min,max,(max-min)/100;
double TotalOrders[6][31][8];                           // ìàñèâ äëÿ ó÷åòà îðäåðîâ ïî êàæäîìó èíñòðóìåíòó
   int TotalBars[TotalCharts];                          // Ìàññèâ õðàíèò êîëè÷åñòâî áàðîâ ïîäêà÷åííîé èñòîðèè 
datetime FrameThresolds[6][3];                          // Ìàññèâ äëÿ õðàíåíèÿ ãðàíèö ÿ÷åéêè (äàòà/âðåìÿ)
     
static datetime ÒicTime[TotalCharts],
                ZeroBarTime[TotalCharts];
int    Hystory[TotalCharts];
string Win_Name,
       ChartNames[TotalCharts];
string Periods[9][2]    ={  "1", ",M1",
                            "5", ",M5",
                           "15", ",M15",
                           "30", ",M30",
                           "60", ",H1",
                          "240", ",H4",
                         "1440", ",Daily",
                        "10080", ",Weekly",
                        "43200", ",Monthly"}; 
int    Accounts[]   ={0,0,0};                           // Ìàññèâ äëÿ õðàíåíèÿ íîìåðîâ ñ÷åòîâ                              
bool   StartTerminal=true;
bool   Work=true;
bool   ViewCandleCodes=false;
double open,close,high,low,min,max,point,price,haopen, hahigh, halow, haclose,FastMA,SlowMA;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   TimeFrame=Period();
   Win_Name             = "TFS";
   IndicatorShortName(Win_Name);
   idWnd=WindowFind(Win_Name);
   DeleteAllObjects(OBJ_TEXT); 
   DeleteAllObjects(OBJ_LABEL); 
   DeleteAllObjects(OBJ_TREND);
         Win_color   = GetWndColor(Symbol()); 
         CandleWidth = GetCandleWidth(Symbol());
          
         if (Charts<1 || Charts>5)                Win_Charts=5;
           else Win_Charts  = Charts; 
          
         if (MA_Metod<0 || MA_Metod>3)            MA=0;
           else MA=MA_Metod;
           
         if (Applied_Price<0 || Applied_Price>6)  Ap_Price=0;
           else Ap_Price=Applied_Price;
           
        
   if (!IsDllsAllowed())
   {
    Alert("Äëÿ íîðìàëüíîé ðàáîòû èíäèêàòîðà íåîáõîäèìî ðàçðåøèòü èìïîðò èç DLL");
    return(0);
   }
   else
   { 
     if (WindowBarsPerChart()!=0)
        {
         ChartsInit();
         CandelsCountOnWindow=WindowBarsPerChart();
         Frame = MathRound((CandelsCountOnWindow-3)/Win_Charts);
         switch(CandleWidth)
            {
             case 1:  HistoWidth=0;
                      MAWidth=1;    break;
             case 2:  HistoWidth=0;
                      MAWidth=1;    break;
             case 4:  HistoWidth=2;
                      MAWidth=1;    break;
             case 8:  HistoWidth=3; 
                      MAWidth=2;    break;
             case 16: HistoWidth=7; 
                      MAWidth=2;    break;
             case 32: HistoWidth=13;
                      MAWidth=3;    break;
            }
        
        IndicatorSets(false); 
         
        } 
        
    return(0);
   }
   
  }
  
   
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if(IsConnected() && WindowBarsPerChart()!=0 && Bars!=0 && AccountNumber()!=0 && Work) 
      {
       if  (StartTerminal)
        {
         if (SearchAccount(AccountNumber()))
           {
            int counted_bars=IndicatorCounted();
            if(counted_bars<=0)
             { 
              Print("Îáíîâëåíèå....");
              return(0);
             } 
             else 
             {
              StartTerminal=false;
             } 
           }
           else 
           {
            Work=false;
            Print("Íåâåðíûé ñ÷åò!");
            return(0);
           } 
          
        } 
        else 
        {
         if (!WndRepaint())
          {
           SymbolÒic();
          }
        }
        
       }  
       else
       {
        if (Work)
         {
          CleanHisto();
          init();
         } 
       } 
       return(0);     
       
  }  
  
int deinit()
   {
    if (UninitializeReason()==REASON_CHARTCHANGE)
     {
      Print("Ñìåíà ïåðèîäà");
     }
   } 
   
//+------------------------------------------------------------------+
//|Ïîèñê ¹ ñ÷åòà, åñëè ñ÷åò íàéäåí òî ïðîäîëæàåì ðàáîòó              |
//+------------------------------------------------------------------+
   
bool SearchAccount(int Number)
   {
    bool result=false;
    if (Number!=0)
     {
      /*for (int i=0;i<=2;i++)
       {
        if (Accounts[i]==Number)
         {
          result=true;
          break;
         } 
       }*/
       result=true; 
     }
     return(result);
   }
   
//+------------------------------------------------------------------+
//|âîçâðàùàåò öâåò ôîíà îêíà òåêóùåãî ãðôèêà                         |
//+------------------------------------------------------------------+
  
int GetWndColor(string sy)
   { 
     int hWnd = WindowHandle(sy, Period());
     int hDC = GetWindowDC(hWnd);
     int rect[4];
     GetWindowRect(hWnd, rect);
     int wW = rect[2] - rect[0];         // øèðèíà îêíà
     int wH = rect[3] - rect[1];         // âûñîòà îêíà
     
     int col = GetPixel(hDC, 2, 2);
     if(col==-1)                         // ëåâûé âåðõíèé óãîë íå âèäåí
     {
       col = GetPixel(hDC, wW-3, wH-3); 
       if(col==-1)                       // ïðàâûé íèæíèé óãîë íå âèäåí
       col = GetPixel(hDC, 2, wH-3); 
       if(col==-1)                       // ëåâûé íèæíèé óãîë íå âèäåí
       col = GetPixel(hDC, wW-3, 2);     
       if(col==-1)                       // ïðàâûé âåðõíèé óãîë íå âèäåí
       {
         ReleaseDC(hWnd, hDC);
         return(Win_color);
       }
      }
     ReleaseDC(hWnd, hDC);
     return(col);
   }
   

void ChartsInit()
   {
    LoadChartsNames();
    InitArrays();
   } 
 
void LoadChartsNames()
   {
    ChartNames[0]=Chart1;
    ChartNames[1]=Chart2;
    ChartNames[2]=Chart3;
    ChartNames[3]=Chart4;
    ChartNames[4]=Chart5;
   }
   
void InitArrays()
   {
    ArrayInitialize(Hystory,0);
    ArrayInitialize(TotalBars,0);
    ArrayInitialize(TotalOrders,0);
    ArrayInitialize(FrameThresolds,0);
    for(int i=0;i<=Win_Charts-1;i++)
      {
       ZeroBarTime[i]=0;
       ÒicTime[i]=0;
       clNames[i]=BullCandleColor;
       continue;
      }
   }    
   
void LoadChartsValues()
   {
   
    DeleteAllObjects(OBJ_TREND);
    for(int i=0;i<=Win_Charts-1;i++) 
     {
      UpgradeCharts(i);
      continue;
     }
    
   }

void UpgradeCharts(int ChartListPosition)
   { 
   
     int j;
     double min,max;
     string Symb=ChartNames[ChartListPosition];
     if (Hystory[ChartListPosition]==1)
      {
       max=iHigh(Symb,0,0);
       min=iLow(Symb,0,0);
       for (j=0;j<=Frame-4;j++)
         {
          if (iHigh(Symb,0,j)>max) 
           {
            max=iHigh(Symb,0,j);
           }
          if (iLow(Symb,0,j)<min) 
           {
            min=iLow(Symb,0,j);
           }
         }
       ChartValues[ChartListPosition+1,1]=((max-min)/100);
       ChartValues[ChartListPosition+1,2]= max;
       ChartValues[ChartListPosition+1,3]= min;
       CleanFrame(ChartListPosition+1);
       DrawChart(ChartListPosition);
       if (ViewOHLC) OHLC(ChartListPosition);
       MonitoringOpenPositions(ChartListPosition);
      } 
      else
      {
       ChartValues[ChartListPosition+1,1]=0;
       ChartValues[ChartListPosition+1,2]=0;
       ChartValues[ChartListPosition+1,3]=0;
       CleanFrame(ChartListPosition+1);
       ChartName(ChartListPosition,clNames[ChartListPosition]," ");
      }
       DrawSeparateLines(ChartListPosition);
       ChartValues[0,0]=ChartListPosition+1;
       CellThresolds(ChartListPosition);
      
   }
      
//+------------------------------------------------------------------+
//|Îáíîâëåíèå äàííûõ                                                 |
//+------------------------------------------------------------------+
   
int RefreshRate(int ChartListPosition)
   {
     string   Symb;
     Symb=ChartNames[ChartListPosition];
     return(CopyRates(Symb,ChartListPosition));
   }
   
int CopyRates(string Symb, int ChartListPosition )
   {
    datetime times[];
    int error,CountedBars=0;
   CountedBars=ArrayCopySeries(times,MODE_TIME,Symb,0);
    if(CountedBars<=0)
      {
       Print("Not enough bars, exiting...");
       return(0);
      }
    error=GetLastError();
    if(error==4066)
     {
      Print(Symb+",Çàïðîøåííûå äàííûå â ïðîöåññå îáíîâëåíèÿ!");
      return(0);
     }
    if((iTime(Symb,0,0)==times[0] && iTime(Symb,0,0)==Time[0])&& 
       (iTime(Symb,0,1)==times[1] && iTime(Symb,0,1)==Time[1])&& 
       (iTime(Symb,0,2)==times[2] && iTime(Symb,0,2)==Time[2]) )
       {
       if (!UseHeikenAshiChart)
         {
           ZeroBarTime[ChartListPosition]=iTime(Symb,0,0);
           TotalBars[ChartListPosition]=CountedBars; 
         
         }  
           return(1);
       }
       else
       {
        Print(Symb+",Îòñóòñòâèå èñòîðè÷åñêèõ äàííûõ");
        return(0); 
       }
  
   }   
//+------------------------------------------------------------------+
//|îòðèñîâêà íàçâàíèé èíñòðóìåíòîâ è ïðî÷èõ íàäïèñåé                 |
//+------------------------------------------------------------------+

void ChartName(int ChartListPosition,color clPosition,string txPosition)
   {
   
    int k=MathRound(Frame/2);
   
      if (ChartListPosition==0)
       {
        DrawChartsName(ChartListPosition,k,clPosition,txPosition);
       }
        else
       {
        DrawChartsName(ChartListPosition,k+ChartListPosition*Frame,clPosition,txPosition);
       }
    }
    
void DrawChartsName(int ChartListPosition,int Bar,color clPosition,string txPosition)
   {
    
    string TF,name,Symb=ChartNames[ChartListPosition];                     
    
    for(int p=0; p<9; p++)
       {
        if(Periods[p][0]==DoubleToStr(TimeFrame,0)) TF=Periods[p][1];
       }
    
    name="Chart"+Symb; 
   
    if (!UseHeikenAshiChart)
         {
          CleanText(name);
          CleanText("Update "+name);
          CreateTextObject(name, Time[Bar],113,Symb+TF+txPosition,clPosition,Bar,"tahoma",7); 
          if (Hystory[ChartListPosition]==0 || !IsConnected())
           {
            CreateTextObject("Update "+name, Time[Bar],55,"ÎÆÈÄÀÍÈÅ ÎÁÍÎÂËÅÍÈß...",BullCandleColor,Bar,"tahoma",7); 
           }
         }
         else
         {
          CleanText(name);
          CleanText("Update "+name);
          CreateTextObject(name, Time[Bar],113,Symb+TF+" (HA)"+txPosition,clPosition,Bar,"tahoma",7); 
           if (Hystory[ChartListPosition]==0 || !IsConnected())
           {
            CreateTextObject("Update "+name, Time[Bar],55,"ÎÆÈÄÀÍÈÅ ÎÁÍÎÂËÅÍÈß...",BullCandleColor,Bar,"tahoma",7); 
           } 
         } 
   }   


void OHLC(int ChartListPosition)
   {

    int k=MathRound(Frame/2),p=Frame-(Frame-5);
   
      if (ChartListPosition==0)
       {
        DrawOHLC(ChartListPosition,k);
        DrawMaxMinValues(ChartListPosition,p);
       }
        else
       {
        DrawOHLC(ChartListPosition,k+ChartListPosition*Frame);
        DrawMaxMinValues(ChartListPosition,p+ChartListPosition*Frame);
       }
      InfoPosition(ChartListPosition);
   }
   
void DrawOHLC(int ChartListPosition,int Bar)
   { 
    double dig,high,open,low,close,Zlow,Zhigh;
       string Symb=ChartNames[ChartListPosition],ohlc,name,codes,cc;
       name="OHLC "+Symb;
       RefreshRates();
       dig=MarketInfo(Symb,MODE_DIGITS);
    
       if (!UseHeikenAshiChart)
         {
          high=NormalizeDouble(Hi(Symb,0,0),dig);
          open=NormalizeDouble(Op(Symb,0,0),dig);
          close=NormalizeDouble(Cl(Symb,0,0),dig);
          low=NormalizeDouble(Lo(Symb,0,0),dig);
          ohlc=DoubleToStr(open,dig)+"  "+DoubleToStr(high,dig)+"  "+DoubleToStr(low,dig)+"  "+DoubleToStr(close,dig);
          /*ohlc=TimeToStr(FrameThresolds[ChartListPosition+1][1],TIME_DATE|TIME_MINUTES)+" "+TimeToStr(FrameThresolds[ChartListPosition+1][2],TIME_DATE|TIME_MINUTES);*/
          CleanText(name);
          CreateTextObject(name, Time[Bar],-7,ohlc,clNames[ChartListPosition],Bar,"tahoma",8); 
         }
         else
         {
          high=NormalizeDouble(Hi(Symb,0,0),dig);
          low=NormalizeDouble(Lo(Symb,0,0),dig);
          open=iCustom(Symb,0,"Heiken Ashi",2,0);
          close=iCustom(Symb,0,"Heiken Ashi",3,0);
          Zhigh=MathMax(high, MathMax(open, close));
          Zlow=MathMin(low, MathMin(open, close));
          ohlc=DoubleToStr(open,dig)+"  "+DoubleToStr(Zhigh,dig)+"  "+DoubleToStr(Zlow,dig)+"  "+DoubleToStr(close,dig);
          CleanText(name);
          CreateTextObject(name, Time[Bar],-7,ohlc,clNames[ChartListPosition],Bar,"tahoma",8); 
         }  
   } 
   

void InfoPosition(int ChartListPosition)
   {
     int pos=Frame-3;
      if (ChartListPosition==0)
       {
         DrawInfoPosition(ChartListPosition,pos);   
       }
        else
       {
         DrawInfoPosition(ChartListPosition,pos+ChartListPosition*Frame); 
       }
   }
     
void DrawInfoPosition(int ChartListPosition,int Bar)     
   {
    string name,text,Symb=ChartNames[ChartListPosition];
     name=" Spread "+Symb;
     double percent=GetPercent(ChartListPosition);
     if (FifthDigit)
      {
       text=DoubleToStr(MarketInfo(Symb,MODE_SPREAD),0);
      }
      else
      {
       text=DoubleToStr(MarketInfo(Symb,MODE_SPREAD)/10,1);
      } 
     CleanText(name);
     CreateTextObject(name, Time[Bar],106,text,TextColor,Bar,"tahoma",7);

     name=" Percent "+Symb;
     CleanText(name);
     text=DoubleToStr(percent,2)+"%"; 
     if (percent>0)
      {     
       CreateTextObject(name, Time[Bar-2],-1,text,ProfitColor,Bar,"tahoma",7);
      } 
      else
      {
       if (percent<0)
        {
          CreateTextObject(name, Time[Bar-2],-1,text,LossColor,Bar,"tahoma",7);
        }
       if (percent==0) 
        {
          CreateTextObject(name, Time[Bar-2],-1,text,TextColor,Bar,"tahoma",7);
        }
      }
   }
   

      
void DrawMaxMinValues(int ChartListPosition,int Bar)
   {
    string name,name1,Value,Symb=ChartNames[ChartListPosition];
     name="Max "+Symb;
     name1="Min "+Symb;
     
     Value=DoubleToStr(ChartValues[ChartListPosition+1,2],MarketInfo(Symb,MODE_DIGITS));
     CleanText(name);
     CreateTextObject(name, Time[Bar],106,Value,TextColor,Bar,"tahoma",7);
     
     Value=DoubleToStr(ChartValues[ChartListPosition+1,3],MarketInfo(Symb,MODE_DIGITS));
     CleanText(name1); 
     CreateTextObject(name1, Time[Bar],-1,Value,TextColor,Bar,"tahoma",7);
   } 

void CleanText(string objName)
   {
    ObjectDelete(objName);
   }
 
//+------------------------------------------------------------------+
//|óäàëåíèå ãðàôèêà îïðåäåëåííîãî èíñòðóìåíòà                        |
//+------------------------------------------------------------------+
   
void CleanFrame(int ChartListPosition)
   {
   
    int i;
    if (ChartListPosition==1)
     {
       if (ChartListPosition!=Win_Charts)
        {
         for(i=0;i<=Frame;i++)
           {
           
            CleanBuffers(i);
           }
         }  
        else
        {
         for(i=0;i<=Bars;i++)
           {
           
            CleanBuffers(i);
           }
        } 
       
     }
     else
     {
      if (ChartListPosition!=Win_Charts)
        {
         for(i=ChartListPosition*Frame;i>=(ChartListPosition-1)*Frame;i--)
         {
         
          CleanBuffers(i);
         } 
        }
        else
        {
         for(i=(ChartListPosition-1)*Frame;i<Bars;i++)
         {
         
          CleanBuffers(i);
         } 
        } 
     }
    
   }  
   
//+------------------------------------------------------------------+
//|ôóíêöèÿ ñëåæåíèÿ çà èçìåíåíèÿìè  îêíà òåêóùåãî ãðàôèêà            |
//+------------------------------------------------------------------+
      
bool WndRepaint()
   {
     if ( Win_color   != GetWndColor(Symbol())    || 
          CandleWidth != GetCandleWidth(Symbol()) || 
          CandelsCountOnWindow!=WindowBarsPerChart() )
       { 
         CleanHisto();
         CandelsCountOnWindow=WindowBarsPerChart();
         Frame = MathRound((CandelsCountOnWindow-3)/Win_Charts); 
         Win_color   = GetWndColor(Symbol());
         CandleWidth=GetCandleWidth(Symbol());
         switch(CandleWidth)
            {
             case 1:  HistoWidth=0;
                      MAWidth=1;    break;
             case 2:  HistoWidth=0;
                      MAWidth=1;    break;
             case 4:  HistoWidth=2;
                      MAWidth=1;    break;
             case 8:  HistoWidth=3; 
                      MAWidth=2;    break;
             case 16: HistoWidth=7; 
                      MAWidth=2;    break;
             case 32: HistoWidth=13;
                      MAWidth=3;    break;
            }
    
         IndicatorSets(true);
         return(true);
        }
        
      return(false);  
   }    
   
//+------------------------------------------------------------------+
//|óñòàíîâêè èíäèêàòîðà                                              |
//+------------------------------------------------------------------+
   
void IndicatorSets(bool Repaint)
   {
        
         /*ArrayInitialize(ChartValues,0.0); */       
         SetIndexStyle(0,DRAW_HISTOGRAM, 0, HistoWidth, BearCandleColor);
         SetIndexBuffer(0, ExtMapBuffer1);
         SetIndexDrawBegin(0,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(0,"");
          
         SetIndexStyle(1,DRAW_HISTOGRAM, 0, HistoWidth, BullCandleColor);
         SetIndexBuffer(1, ExtMapBuffer2);
         SetIndexDrawBegin(1,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(1,"");
         
         SetIndexStyle(2,DRAW_HISTOGRAM, 0, HistoWidth, Win_color);
         SetIndexBuffer(2, ExtMapBuffer3);
         SetIndexDrawBegin(2,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(2,"");
         
         SetIndexStyle(3,DRAW_HISTOGRAM, 0, 1, BearCandleColor);
         SetIndexBuffer(3, ExtMapBuffer4);
         SetIndexDrawBegin(3,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(3,"");
         
         SetIndexStyle(4,DRAW_HISTOGRAM, 0, 1, BullCandleColor);
         SetIndexBuffer(4, ExtMapBuffer5);
         SetIndexDrawBegin(4,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(4,"");
         
         SetIndexStyle(5,DRAW_HISTOGRAM, 0, 1, Win_color);
         SetIndexBuffer(5, ExtMapBuffer6);
         SetIndexDrawBegin(5,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(5,"");
         
         SetIndexStyle(6,DRAW_LINE, 0, MAWidth, SlowMA_Color);
         SetIndexBuffer(6, SlowMABuffer);
         SetIndexDrawBegin(6,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(6,"");
          
         SetIndexStyle(7,DRAW_LINE,0,MAWidth,FastMA_Color);
         SetIndexBuffer(7, FastMABuffer);
         SetIndexDrawBegin(7,Bars-CandelsCountOnWindow-4);
         SetIndexLabel(7,"");
         
        if (Repaint)
         {
          LoadChartsValues();
         }
   }
 

          
//+------------------------------------------------------------------+
//|Âîçâðàùàåò øèðèíó áàðà                                            |
//+------------------------------------------------------------------+
          
int GetCandleWidth(string sy)
{
 
  int rect[4];
  int h=WindowHandle(sy, Period());
  if(h==0) return(-1);
  GetWindowRect(h, rect);
  int wW  = rect[2] - rect[0]; // øèðèíà îêíà
  int bpc = CandelsCountOnWindow;
  if(bpc==0) return(-1);
  return(MathFloor((wW-48)/bpc));
}  
 
/*bool isActive(string sy)
{
   int hCurrWindow = WindowHandle(sy,0);                      //õåäë òåêóùåãî îêíà ãðàôèêà
   int hNextParent = GetParent(hCurrWindow);
       hNextParent = GetParent(hNextParent);                  //õåíäï ðîäèòåëüñêîãî îêíî äëÿ âñåõ ãðàôèêîâ
   int hNextActiveWindow = GetTopWindow(hNextParent);
       hNextActiveWindow = GetTopWindow(hNextActiveWindow);   //õåäë òåêóùåãî îêíà ãðàôèêà
   if (hCurrWindow==hNextActiveWindow) return(true);
   else return(false); 
} */

   
double Op(string Symb,int period,int Bar)
   {
    return(iOpen(Symb,period,Bar));
   }     
 
double Cl(string Symb,int period,int Bar)
   {
    return(iClose(Symb,period,Bar));
   } 
   
double Hi(string Symb,int period,int Bar)
   {
    return(iHigh(Symb,period,Bar));
   }   
   
double Lo(string Symb,int period,int Bar) 
   {
    return(iLow(Symb,period,Bar));
   } 
    
//+------------------------------------------------------------------+
//|ôóíêöèÿ î÷èñòêè èíäèêàòîðíûõ ìàññèâîâ                             |
//+------------------------------------------------------------------+
   
void CleanBuffers(int i)
   {
    
      ExtMapBuffer1[i]=EMPTY_VALUE;
      ExtMapBuffer2[i]=EMPTY_VALUE;
      ExtMapBuffer3[i]=EMPTY_VALUE;
      ExtMapBuffer4[i]=EMPTY_VALUE;
      ExtMapBuffer5[i]=EMPTY_VALUE;
      ExtMapBuffer6[i]=EMPTY_VALUE;
      SlowMABuffer[i]=EMPTY_VALUE;
      FastMABuffer[i]=EMPTY_VALUE;
   
   }
   
//+------------------------------------------------------------------+
//|ïðîðèñîâêà èíñòðóìåíòà(âñåõ áàðîâ)                                |
//+------------------------------------------------------------------+

void DrawChart(int ChartListPosition)
   {
     int j;
     for(j=Frame-4;j>=0;j--)
       { 
         SetValues(j,ChartListPosition);
       }
       
   }
   
//+------------------------------------------------------------------+
//|ïðîðèñîâêà èíñòðóìåíòà(íóëåâîãî áàðà)                             |
//+------------------------------------------------------------------+ 

void DrawZeroBar(int ChartListPosition)   
   {
    double Zmin,Zmax,LastPrice; 
    string Symb=ChartNames[ChartListPosition];
       LastPrice=MarketInfo(Symb,MODE_BID);
       Zmin=ChartValues[ChartListPosition+1][3];
       Zmax=ChartValues[ChartListPosition+1][2];
             
       if (LastPrice<Zmin || LastPrice>Zmax)
        {
         UpgradeCharts(ChartListPosition);
        }
     
       SetValues(0,ChartListPosition);  
   }
   
void SetValues(int Bar,int ChartListPosition)
   {

    string Symb=ChartNames[ChartListPosition];

    min=ChartValues[ChartListPosition+1][3];
    point=ChartValues[ChartListPosition+1][1];
    if (!UseHeikenAshiChart)
        { 
         open = (Op(Symb,0,Bar)-min)/point;
         close= (Cl(Symb,0,Bar)-min)/point;
         high = (Hi(Symb,0,Bar)-min)/point;
         low  = (Lo(Symb,0,Bar)-min)/point;
         if (UseMovingAverages)
          {
            FastMA=(iMA(Symb,0,FastMA_Period,0,MA,Ap_Price,Bar)-min)/point;
            if (FastMA<0 || FastMA>100)
             {
              FastMA=EMPTY_VALUE;
             } 
          
            SlowMA=(iMA(Symb,0,SlowMA_Period,0,MA,Ap_Price,Bar)-min)/point;
            if (SlowMA<0 || SlowMA>100)
             {
              SlowMA=EMPTY_VALUE;
             }
          }
          else
          {
           FastMA=EMPTY_VALUE;
           SlowMA=EMPTY_VALUE;
          } 
          
         if (ChartListPosition==0)
          {
           DrawHisto(open,high,low,close,FastMA,SlowMA,Bar+2);
          }
          else
          {
           DrawHisto(open,high,low,close,FastMA,SlowMA,Bar+ChartListPosition*Frame+2); 
          }
        } 
        else
        { 
          high = (Hi(Symb,0,Bar)-min)/point;
          low  = (Lo(Symb,0,Bar)-min)/point;
          haopen=(iCustom(Symb,0,"Heiken Ashi",2,Bar)-min)/point;
          haclose=(iCustom(Symb,0,"Heiken Ashi",3,Bar)-min)/point;
          hahigh=MathMax(high, MathMax(haopen, haclose));
          halow=MathMin(low, MathMin(haopen, haclose));
          /*HaClose[ChartListPosition*Frame+Bar]=haclose;*/
          if (!UseMovingAverages)
           {
            FastMA=EMPTY_VALUE;
            SlowMA=EMPTY_VALUE;
           }
           else
           {
            FastMA=EMPTY_VALUE;
            SlowMA=EMPTY_VALUE; 
           } 
          
          if (ChartListPosition==0)
          {
           DrawHisto(haopen,hahigh,halow,haclose,FastMA,SlowMA,Bar+2);
          }
          else
          {
           DrawHisto(haopen,hahigh,halow,haclose,FastMA,SlowMA,Bar+ChartListPosition*Frame+2); 
          }
        } 
                 
   }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

void CellThresolds(int ChartListPosition)
   {
    FrameThresolds[ChartListPosition+1][1]=iTime(NULL,0,(ChartListPosition+1)*Frame-2);
    FrameThresolds[ChartListPosition+1][2]=iTime(NULL,0,(ChartListPosition+1)*Frame-2-(Frame-4));
   }    
//+------------------------------------------------------------------+
//| Óäàëåíèå âñåõ ÷àðòîâ                                             |
//+------------------------------------------------------------------+
   
void CleanHisto()
   {
    if (Bars!=0)
    {
    for(int i=0;i<=Bars-1;i++)
      {
       CleanBuffers(i);
       continue;
      }
    }  
   }
   
//+------------------------------------------------------------------+
//|ïðîðèñîâêà ðàçäåëèòåëüíûõ ëèíèé                                   |
//+------------------------------------------------------------------+
   
void DrawSeparateLines(int ChartListPosition)
   { 
    int value;
       value=ChartListPosition*Frame;
       ExtMapBuffer5[value]=106;
       value+=Frame;
       ExtMapBuffer5[value]=106;
   }  
       
//+------------------------------------------------------------------+
//|çàïîëíåíèå èíäèêàòîðíûõ ìàññèâîâ                                  |
//+------------------------------------------------------------------+

void DrawHisto(double O,double H,double L,double C,double ma,double ma1,int Bar)
   {
           
            if (O > C) 
             {
              ExtMapBuffer1[Bar]=O;
              ExtMapBuffer2[Bar]=EMPTY_VALUE; 
              ExtMapBuffer3[Bar]=C;
              ExtMapBuffer4[Bar]=H;
              ExtMapBuffer5[Bar]=EMPTY_VALUE;
              
             }
          
            if (O < C) 
             {
              ExtMapBuffer1[Bar]=EMPTY_VALUE;
              ExtMapBuffer2[Bar]=C; 
              ExtMapBuffer3[Bar]=O;
              ExtMapBuffer4[Bar]=EMPTY_VALUE;
              ExtMapBuffer5[Bar]=H;
              
             
             } 
          
            if (O == C) 
             {
              ExtMapBuffer1[Bar]=O;
              ExtMapBuffer2[Bar]=EMPTY_VALUE; 
              ExtMapBuffer3[Bar]=O; 
              ExtMapBuffer4[Bar]=EMPTY_VALUE;
              ExtMapBuffer5[Bar]=H;
              
           
             }   
             ExtMapBuffer6[Bar]=L;
             FastMABuffer[Bar]=ma;
             SlowMABuffer[Bar]=ma1; 
   } 
//+------------------------------------------------------------------+
//|Ñîçäàåò îáúåêò-òðåíäîâàÿ ëèíèÿ                                    |
//+------------------------------------------------------------------+

void CreateTrendLine(string obj,int position,int position1,double price,color cl,int idWnd)
   {
    ObjectCreate(obj,OBJ_TREND,idWnd,Time[position],price,Time[position1],price);
    ObjectSet(obj,OBJPROP_COLOR,cl);
    ObjectSet(obj,OBJPROP_STYLE,STYLE_DOT);
    ObjectSet(obj,OBJPROP_RAY,false);
   }        
//+------------------------------------------------------------------+
//| Ñîçäàåò îáúåêò-òåêñò                                             |
//+------------------------------------------------------------------+
     
void CreateTextObject(string obj, double x, double y,string Text,color cl,int Bar,string FontName,int FontSize) 
  {
   int ChartWindow;
   ChartWindow=WindowFind(Win_Name);
   ObjectCreate(obj, OBJ_TEXT, ChartWindow, x, y);
   ObjectSetText(obj,Text,FontSize, FontName, cl);
  }
        
//+------------------------------------------------------------------+
//|Ïîèñê îáúåêòà â îêíå èíäèêàòîðà                                   |
//+------------------------------------------------------------------+
    
bool FindObject(string Object, int idWnd)
   {
     if (ObjectFind(Object)==idWnd) return(true);
      else return(false);
   }  
   
void DeleteAllObjects(int Type)
   {
    if (idWnd!=-1) ObjectsDeleteAll(idWnd,Type);
   } 

//+-------------------------------------------------------------------+
//|âîçâðàùàåò ïðèçíàê ïîÿâëåíèÿ íîâîãî áàðà äëÿ âûáðàíîãî èíñòðóìåíòà |
//+-------------------------------------------------------------------+
   
bool  isNewBar(int ChartsListPosition)   
  {
     bool res=false; 
     RefreshRates();   
     string  Symb=ChartNames[ChartsListPosition];
     datetime BT=iTime(Symb,0,0);
     
   if ( ZeroBarTime[ChartsListPosition] !=BT || ZeroBarTime[ChartsListPosition] ==0 )
        {
          ZeroBarTime[ChartsListPosition] = BT;
          res=true;
        } 
    return(res);
  }
   
bool isNewÒic(int ChartsListPosition) 
 { 
   bool res=false;  
   RefreshRates();
   string Symb=ChartNames[ChartsListPosition];
   datetime TT = MarketInfo(Symb,MODE_TIME);
    
   if ( ÒicTime[ChartsListPosition] != TT )  
     {
       ÒicTime[ChartsListPosition] = TT ;
       res=true;
     } 
   return(res);  
 }  

void SymbolÒic()  
   {
    for(int i=0; i<=Win_Charts-1; i++)      
      {  
       if (Hystory[i]==0)  
        {
         UpgradeCharts(i);
         Hystory[i]=RefreshRate(i);
        }
        else
        {
         MonitoringOpenPositions(i);
          if (isNewÒic(i))                     
             { 
              if (isNewBar(i))
               {
                LoadChartsValues();
                CellThresolds(i);
               }   
               else
               {
                DrawZeroBar(i);
               }                                      
             } 
         } 
        continue; 
      }  
   }
   
//+------------------------------------------------------------------+
//|âîçâðàùàåò ïðîöåíò èçìåíåíèÿ öåíû îò ïðåäûäóùåãî äíÿ              |
//+------------------------------------------------------------------+
double GetPercent( int ChartListPosition)
   {
        string Symb=ChartNames[ChartListPosition];
        double yesterday=iClose(Symb , PERIOD_D1,  1);
        double today=0;
        if (yesterday!= 0 ) 
           today=(iClose(Symb,PERIOD_D1  ,0) * 100 ) / yesterday - 100;
      return (today);
   }
   

 
//+------------------------------------------------------------------+
//| Ìîíèòîðèíã îòêðûòûõ ïîçèöèé ïî êàæäîìó èíñòðóìåíòó               |
//+------------------------------------------------------------------+
   
void MonitoringOpenPositions(int ChartsListPosition)
   {
    int SellCount=0,BuyCount=0;
    double Profit=0;
    string Symb=ChartNames[ChartsListPosition],Result;
    
    if (ExistPositions(Symb,OP_SELL)==-1 && ExistPositions(Symb,OP_BUY)==-1 ) 
     {
        clNames[ChartsListPosition]=BullCandleColor;
        Result=" ";
     }     
     else
     {
          if (ExistPositions(Symb,OP_SELL)==OP_SELL) 
           {
                   SellCount=NumberOfOrders(ChartsListPosition,OP_SELL);
                   Profit=Profit(Symb); 
                   if (SellCount>1)
                    {
                      Result   =StringConcatenate(" [ Sell (",SellCount,"): ",Profit," ]");
                    }  
                    else
                    {
                      Result   =StringConcatenate(" [ Sell: ",Profit," ]");
                    } 
                   clNames[ChartsListPosition]=ColorChartName(ChartsListPosition,Profit,SellCount);
           }
    
          if (ExistPositions(Symb,OP_BUY)==OP_BUY) 
           { 
                   BuyCount =NumberOfOrders(ChartsListPosition,OP_BUY);
                   Profit=Profit(Symb);           
                   if (BuyCount>1)
                    {
                      Result   =StringConcatenate(" [ Buy (",BuyCount,"): ",Profit," ]");
                    }  
                    else
                    {
                      Result   =StringConcatenate(" [ Buy: ",Profit," ]");
                    }
                   clNames[ChartsListPosition]=ColorChartName(ChartsListPosition,Profit,BuyCount);
           }
     }    
         if (ViewOrders)
          {
           if (ExistPositions(Symb,OP_BUYSTOP)==OP_BUYSTOP) 
            { 
             NumberOfOrders(ChartsListPosition,OP_BUYSTOP);
            }
    
           if (ExistPositions(Symb,OP_BUYLIMIT)==OP_BUYLIMIT) 
            { 
             NumberOfOrders(ChartsListPosition,OP_BUYLIMIT);
            }
     
           if (ExistPositions(Symb,OP_SELLSTOP)==OP_SELLSTOP) 
            { 
             NumberOfOrders(ChartsListPosition,OP_SELLSTOP);
            }
    
           if (ExistPositions(Symb,OP_SELLLIMIT)==OP_SELLLIMIT) 
            { 
             NumberOfOrders(ChartsListPosition,OP_SELLLIMIT);
            }  
          }
   
     
        ChartName(ChartsListPosition,clNames[ChartsListPosition],Result);
        if (ViewOHLC) OHLC(ChartsListPosition); 
        DeleteOldTrendLines(ChartsListPosition);
   }
   
int CalcMode()
   {
    if (ProfitCalcMode!=0 && ProfitCalcMode!=1)
     {
      return(0);
     }
     else
     {
      return(ProfitCalcMode);
     }   
    } 
    
double Profit(string Symb)
   {
     if (CalcMode()==0)
                    {
                     return(GetProfitOpenPosInPoint(Symb, -1));
                    }
                    else
                    { 
                     return(GetProfitOpenPosInCurrency(Symb, -1,-1));
                    } 
   }    
   
//+------------------------------------------------------------------+
//|Öâåòîâàÿ èíäèêàöèÿ îòêðûòûõ ïîçèöèé                               |
//+------------------------------------------------------------------+
                
color ColorChartName(int ChartsListPosition,double Profit,int OrdersCount)    
   {
    string Symb=ChartNames[ChartsListPosition];
    double StopLevel;
    double point    =MarketInfo(Symb,MODE_POINT);
    double bid      =MarketInfo(Symb,MODE_BID);
    double ask      =MarketInfo(Symb,MODE_ASK);
    int    dig      =MarketInfo(Symb,MODE_DIGITS);
    color  test     =Win_color;
    
    if (FifthDigit)
     {
      StopLevel=100;
     }
     else 
     {
      StopLevel=10;
     }
    for(int j=1;j<=OrdersCount;j++)  
      {
       
         switch((int)TotalOrders[ChartsListPosition+1][j][6])
          {
           case OP_SELL: 
               if (TotalOrders[ChartsListPosition+1][j][2]!=0 && 
                   ask>=(TotalOrders[ChartsListPosition+1][j][2]-NormalizeDouble(StopLevel*point,dig)))  
                   {
                    test=StopLossColor;
                   } 
                   else
                   {
                   if (TotalOrders[ChartsListPosition+1][j][3]!=0 && 
                       ask<=(TotalOrders[ChartsListPosition+1][j][3]+NormalizeDouble(StopLevel*point,dig)))
                      {
                       test=TakeProfitColor;
                      }
                   }
             break;       
             
           case OP_BUY:     
                if (TotalOrders[ChartsListPosition+1][j][2]!=0 && 
                    bid<=(TotalOrders[ChartsListPosition+1][j][2]+NormalizeDouble(StopLevel*point,dig))) 
                   {
                    test=StopLossColor;
                   } 
                   else 
                   {
                     if (TotalOrders[ChartsListPosition+1][j][3]!=0 && 
                         bid>=(TotalOrders[ChartsListPosition+1][j][3]-NormalizeDouble(StopLevel*point,dig)))
                      {
                       test=TakeProfitColor;
                      }
                   }
            break;            
        }
      }   
        
        if (test==Win_color)
          {
           if (Profit>0)
            {
             test=ProfitColor; 
            }
            else 
            {
             if (Profit==0)
              {
               test=TextColor; 
              }
              else
              {
               test=LossColor; 
              }
            } 
          } 
        return(test);
                          
    }
//+------------------------------------------------------------------+
//|Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ îòêðûòûõ ïîçèöèé ïî èíñòðóìåíòó     |
//+------------------------------------------------------------------+

int ExistPositions(string Symb,int op=-1) 
{
  int i, k=OrdersTotal();

  for (i=0; i<k; i++) 
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symb && (OrderType()==op || op<0) ) 
      {
        
         return(OrderType());          
       
      }
    }
  }
  return(-1);
}  

//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.06.2009                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò êîëè÷åñòâî îòêðûòûõ ïîçèöèé                         |
//|             Óñòàíàâëèâàåò ëèíèè îðäåðîâ                                    |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - îïåðàöèÿ                   (-1   - ëþáîé îðäåð)                    |
//|    ChartListPosition-ïîçèöèÿ ôèí.èíñòðóìåíòà â ìàññèâå èíñòðóìåíòîâ        |
//+----------------------------------------------------------------------------+
int NumberOfOrders(int ChartListPosition, int op=-1)
 {
  int i, k=OrdersTotal(), ko=0, idWnd,pos,pos1,f,tp,sl;
  string Symb=ChartNames[ChartListPosition],objName,Type;
  int dig=MarketInfo(Symb,MODE_DIGITS);
  double orderprice=0,chartmin=0,chartpoint=0; 
  for (i=1; i<=30; i++)
   {
    TotalOrders[ChartListPosition+1][i][1]=0;
    TotalOrders[ChartListPosition+1][i][2]=0;
    TotalOrders[ChartListPosition+1][i][3]=0;
    TotalOrders[ChartListPosition+1][i][4]=0;
    TotalOrders[ChartListPosition+1][i][5]=0;
    TotalOrders[ChartListPosition+1][i][6]=0;
    TotalOrders[ChartListPosition+1][i][7]=0;
   }
   TotalOrders[ChartListPosition+1][0][0]=ko;
   idWnd=WindowFind(Win_Name);
   f=Frame-1;
   pos=(ChartListPosition+1)*Frame-f;
   pos1=(ChartListPosition+1)*Frame-1;
   chartpoint=ChartValues[ChartListPosition+1][1];
   chartmin=ChartValues[ChartListPosition+1][3]; 
   
  for (i=0; i<k; i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    {
      if ((OrderSymbol()==Symb) && (OrderType()==op))
        {
            ko++;
            TotalOrders[ChartListPosition+1][ko][1]=NormalizeDouble(OrderOpenPrice(),dig);
            TotalOrders[ChartListPosition+1][ko][2]=NormalizeDouble(OrderStopLoss(),dig);
            TotalOrders[ChartListPosition+1][ko][3]=NormalizeDouble(OrderTakeProfit(),dig);
            TotalOrders[ChartListPosition+1][ko][4]=OrderTicket();
            TotalOrders[ChartListPosition+1][ko][5]=OrderLots();
            TotalOrders[ChartListPosition+1][ko][6]=OrderType();
            TotalOrders[ChartListPosition+1][ko][7]=OrderMagicNumber();
            TotalOrders[ChartListPosition+1][0][0]=ko;
            if (ViewOrders)
             {
              switch((int)TotalOrders[ChartListPosition+1][ko][6])
              {
               case OP_BUY:
                        Type="Buy";
                break;
                
               case OP_BUYSTOP:
                        Type="Buy Stop";
                break;
                
               case OP_BUYLIMIT:
                        Type="Buy Limit";
                break; 
                 
               case OP_SELL:
                        Type="Sell";
                break;
                
               case OP_SELLSTOP:
                        Type="Sell Stop";
                break; 
                
              case OP_SELLLIMIT:
                        Type="Sell Limit";
                break;  
              }           
              objName=StringConcatenate("#",TotalOrders[ChartListPosition+1][ko][4]," ",Type);
              
//+------------------------------------------------------------------+
//|Ëèíèÿ îðäåðîâ Sell,Buy è äëÿ âñåõ òèïîâ îòëîæåííûõ îðäåðîâ        |
//+------------------------------------------------------------------+
                     
              if (chartpoint!=0)
               {
                orderprice=NormalizeDouble((TotalOrders[ChartListPosition+1][ko][1]-chartmin)/chartpoint,dig);
                if (!FindObject(objName,idWnd) && (orderprice<=100 && orderprice>=0) )
                 {
                  if (TotalOrders[ChartListPosition+1][ko][6]==OP_SELL ||
                      TotalOrders[ChartListPosition+1][ko][6]==OP_BUY) 
                   {               
                    CreateTrendLine(objName,pos,pos1,orderprice,TextColor,idWnd);
                   }
                   else
                   {
                    CreateTrendLine(objName,pos,pos1,orderprice,BullCandleColor,idWnd);
                   } 
                 }
                 else
                 {
                  if (ObjectGet(objName,OBJPROP_PRICE1)!=orderprice)
                   {
                    if (orderprice<=100 && orderprice>=0)
                         {
                          ObjectSet(objName,OBJPROP_PRICE1,orderprice);
                          ObjectSet(objName,OBJPROP_PRICE2,orderprice);
                         } 
                         else
                         {
                          ObjectDelete(objName);
                         } 
                   }
                 }  
               }  
               
//+------------------------------------------------------------------+
//|Ëèíèÿ îðäåðà Òýéê-ïðîôèò                                          |
//+------------------------------------------------------------------+
               
               if (chartpoint!=0)
                {    
                  if (TotalOrders[ChartListPosition+1][ko][3]!=0)
                   {
                    tp=NormalizeDouble((TotalOrders[ChartListPosition+1][ko][3]-chartmin)/chartpoint,dig);
                    if (!FindObject("TP "+objName,idWnd))
                     {
                       if (tp<=100 && tp>=0)
                        {
                         CreateTrendLine("TP "+objName,pos,pos1,tp,TakeProfitColor,idWnd);
                        } 
                     }
                     else
                     {
                      if (ObjectGet("TP "+objName,OBJPROP_PRICE1)!=tp)
                       {
                        if (tp<=100 && tp>=0)
                         {
                          ObjectSet("TP "+objName,OBJPROP_PRICE1,tp);
                          ObjectSet("TP "+objName,OBJPROP_PRICE2,tp);
                         } 
                         else
                         {
                          ObjectDelete("TP "+objName);
                         } 
                       }
                     }   
                   }
                   else
                   {
                    if (FindObject("TP "+objName,idWnd))
                     {
                      ObjectDelete("TP "+objName);
                     }
                   }
                 }  
                 
//+------------------------------------------------------------------+
//|Ëèíèÿ îðäåðà Ñòîï-ëîññ                                            |
//+------------------------------------------------------------------+

               if (chartpoint!=0)
                {    
                  if (TotalOrders[ChartListPosition+1][ko][2]!=0)
                   {
                    sl=NormalizeDouble((TotalOrders[ChartListPosition+1][ko][2]-chartmin)/chartpoint,dig);
                    if (!FindObject("SL "+objName,idWnd))
                     {
                      if (sl<=100 && sl>=0)
                       {
                        CreateTrendLine("SL "+objName,pos,pos1,sl,StopLossColor,idWnd);
                       } 
                     }
                     else
                     {
                      if (ObjectGet("SL "+objName,OBJPROP_PRICE1)!=sl)
                       {
                        if (sl<=100 && sl>=0)
                         {
                          ObjectSet("SL "+objName,OBJPROP_PRICE1,sl);
                          ObjectSet("SL "+objName,OBJPROP_PRICE2,sl);
                         } 
                         else
                         {
                          ObjectDelete("SL "+objName);
                         }
                       }
                     }  
                   }
                   else
                   {
                     if (FindObject("SL "+objName,idWnd))
                      {
                       ObjectDelete("SL "+objName);
                      } 
                   } 
                 }  
             }
          }
       }  
    }
    return(TotalOrders[ChartListPosition+1][0][0]);
 }  
 
//+------------------------------------------------------------------+
//|Óäàëåíèå ëèíèé(åñëè îðäåð áûë çàêðûò èëè óäàëåí)                  |
//+------------------------------------------------------------------+

void DeleteOldTrendLines(int ChartListPosition)
   {
    if (ViewOrders)
     {
      int i, k=OrdersHistoryTotal(), ko=0,idWnd,ticket;
      string Symb=ChartNames[ChartListPosition],objName,Type;
    
      idWnd=WindowFind(Win_Name);
     
     for (i=0; i<k; i++) 
     {
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
       {
        if (OrderSymbol()==Symb)
         {
          
            switch(OrderType())
             {
              case OP_BUY:
                     Type="Buy";
               break;
               
              case OP_BUYSTOP:
                     Type="Buy Stop";
               break; 
               
              case OP_BUYLIMIT:
                     Type="Buy Limit";
               break;   
               
              case OP_SELL:
                     Type="Sell";
               break;
              
              case OP_SELLSTOP:
                     Type="Sell Stop";
               break;
               
              case OP_SELLLIMIT:
                     Type="Sell Limit";
               break;     
             }           
             ticket=OrderTicket();
             objName=StringConcatenate("#",ticket," ",Type);
             if (FindObject(objName,idWnd))
              {
               ObjectDelete(objName);
              }
             objName=StringConcatenate("TP ","#",ticket," ",Type); 
             if (FindObject(objName,idWnd))
              {
               ObjectDelete(objName);
              }
             objName=StringConcatenate("SL ","#",ticket," ",Type); 
             if (FindObject(objName,idWnd))
              {
               ObjectDelete(objName);
              } 
          }
        }
      }
    }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ñóììàðíûé ïðîôèò îòêðûòûõ ïîçèöèé â âàëþòå äåïîçèòà |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1)
 {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) 
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
       {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {
          if (mn<0 || OrderMagicNumber()==mn) 
          {
            p+=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.08.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ñóììàðíûé ïðîôèò îòêðûòûõ ïîçèöèé â ïóíêòàõ         |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint(string sy="", int op=-1) 
{
  int    i, k=OrdersTotal();
  double pr=0,point=MathPow(10,MarketInfo(sy,MODE_DIGITS));
  
  for (i=0; i<k; i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      if ((OrderSymbol()==sy ) && (op<0 || OrderType()==op)) 
      {
        if (OrderType()==OP_BUY)
          {
            pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())*point;
          }
          if (OrderType()==OP_SELL) 
          {
            pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))*point;
          }
       }
    }
  }
  return(pr);
}   



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 ---