albus_MultiChart_1

8 Views
0 Downloads
0 Favorites
albus_MultiChart_1
//+------------------------------------------------------------------+
//|                                           albus_MultiChart_1.mq4 |
//|                                               Albus Dumbledore © |
//|                                                    Ad opus!      |
//|èíäèêàòîð ïîçâîëÿåò ðèñîâàòü â îñíîâíîì îêíå ãðàôèê               |
//|ëþáîãî èíñòðóìåíòà, ëþáîãî** ïåðèîäà,                             |
//|äîï÷àðò ìîæíî ïåðåìåùàòü â ëþáóþ òî÷êó îêíà (äâèãàòü ÒÕÒ ìàðêåð)  |   
//|                                                                  |
//| * Ñäåëàí ïî ìîòèâàì  Instrument2.mq4  îò Denis Orlov             |
//| * Ãëþê ñ îòðèñîâêîé òåë áàðîâ ïðè ïåðåêîìïèëÿöèè (åñëè èíä. âêë) |
//|   ðåøåíèå - îòêðûòü îêíî íàñòðîåê íàæàòü ÎÊ, äàëüøå ïîðÿäîê      |
//| **  òåñòåðå íå âûâîäèòü ïåðèîäû ìåíüøå ÷åì îñíîâíîé ÷àðò        |
//| **  òåñòåðå íå çàïóñêàòü áîëüøå ÷åì íà íåäåëüíîì ãðàôèêå :)     |
//| *** Ïðè çàïóñêå íà äðåâíåé èñòîðèè ïîñòàâèòü ìíîãî áàðîâ â îêíå  |
//| *** Ïðè çàïóñêå íà äðåâíåé èñòîðèè óáåäèòüñÿ ÷òî îíà åñòü        |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 4

double Line1[], Line2[], Line3[], Line4[];

extern string Instrument = "";         // ëþáîé èíñòðóìåíò (äîëæíà ïðèñóòñòâîâàòü èñòîðèÿ)
extern int    TimeFrame  = 0;          // ïåðèîä öèôðàìè (äëÿ Í1 - 60)(äîëæíà ïðèñóòñòâîâàòü èñòîðèÿ)
extern int    History    = 100;        // äëèíà ïðîðèñîâêè 
extern double KoefPress  = 1;          // ñæàòèå(ðàçæàòèå) ãðàôèêà äëÿ óäîáñòâà (3-âòðîå ðàñòÿíóò, 0,5-âäâîå ñæàò è ò.ä.)
extern double KoefJPY    = 1;          // ïðè ðàáîòå ñ åíîâûìè + íååíîâûìè ïàðàìè (èçìåíÿòü 0.01 èëè 100 èëè îêîëî òîãî)
extern double KoefInvers = 1;          // íîðì = 1     èíâåðñèÿ = -1
extern int    ColorStyle = 1;          // öâåòîâàÿ ñõåìà èíäèêàòîðà (èçìåíÿòü îò 1 äî 9)

extern int    TxtHorizShift = 0;       // çàçîð ìåæäó ÒÕÒ è ãðàôèêîì (êîë. áàðîâ)
extern double TxtAngle      = 90.0;    // ïîâîðîò ÒÕÒ ãðàäóñîâ (90 - âåðòèêàëüíî)
extern color  TxtColor      = Red;     // öâåò ÒÕÒ

int    LastTxtTime;                    //îïèñûâàåò êîîðäèíàòû ÒÕÒ
double LastTxtPrice;                   //îïèñûâàåò êîîðäèíàòû ÒÕÒ

int    BarsOnLastTick = 0;             // äëÿ êîíòðîëÿ ïîÿâëåíèÿ íîâîãî áàðà
double LastOpenPrice  = 0;             // äëÿ êîíòðîëÿ âåðòèêàëüíîãî ñìåùåíèÿ ãðàôèêà ïðè íîâîì áàðå
string IndName;                        // ñèìâîë + ÒÔ


//——————————————————————————————————————————————————————————————————————
// init()
//——————————————————————————————————————————————————————————————————————
int init()
{
   SetIndexBuffer(0, Line1);     
   SetIndexBuffer(1, Line2);     
   SetIndexBuffer(2, Line3);   
   SetIndexBuffer(3, Line4); //íàçíà÷åíèå áóôåðîâ èíäèêàòîðîâ        
   SetColorStyle();
   
   if(Instrument == "") 
      Instrument = Symbol();
   if(TimeFrame == 0) 
      TimeFrame = Period();
   
   IndName = Instrument + " " + PeriodToStr(TimeFrame);
   
   DrawText(IndName + "TXT", 
            Time[1], 
            Open[0], 
            TxtAngle, 
            IndName, 
            TxtColor, 
            12,
            0); // ðèñîâàíèå ÒÕÒ ìàðêåðà
   LastTxtTime = Time[1];
   LastTxtPrice = Open[1]; 
   return(0);
}
//——————————————————————————————————————————————————————————————————————



//——————————————————————————————————————————————————————————————————————
// deinit()
//——————————————————————————————————————————————————————————————————————
int deinit()
{
   ObjectDelete(IndName + "TXT");
   return(0);
}
//——————————————————————————————————————————————————————————————————————



//——————————————————————————————————————————————————————————————————————
// start()
//——————————————————————————————————————————————————————————————————————
int start()
{
   int i = 0; // êîë. áàðîâ êîòîðûå íóæíî ïåðåðèñîâûâàòü
   double koefChart = KoefPress * KoefJPY * KoefInvers;
   int testingShift;
   if(IsTester())
      testingShift = iBarShift(Instrument, TimeFrame, Time[0]);
   else
      testingShift = 0;
   
   //åñëè èíäèêàòîð òîëüêî çàïóùåí, LastOpenPrice ñòàâèì ïî ïîñëåäíåìó ðèñóåìîìó áàðó
   if(LastOpenPrice == 0)    
      if(Instrument == Symbol() && TimeFrame == Period())
         LastOpenPrice = Open[0];
      else
         LastOpenPrice = iOpen(Instrument, TimeFrame,testingShift);
   
   // åñëè íîâûé áàð
   if(BarsOnLastTick < Bars) 
   {
      BarsOnLastTick = Bars;
      i = History - 1;          // åñëè íîâûé áàð - ïåðåðèñîâûâàòü âñå (ò.ê. ðàçíûå ïåðèîäû, âñå ñìåùàåòñÿ)
      ArrayInitialize(Line1, 0.0);
      ArrayInitialize(Line2, 0.0);
      ArrayInitialize(Line3, 0.0);
      ArrayInitialize(Line4, 0.0);
      
      //ïåðåìåùåíèå ÒÕÒ
      double txtPriceShift; //ñäâèã ïî öåíå
      if(Instrument == Symbol() && TimeFrame == Period())
      {
         txtPriceShift = Open[0] - LastOpenPrice;
         LastOpenPrice = Open[0];
      }
      else
      {
         txtPriceShift = iOpen(Instrument, TimeFrame, testingShift) - LastOpenPrice;
         LastOpenPrice = iOpen(Instrument, TimeFrame, testingShift);
      }
      ObjectSet(IndName+"TXT",
                OBJPROP_PRICE1,
                ObjectGet(IndName + "TXT",OBJPROP_PRICE1) + koefChart * txtPriceShift);
      ObjectSet(IndName + "TXT",
                OBJPROP_TIME1,
                ObjectGet(IndName + "TXT", OBJPROP_TIME1) + Time[0] - Time[1]); 
   }

   //åñëè äâèãàëè ÒÕÒ èëè îíà àâòîìàòè÷åñêè ïåðåìåñòèëàñü ïðè ïðèõîäå íîâîãî áàðà
   if((LastTxtTime != ObjectGet(IndName + "TXT", OBJPROP_TIME1)) ||
      (LastTxtPrice != ObjectGet(IndName + "TXT", OBJPROP_PRICE1)))    //ïîëíûé ïåðåñ÷åò åñëè äâèãàëè ÒÕÒ 
   {
      i = History - 1;  // âñ¸ ïåðåðèñîâàòü
      LastTxtTime = ObjectGet(IndName+"TXT", OBJPROP_TIME1);
      LastTxtPrice = ObjectGet(IndName+"TXT", OBJPROP_PRICE1);  
      ArrayInitialize(Line1, 0.0);
      ArrayInitialize(Line2, 0.0);
      ArrayInitialize(Line3, 0.0);
      ArrayInitialize(Line4, 0.0);
   }  
 
   //ïîäãîòîâêà ê ðàñ÷åòó èíäèêàòîðà
   int HorizMovChart = iBarShift(NULL,0,LastTxtTime);
   i = i + HorizMovChart + TxtHorizShift + testingShift;    //ó÷åò ñìåùåíèÿ ãðàôèêà ïî ãîðèçîíòàëè
   double H,
          L,
          O,
          C,
          OLast;
   while(i >= (HorizMovChart + TxtHorizShift + testingShift))
   {
      H = iHigh(Instrument, TimeFrame, i - HorizMovChart - TxtHorizShift);
      L = iLow(Instrument, TimeFrame, i - HorizMovChart - TxtHorizShift);
      O = iOpen(Instrument,TimeFrame, i - HorizMovChart - TxtHorizShift);
      C = iClose(Instrument, TimeFrame, i - HorizMovChart - TxtHorizShift);
      OLast = iOpen(Instrument, TimeFrame, testingShift);
      
      //â òåñòåðå ïîñëåäíèé áàð äîï÷àðòà - òîëüêî îïåí, ÷òîá íå ïîäñìàòðèâàòü ;)
      if(IsTester() && ((i - HorizMovChart - TxtHorizShift) == testingShift))
      {
         H = O;
         C = O;
         L = O;
      }
      if(C > O)
      {
         Line1[i - testingShift] = LastTxtPrice + koefChart * (C - OLast); 
         Line2[i - testingShift] = LastTxtPrice + koefChart * (O - OLast);
         Line3[i - testingShift] = LastTxtPrice + koefChart * (H - OLast); 
         Line4[i - testingShift] = LastTxtPrice + koefChart * (L - OLast); 
      }
      else
         if(C < O)
         {
            Line1[i - testingShift] = LastTxtPrice + koefChart * (C - OLast); 
            Line2[i - testingShift] = LastTxtPrice + koefChart * (O - OLast);
            Line3[i - testingShift] = LastTxtPrice + koefChart * (L - OLast); 
            Line4[i - testingShift] = LastTxtPrice + koefChart * (H - OLast); 
         }
         else
         {
            Line1[i - testingShift] = LastTxtPrice + koefChart * (O - OLast); 
            Line2[i - testingShift] = Line1[i - testingShift] + 0.01 * Point;
            Line3[i - testingShift] = LastTxtPrice + koefChart * (L - OLast); 
            Line4[i - testingShift] = LastTxtPrice + koefChart * (H - OLast); 
         }     
      i--;
   } //while
   return(0);
}
//——————————————————————————————————————————————————————————————————————

  
  
//——————————————————————————————————————————————————————————————————————
// SetColorStyle()
// Ôóíêöèÿ óñòàíàâèëèâàåò/ìåíÿåò öâåòîâóþ ñõåìó ãðàôèêà èíäèêàòîðà
// íîìåð ñõåìû áåðåòñÿ èç âíåøíåé ïåðåìåííîé ColorStyle
//——————————————————————————————————————————————————————————————————————
int SetColorStyle()
{
   color bullsBar,
         bearsBar;
   switch(ColorStyle)
   {
      case 1:  bullsBar = DarkTurquoise;
               bearsBar = DarkBlue;
               break;
      case 2:  bullsBar = Orange;
               bearsBar = Maroon;
               break;
      case 3:  bullsBar = LimeGreen;
               bearsBar = DarkGreen;
               break;
      case 4:  bullsBar = DeepPink;
               bearsBar = DarkViolet;
               break;
      case 5:  bullsBar = DarkGray;
               bearsBar = Black;
               break;
      case 6:  bullsBar = Red;
               bearsBar = Black;
               break;
      case 7:  bullsBar = Gray;
               bearsBar = Red;
               break;
      case 8:  bullsBar = LimeGreen;
               bearsBar = Red;
               break;
      case 9:  bullsBar = LimeGreen;
               bearsBar = Black;
   }
   SetIndexStyle(0, DRAW_HISTOGRAM, 0, 3, bullsBar);
   SetIndexStyle(1, DRAW_HISTOGRAM, 0, 3, bearsBar);
   SetIndexStyle(2, DRAW_HISTOGRAM, 0, 1, bullsBar);
   SetIndexStyle(3, DRAW_HISTOGRAM, 0, 1, bearsBar);
}
//——————————————————————————————————————————————————————————————————————

   
      
//——————————————————————————————————————————————————————————————————————
// PeriodToStr()
// Ôóíêöèÿ ïðåîáðàçîâàíèÿ öèôðîâîãî âèäà ïåðèîäà (240) ê ñèìâîëüíîìó (Í4)
//——————————————————————————————————————————————————————————————————————
string PeriodToStr(int per)
{
   switch(per)
   {
      case     1: return("M1");
      case     5: return("M5");
      case    15: return("M15");
      case    30: return("M30");
      case    60: return("H1");
      case   240: return("H4");
      case  1440: return("D1");
      case 10080: return("W1");
      case 43200: return("ÌN");
   }
}
//——————————————————————————————————————————————————————————————————————
   
  
   
//——————————————————————————————————————————————————————————————————————
// DrawText()
// Ôóíêöèÿ âûâîäèò íà ãðàôèê òåêñòîâóþ ìåòêó
//——————————————————————————————————————————————————————————————————————
int DrawText ( string   name,       //1 èìÿ    
               datetime times,      //2 êîðäèíàòà âðåìåíè
               double   price,      //3 êîîðäèíàòà öåíû
               double   angle,      //4 óãîë íàêëîíà ìåòêè (90-âåðòèêàëüíî)
               string   text,       //5 ñîäåðæàíèå
               color    clr,        //6 öâåò
               int      size = 10,  //7 ðàçìåð øðèôòà
               int      win = 0)    //8 îêíî âûâîäà (0-ãðàôèê öåíû)
{
   ObjectCreate  (name, OBJ_TEXT, win, times, price);
   ObjectSet     (name, OBJPROP_PRICE1, price);
   ObjectSet     (name, OBJPROP_TIME1, times);
   ObjectSet     (name, OBJPROP_ANGLE, angle);
   ObjectSetText (name, text ,size,"Arial",clr);
   return (0);
}
//——————————————————————————————————————————————————————————————————————
    
    
    
//——————————————————————————————————————————————————————————————————————
// IsTester() bool
// Ôóíêöèÿ ïðîâåðÿåò â òåñòåðå ìû? 
// Äà - âîçâðàùàåò TRUE. 
// Íåò - âîçâðàùàåò FALSE.
// Åñëè âðåìÿ ïîñëåäíåãî áàðà äàíîãî ãðàôèêà ìåíüøå âðåìåíè ïîñëåäíåãî
// èñòîðè÷åñêîãî áàðà ñòàðøåãî ïåðèîäà ìû â òåñòåðå 
//——————————————————————————————————————————————————————————————————————
bool IsTester()
{        
   int nextPeriod;
   switch(Period())                      
   {
      case     1: nextPeriod = 5;     break; 
      case     5: nextPeriod = 15;    break; 
      case    15: nextPeriod = 30;    break;
      case    30: nextPeriod = 60;    break;
      case    60: nextPeriod = 240;   break;
      case   240: nextPeriod = 1440;  break; 
      case  1440: nextPeriod = 10080; break; 
      case 10080: nextPeriod = 43200;  
   }
   if(Time[0] < iTime(NULL,nextPeriod,0))
      return (TRUE);
   else
      return (FALSE);
}
//——————————————————————————————————————————————————————————————————————

Comments