Author: Inkov Evgeni ew123@mail.ru
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
0 Views
0 Downloads
0 Favorites
All_Stars
//+------------------------------------------------------------------+
//|                                                    All_Stars.mq4 |
//+------------------------------------------------------------------+
#property copyright "Inkov Evgeni ew123@mail.ru"
#property link      "+7-918-600-11-33"
//+------------------------------------------------------------------+
#define        Gran_UP         1.3
#define        Gran_DW        -0.4
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_minimum Gran_DW
#property indicator_maximum Gran_UP

extern string  sym               = "GBPUSD";
extern int     nom_bar           = 25;
extern int     order_TF          = 23456789;
extern color   color_up          = Red;
extern color   color_dw          = Black;
extern color   color_0           = RoyalBlue;
extern color   color_txt         = Green;
extern color   color_activ       = Red;
extern color   color_line        = Gray;
extern color   color_volum_up    = Green;
extern color   color_volum_dw    = Red;
//--------------------
int win;
int TF;
int width=3;
int Step;
int mas_TF[9];
//+------------------------------------------------------------------+
int init()
{
   del_all();
   string str=DoubleToStr(order_TF,0);
   int len=StringLen(str);
   ArrayInitialize(mas_TF,0);
   string s;
   int k=8;
   for (int i=len-1;i>=0;i--)
   {
      s=StringSubstr(str,i, 1);
      if (k<0)break;
      mas_TF[k]=StrToInteger(s);
      k--;
   }
   IndicatorDigits(Digits);
   IndicatorShortName("All_Stars "+sym);
   win=WindowFind("All_Stars "+sym);
   Step=nom_bar+3;
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   del_all();
   return(0);
}
//+------------------------------------------------------------------+
int start()
{
   int sdvig;
   int n;
   for (int i=9;i>=1;i--)
   {
      n=mas_TF[i-1];
      if (n==0)break;
      TF=nom_TF(n);
      if (i<9)out_line(str_TF(TF),win,sdvig);
      sdvig=(9-i)*Step;
      out_graf(TF,win,sdvig);
      out_volum(TF,win,sdvig);
      out_txt(TF,win,sdvig);
   }
   return(0);
}
//+------------------------------------------------------------------+
void del_all()
{
   for (int i=9;i>=1;i--)
   {
      TF=nom_TF(i);
      for (int j=0;j<nom_bar;j++)
      {
         ObjectDelete(sym+DoubleToStr(TF,0)+"_"+DoubleToStr(j,0)+"_1");
         ObjectDelete(sym+DoubleToStr(TF,0)+"_"+DoubleToStr(j,0)+"_2");
         ObjectDelete(sym+DoubleToStr(TF,0)+"_"+DoubleToStr(j,0)+"_V");
         ObjectDelete(sym+DoubleToStr(TF,0)+"_"+DoubleToStr(j,0)+"_M");
      }
      ObjectDelete(sym+str_TF(TF));
      ObjectDelete(sym+str_TF(TF)+"L");
   }
}
//-----------------------------
void out_line(string str_TF, int win, int sdvig)
{
   string name=sym+str_TF+"L";
   if (ObjectFind(name)<0)ObjectCreate(name,OBJ_TREND,win,0,0);
   ObjectSet(name,OBJPROP_TIME1,Time[nom_bar+sdvig+1]);
   ObjectSet(name,OBJPROP_TIME2,Time[nom_bar+sdvig+1]);
   ObjectSet(name,OBJPROP_PRICE1,Gran_DW);
   ObjectSet(name,OBJPROP_PRICE2,Gran_UP);
   ObjectSet(name,OBJPROP_COLOR,color_line);
   ObjectSet(name,OBJPROP_WIDTH,2);
}
//--------------------
void out_txt(int TF, int win, int sdvig)
{
   color col;
   string str_TF=str_TF(TF);
   string name=sym+str_TF;
   if (ObjectFind(name)<0)ObjectCreate(name,OBJ_TEXT,win,0,0);
   if(TF==Period())
      col=color_activ;
   else
      col=color_txt;
   ObjectSetText(name, str_TF, 8, "Arial", col);
   ObjectSet(name,OBJPROP_TIME1,Time[sdvig+1]);
   ObjectSet(name,OBJPROP_PRICE1,Gran_UP);
}
//--------------------
void out_graf(int TF, int win, int sdvig)
{
   double max,min,H,L;
   for (int i=0;i<nom_bar;i++)
   {
      H=iHigh (sym,TF,i);
      L=iLow  (sym,TF,i);
      if (H>max || max==0)max=H;
      if (L<min || min==0)min=L;
   }
   if(ND(max)==ND(min))return(0);
   for (i=0;i<nom_bar;i++)out_bar(TF,win,i,max,min,sdvig);
}
//--------------------
void out_volum(int TF, int win, int sdvig)
{
   double max,min,V,oc;
   for (int i=0;i<nom_bar;i++)
   {
      oc=MathAbs(iOpen(sym,TF,i)-iClose(sym,TF,i));
      if (oc==0)oc=Point;
      V=iVolume (sym,TF,i)*(iHigh(sym,TF,i)-iLow(sym,TF,i))/oc;
      if (V>max || max==0)max=V;
      if (V<min || min==0)min=V;
   }
   if(ND(max)==ND(min))return(0);
   for (i=0;i<nom_bar;i++)out_vol(TF,win,i,max,min,sdvig);
}
//--------------------
void out_bar(int TF, int win,int bar,double max, double min, int sdv)
{
   double O,H,L,C;
   double d, pr1,pr2,pr3,pr4;
   color col;
   
   O=iOpen (sym,TF,bar);
   H=iHigh (sym,TF,bar);
   L=iLow  (sym,TF,bar);
   C=iClose(sym,TF,bar);
   
   d=max-min;
   pr1=(O-min)/d;
   pr2=(C-min)/d;
   pr3=(L-min)/d;
   pr4=(H-min)/d;
   if (ND(pr1)==ND(pr2) || ND(pr3)==ND(pr4))
      col=color_0;
   else
      if (pr1>pr2)
         col=color_dw;
      else
         col=color_up;
   
   put_rect(sym+DoubleToStr(TF,0)+"_"+DoubleToStr(bar,0)+"_1",win, bar+sdv, width, pr1, pr2, col);  // Open, Close
   put_rect(sym+DoubleToStr(TF,0)+"_"+DoubleToStr(bar,0)+"_2",win, bar+sdv, 1, pr3, pr4, col);  // Low,  High
}
//-----------------------------------------
void out_vol(int TF, int win,int bar,double max, double min, int sdv)
{
   double V,V1,oc;
   double d, pr1;
   color col;
   
   oc=MathAbs(iOpen(sym,TF,bar)-iClose(sym,TF,bar));
   if (oc==0)oc=Point;
   V=iVolume (sym,TF,bar)*(iHigh(sym,TF,bar)-iLow(sym,TF,bar))/oc;
   
   oc=MathAbs(iOpen(sym,TF,bar+1)-iClose(sym,TF,bar+1));
   if (oc==0)oc=Point;
   V1=iVolume (sym,TF,bar+1)*(iHigh(sym,TF,bar+1)-iLow(sym,TF,bar+1))/oc;
   
   d=max-min;
   pr1=(V-min)/d*(MathAbs(Gran_DW)-0.1)+Gran_DW;
   if (V>=V1)
      col=color_volum_up;
   else
      col=color_volum_dw;
   
   put_rect(sym+DoubleToStr(TF,0)+"_"+DoubleToStr(bar,0)+"_V",win, bar+sdv, width, Gran_DW, pr1, col);
}
//-----------------------------------------
void put_rect(string name,int win, int bar, int width, double pr1, double pr2, color col)
{
   if (ObjectFind(name)<0)ObjectCreate(name,OBJ_TREND,win,0,0,0,0);
   ObjectSet(name,OBJPROP_TIME1,Time[bar]);
   ObjectSet(name,OBJPROP_TIME2,Time[bar]);
   ObjectSet(name,OBJPROP_PRICE1,pr1);
   ObjectSet(name,OBJPROP_PRICE2,pr2);
   ObjectSet(name,OBJPROP_WIDTH,width);
   ObjectSet(name,OBJPROP_RAY,false);
   ObjectSet(name,OBJPROP_COLOR,col);
}
//------------------------------
double ND(double n)
{
   return(NormalizeDouble(n,Digits));
}
//----------------------------
int nom_TF(int n)
{
   switch(n)
   {
      case 1: return(PERIOD_M1);
      case 2: return(PERIOD_M5);
      case 3: return(PERIOD_M15);  
      case 4: return(PERIOD_M30);
      case 5: return(PERIOD_H1);
      case 6: return(PERIOD_H4);
      case 7: return(PERIOD_D1);
      case 8: return(PERIOD_W1);
      case 9: return(PERIOD_MN1);
   }
   return(0);
}
//----------------------------
string str_TF(int n)
{
   if (n==0)n=Period();
   switch(n)
   {
      case PERIOD_M1:  return ("M1");
      case PERIOD_M5:  return ("M5");
      case PERIOD_M15: return ("M15");  
      case PERIOD_M30: return ("M30");
      case PERIOD_H1:  return ("H1");
      case PERIOD_H4:  return ("H4");
      case PERIOD_D1:  return ("D1");
      case PERIOD_W1:  return ("W1");
      case PERIOD_MN1: return ("MN1");
   }
   return("TF?");
}
//----------------------------

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