albus_MultiChart_1

Price Data Components
Series array that contains open prices of each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains close prices for each barSeries array that contains open time of each bar
Miscellaneous
Implements a curve of type %1
0 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

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