Three_in_One

Author: Alex-W-
Price Data Components
Series array that contains open prices of each barSeries array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Three_in_One
//+------------------------------------------------------------------+
//|                                                 Three in One.mq4 |
//|                                                          Alex-W- |
//|                                                    Alex-W-@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Alex-W-"
#property link      "Alex-W-@bk.ru"

#property indicator_chart_window
//--- input parameters
extern int        Period_1          = PERIOD_H1;               // Ïåðèîäû äëÿ îòîáðàæåíèÿ â òåêóùåì îêíå, åñëè 0 òî äàííûé ïåðèîä áóäåò ïðîïóùåí.
extern int        Period_2          = PERIOD_H4;
extern int        Period_3          = PERIOD_D1;

   //--- Style Period 1 ---
extern color      P1_ClrLine        = Black;
extern color      P1_ClrDivider     = Black;
extern color      P1_ClrShHigh      = YellowGreen;
extern color      P1_ClrShLow       = YellowGreen;
extern color      P1_ClrBarUp       = Gold;
extern color      P1_ClrBarDown     = C'237,147,247';
   
extern int        P1_WidthLine      = 1;
extern int        P1_StyleLine      = 0;
   
extern int        P1_StyleDivider   = 2;
extern int        P1_WidthDivider   = 1;
   
   //--- Style Period 2 ---
extern color      P2_ClrLine        = Red;
extern color      P2_ClrDivider     = Red;
extern color      P2_ClrShHigh      = Moccasin;
extern color      P2_ClrShLow       = Moccasin;
extern color      P2_ClrBarUp       = Moccasin;
extern color      P2_ClrBarDown     = Moccasin;
   
extern int        P2_WidthLine      = 1;
extern int        P2_StyleLine      = 0;
   
extern int        P2_StyleDivider   = 2;
extern int        P2_WidthDivider   = 1;
   
   //--- Style Period 3 ---
extern color      P3_ClrLine        = Blue;                 // Ïðÿìîóãîëüíèê èç ëèíèé áàð High->Low
extern color      P3_ClrDivider     = Blue;                 // Ëèíèÿ ðàçäåëèòåëü ìåæäó òåëîì áàðà è High,Low.
extern color      P3_ClrShHigh      = Lavender;             // Öâåò ïðÿìîóãîëüíèêà (Òåíè) High
extern color      P3_ClrShLow       = Lavender;             // Öâåò ïðÿìîóãîëüíèêà (Òåíè) Low
extern color      P3_ClrBarUp       = Lavender;
extern color      P3_ClrBarDown     = Lavender;
   
extern int        P3_WidthLine      = 3;
extern int        P3_StyleLine      = 0;
   
extern int        P3_StyleDivider   = 2;
extern int        P3_WidthDivider   = 1;

extern int        HistoryBars       = 200;                     // Íà ñêîëüêî äíåé ïî èñòîðèè ðàçìå÷àòü, ýòîò ïàðàìåòð ñòàðøåãî áàðà, òî åñòü åñëè ñàìû ñòàðøèé ïåðèîä âûáðàí äåíü òî áóäåò ðàçìå÷åíî äàííîå êîë âî äíåé.

//+------------------------------------------------------------------+
//| #############- indicator initialization function -#############  |
//+------------------------------------------------------------------+
int init()
{
//----
   Comment(GetPeriod(Period_1)+":"+GetPeriod(Period_2)+":"+GetPeriod(Period_3));
//----
   return(0);
}
//+------------------------------------------------------------------+
//| ###########- indicator deinitialization function -#############  |
//+------------------------------------------------------------------+
int deinit(){
//----
   ObjectsDeleteAll();
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| ##############-- indicator start function --#################### |
//+------------------------------------------------------------------+
int start()
{
//----
   int   iCounted, i, iCxP1, iCxP2, iP1, iP2, iWindowPeriod;
   static int iCx=0;
   string sOp_1, sOp_2, sOp_3, sPeriod_1, sPeriod_2, sPeriod_3;
   static bool bCheck=true, Blocking=false;


//----
   
   iWindowPeriod=Period();
   
   if(iWindowPeriod>=Period_1 || iWindowPeriod>=Period_2 || iWindowPeriod>=Period_3){
      Alert("Îøèáêà ! - îäèí èç âûáðàííûõ ïåðèîäîâ ìåíüøå èëè ðàâåí òåêóùåìó.");
      Blocking=true;
   }
   if(Period_1 >= Period_2 || Period_2 >= Period_3){
      Alert("Îøèáêà ! - Period_1 äîëæåí áûòü íèæå ÷åì Period_2 è Period_2 íèæå ÷åì Period_3.");
      Blocking=true;
   }
   
   
   if(!Blocking){
   
      
      
      sPeriod_1 = GetPeriod(Period_1);
      sPeriod_2 = GetPeriod(Period_2);
      sPeriod_3 = GetPeriod(Period_3);
   
      if(bCheck)iCounted=HistoryBars;
      else iCounted=1;

      for(i=0; i<iCounted; i++){
         sOp_3 = iTime(NULL, Period_3, i);                                                                                                      // Âðåìÿ îòêðûòèÿ áàðà.
         DrawBar(sPeriod_3+"_"+sOp_3, i, Period_3, P3_ClrLine, P3_StyleLine, P3_WidthLine, P3_StyleDivider, P3_WidthDivider, P3_ClrDivider);
         DrawRectangle(sPeriod_3+"_"+sOp_3, i, Period_3, P3_ClrShHigh, P3_ClrShLow, P3_ClrBarUp, P3_ClrBarDown);
      }
   

      if(bCheck)iCxP2 = iCounted*(Period_3 / Period_2);           // Êîëè÷åñòâî áàðîâ â ñòàðøåì áàðå.
      else iCxP2 = iCounted;
      
      for(i=0; i<iCxP2; i++){
         sOp_2 = iTime(NULL, Period_2, i);
         DrawBar(sPeriod_2+"_"+sOp_2, i, Period_2, P2_ClrLine, P2_StyleLine, P2_WidthLine, P2_StyleDivider, P2_WidthDivider, P2_ClrDivider);
         DrawRectangle(sPeriod_2+"_"+sOp_2, i, Period_2, P2_ClrShHigh, P2_ClrShLow, P2_ClrBarUp, P2_ClrBarDown);
      }
   
      //--- 1 ÷àñîâîé áàð
      if(bCheck)iCxP1 = iCounted*(Period_3 / Period_1);           // Êîëè÷åñòâî áàðîâ â ñòàðøåì áàðå.
      else iCxP1 = iCounted;
   
      for(i=0; i<iCxP1; i++){
         sOp_1 = iTime(NULL, Period_1, i);
         DrawBar(sPeriod_1+"_"+sOp_1, i, Period_1, P1_ClrLine, P1_StyleLine, P1_WidthLine, P1_StyleDivider, P1_WidthDivider, P1_ClrDivider);
         DrawRectangle(sPeriod_1+"_"+sOp_1, i, Period_1, P1_ClrShHigh, P1_ClrShLow, P1_ClrBarUp, P1_ClrBarDown);
      }
      bCheck=false;
   }

  
   
   
//STYLE_SOLID	      0	Ñïëîøíàÿ ëèíèÿ
//STYLE_DASH	      1	Øòðèõîâàÿ ëèíèÿ
//STYLE_DOT	         2	Ïóíêòèðíàÿ ëèíèÿ
//STYLE_DASHDOT	   3	Øòðèõ-ïóíêòèðíàÿ ëèíèÿ
//STYLE_DASHDOTDOT	4	Øòðèõ-ïóíêòèðíàÿ ëèíèÿ ñ äâîéíûìè òî÷êàìè
   
//----
   return(0);
}
// Âîçâðàùàåò íàçâàíèå ïåðèîäà
string GetPeriod(int per){
//---
   string name;
//---
   switch(per){
      case 1: name="M1";
         break;
      case 5: name="M5";
         break;
      case 15: name="M15";
         break;
      case 30: name="M30";
         break;
      case 60: name="H1";
         break;
      case 240: name="H4";
         break;
      case 1440: name="D1";
         break;
      case 10080: name="W1";
         break;
      case 43200: name="MN1";
         break;
   }

return(name);
}

//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ðèñóåò áàð âåðòèêàëüíûìè è ãîðèçîíòàëüíûìè ëèíèÿìè.              |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   id       - Èäåíòèôèêàòîð.                                      |
//|   i        - Íîìåð áàðà.                                         |
//|   iPeriod  - Ïåðèîä áàðà.                                        |
//|   clr      - Öâåò ëèíèé.                                         |
//|   stLine   - Ñòèëü ëèíèé.                                        |
//|   widthLine   - Øèðèíà ëèíèé.                                    |
//|   stDivider   - Ñòèëü ëèíèè, ðàçäåëèòåëÿ High, Low, Open-Close.  |
//|   widthDivider- Øèðèíà ëèíèè ðàçäåëèòåëÿ.                        |
//|   clrDivider  - Öâåò ëèíèè ðàçäåëèòåëÿ.                          |
//+------------------------------------------------------------------+
void DrawBar(string id, int i, int iPeriod, color clr, int stLine, int widthLine, int stDivider, int widthDivider, color clrDivider){
//---
   double      prOpen, prClose, prHigh, prLow;
   datetime    tmOpen, tmClose;
//---
   

   prOpen  = iOpen(NULL, iPeriod, i);
   prClose = iClose(NULL, iPeriod, i);
   prHigh  = iHigh(NULL, iPeriod, i);
   prLow   = iLow(NULL, iPeriod, i);
   
   tmOpen  = iTime(NULL, iPeriod, i);
   tmClose = tmOpen+iPeriod*60;
   
   if(ObjectFind(id+"_LF")<0){
      ObjectCreate(id+"_LF", OBJ_TREND, 0, tmOpen, prHigh, tmOpen, prLow);             // Ëåâàÿ ÷àñòü áàðà.
      ObjectSet(id+"_LF", OBJPROP_RAY, false);
      ObjectSet(id+"_LF", OBJPROP_COLOR, clr);
      ObjectSet(id+"_LF", OBJPROP_STYLE, stLine);
      ObjectSet(id+"_LF", OBJPROP_WIDTH, widthLine);
   }else{
      ObjectSet(id+"_LF", OBJPROP_TIME1, tmOpen);
      ObjectSet(id+"_LF", OBJPROP_PRICE1, prHigh);
      ObjectSet(id+"_LF", OBJPROP_TIME2, tmOpen);
      ObjectSet(id+"_LF", OBJPROP_PRICE2, prLow);
   }
   
   if(ObjectFind(id+"_RG")<0){
      ObjectCreate(id+"_RG", OBJ_TREND, 0, tmClose, prHigh, tmClose, prLow);             // Ïðàâàÿ ÷àñòü áàðà.
      ObjectSet(id+"_RG", OBJPROP_RAY, false);
      ObjectSet(id+"_RG", OBJPROP_COLOR, clr);
      ObjectSet(id+"_RG", OBJPROP_STYLE, stLine);
      ObjectSet(id+"_RG", OBJPROP_WIDTH, widthLine);
   }else{
      ObjectSet(id+"_RG", OBJPROP_TIME1, tmClose);
      ObjectSet(id+"_RG", OBJPROP_PRICE1, prHigh);
      ObjectSet(id+"_RG", OBJPROP_TIME2, tmClose);
      ObjectSet(id+"_RG", OBJPROP_PRICE2, prLow);
   }
   
   if(ObjectFind(id+"_HG")<0){
      ObjectCreate(id+"_HG", OBJ_TREND, 0, tmOpen, prHigh, tmClose, prHigh);             // High.
      ObjectSet(id+"_HG", OBJPROP_RAY, false);
      ObjectSet(id+"_HG", OBJPROP_COLOR, clr);
      ObjectSet(id+"_HG", OBJPROP_STYLE, stLine);
      ObjectSet(id+"_HG", OBJPROP_WIDTH, widthLine);
   }else{
      ObjectSet(id+"_HG", OBJPROP_TIME1, tmOpen);
      ObjectSet(id+"_HG", OBJPROP_PRICE1, prHigh);
      ObjectSet(id+"_HG", OBJPROP_TIME2, tmClose);
      ObjectSet(id+"_HG", OBJPROP_PRICE2, prHigh);
   }
   
   if(ObjectFind(id+"_LW")<0){
      ObjectCreate(id+"_LW", OBJ_TREND, 0, tmOpen, prLow, tmClose, prLow);             // Low.
      ObjectSet(id+"_LW", OBJPROP_RAY, false);
      ObjectSet(id+"_LW", OBJPROP_COLOR, clr);
      ObjectSet(id+"_LW", OBJPROP_STYLE, stLine);
      ObjectSet(id+"_LW", OBJPROP_WIDTH, widthLine);
   }else{
      ObjectSet(id+"_LW", OBJPROP_TIME1, tmOpen);
      ObjectSet(id+"_LW", OBJPROP_PRICE1, prLow);
      ObjectSet(id+"_LW", OBJPROP_TIME2, tmClose);
      ObjectSet(id+"_LW", OBJPROP_PRICE2, prLow);
   }
   
   if(ObjectFind(id+"_OP")<0){
      ObjectCreate(id+"_OP", OBJ_TREND, 0, tmOpen, prOpen, tmClose, prOpen);             // Open.
      ObjectSet(id+"_OP", OBJPROP_RAY, false);
      ObjectSet(id+"_OP", OBJPROP_COLOR, clrDivider);
      ObjectSet(id+"_OP", OBJPROP_STYLE, stDivider);
      ObjectSet(id+"_OP", OBJPROP_WIDTH, widthDivider);
   }else{
      ObjectSet(id+"_OP", OBJPROP_TIME1, tmOpen);
      ObjectSet(id+"_OP", OBJPROP_PRICE1, prOpen);
      ObjectSet(id+"_OP", OBJPROP_TIME2, tmClose);
      ObjectSet(id+"_OP", OBJPROP_PRICE2, prOpen);
   }
   
   if(ObjectFind(id+"_CL")<0){
      ObjectCreate(id+"_CL", OBJ_TREND, 0, tmOpen, prClose, tmClose, prClose);             // Close.
      ObjectSet(id+"_CL", OBJPROP_RAY, false);
      ObjectSet(id+"_CL", OBJPROP_COLOR, clrDivider);
      ObjectSet(id+"_CL", OBJPROP_STYLE, stDivider);
      ObjectSet(id+"_CL", OBJPROP_WIDTH, widthDivider);
   }else{
      ObjectSet(id+"_CL", OBJPROP_TIME1, tmOpen);
      ObjectSet(id+"_CL", OBJPROP_PRICE1, prClose);
      ObjectSet(id+"_CL", OBJPROP_TIME2, tmClose);
      ObjectSet(id+"_CL", OBJPROP_PRICE2, prClose);
   }

}


//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ðèñóåò áàð èç 3-¸õ ïðÿìîóãîëüíèêîâ, High, Low, Open-Close.       |    
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   id       - Èäåíòèôèêàòîð.                                      |
//|   iBar     - Íîìåð áàðà.                                         |
//|   iPeriod  - Ïåðèîä.                                             |
//|   shHigh   - Öâåò òåíè High (ïðÿìîóãîëüíèêà)                     |
//|   shLow    - Öâåò òåíè Low                                       |
//|   barUp    - Öâåò áû÷úåãî áàðà                                   |
//|   barDown  - Öâåò ìåäâåæúåãî áàðà.                               |
//+------------------------------------------------------------------+
void DrawRectangle(string id, int iBar, int iPeriod, color shHigh, color shLow, color barUp, color barDown){
//---
   double      prOpen, prClose, prHigh, prLow;
   datetime    tmOpen, tmClose;
   color clr;
//---
   
   int i = iBar;

   prOpen  = iOpen(NULL, iPeriod, i);
   prClose = iClose(NULL, iPeriod, i);
   prHigh  = iHigh(NULL, iPeriod, i);
   prLow   = iLow(NULL, iPeriod, i);
   
   tmOpen  = iTime(NULL, iPeriod, i);
   tmClose = tmOpen+iPeriod*60;
   
   if(prOpen < prClose)clr=barUp;
   else clr=barDown;
   
   //--- Ðèñóåì òåëî áàðà Open->Close
   if(ObjectFind(id+"_Bar_")<0){
      ObjectCreate(id+"_Bar_", OBJ_RECTANGLE, 0, tmOpen, prOpen, tmClose, prClose);
      ObjectSet(id+"_Bar_", OBJPROP_COLOR, clr);
   }else{
      ObjectSet(id+"_Bar_", OBJPROP_COLOR, clr);
      ObjectSet(id+"_Bar_", OBJPROP_TIME1, tmOpen);
      ObjectSet(id+"_Bar_", OBJPROP_PRICE1, prOpen);
      ObjectSet(id+"_Bar_", OBJPROP_TIME2, tmClose);
      ObjectSet(id+"_Bar_", OBJPROP_PRICE2, prClose);
   }
   //--- Áû÷èé áàð
   if(prOpen<prClose){
      //--- Ðèñóåì òåíü áàðà High.
      if(ObjectFind(id+"_ShHigh_")<0){
         ObjectCreate(id+"_ShHigh_", OBJ_RECTANGLE, 0, tmOpen, prHigh, tmClose, prClose);
         ObjectSet(id+"_ShHigh_", OBJPROP_COLOR, shHigh);
      }else{
         ObjectSet(id+"_ShHigh_", OBJPROP_TIME1, tmOpen);
         ObjectSet(id+"_ShHigh_", OBJPROP_PRICE1, prHigh);
         ObjectSet(id+"_ShHigh_", OBJPROP_TIME2, tmClose);
         ObjectSet(id+"_ShHigh_", OBJPROP_PRICE2, prClose);
      }
   
      //--- Ðèñóåì òåíü áàðà Low.
      if(ObjectFind(id+"_ShLow_")<0){
         ObjectCreate(id+"_ShLow_", OBJ_RECTANGLE, 0, tmOpen, prLow, tmClose, prOpen);
         ObjectSet(id+"_ShLow_", OBJPROP_COLOR, shLow);
      }else{
         ObjectSet(id+"_ShLow_", OBJPROP_TIME1, tmOpen);
         ObjectSet(id+"_ShLow_", OBJPROP_PRICE1, prLow);
         ObjectSet(id+"_ShLow_", OBJPROP_TIME2, tmClose);
         ObjectSet(id+"_ShLow_", OBJPROP_PRICE2, prOpen);
      }
   }
   
   //--- Ìåäâåæèé áàð
   if(prOpen>prClose){
      //--- Ðèñóåì òåíü áàðà High.
      if(ObjectFind(id+"_ShHigh_")<0){
         ObjectCreate(id+"_ShHigh_", OBJ_RECTANGLE, 0, tmOpen, prHigh, tmClose, prOpen);
         ObjectSet(id+"_ShHigh_", OBJPROP_COLOR, shHigh);
      }else{
         ObjectSet(id+"_ShHigh_", OBJPROP_TIME1, tmOpen);
         ObjectSet(id+"_ShHigh_", OBJPROP_PRICE1, prHigh);
         ObjectSet(id+"_ShHigh_", OBJPROP_TIME2, tmClose);
         ObjectSet(id+"_ShHigh_", OBJPROP_PRICE2, prOpen);
      }
   
      //--- Ðèñóåì òåíü áàðà Low.
      if(ObjectFind(id+"_ShLow_")<0){
         ObjectCreate(id+"_ShLow_", OBJ_RECTANGLE, 0, tmOpen, prLow, tmClose, prClose);
         ObjectSet(id+"_ShLow_", OBJPROP_COLOR, shLow);
      }else{
         ObjectSet(id+"_ShLow_", OBJPROP_TIME1, tmOpen);
         ObjectSet(id+"_ShLow_", OBJPROP_PRICE1, prLow);
         ObjectSet(id+"_ShLow_", OBJPROP_TIME2, tmClose);
         ObjectSet(id+"_ShLow_", OBJPROP_PRICE2, prClose);
      }
   }
}




//+------------------------------------------------------------------+


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