Indexes_v9L

Author: Copyright � 2009, Xupypr
Indexes_v9L
Price Data Components
Series array that contains close prices for each barSeries array that contains open time of each barSeries array that contains open prices of each bar
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Indexes_v9L
//+------------------------------------------------------------------+
//|                                                  Indexes_v9L.mq4 |
//|                                         Copyright © 2009, Xupypr |
//|                              http://www.mql4.com/ru/users/Xupypr |
//|                                             Âåðñèÿ îò 27.05.2009 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Xupypr"
#property link      "http://www.mql4.com/ru/users/Xupypr"

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_level1 0
#property indicator_color1 SteelBlue
#property indicator_color2 SteelBlue
#property indicator_color3 OrangeRed
#property indicator_color5 Silver
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
//---- input parameters
extern string Start_Time="2008.08.04 00:00"; // òî÷êà îò÷¸òà (â íåé âñå èíäåêñû ðàâíû 0%)
extern int    Choice_Start_Point=1;          // âûáîð òî÷êè îò÷¸òà: 1-ïî òåêóùåìó áàðó, 2-ïî áàðó ñòàðøåãî ÒÔ, 3-ïî çàäàííîìó âðåìåíè
extern bool   Use_Alert=false;               // èñïîëüçîâàòü îïîâåùåíèå
extern double Step_Size=0.1;                 // äåëåíèå øêàëû, ïðè èçìåíåíèè èíäåêñà íà äàííóþ âåëè÷èíó ñðàáîòàåò ñèãíàë
extern int    Pos=0;                         // ïîëîæåíèå ãèñòîãðàììû íà âðåìåííîé øêàëå
//---- indicator buffers
double Index[],Max[],Min[],Balance[],Prev[];
double StepAlert[8];
string Currency[8]={"USD","EUR","GBP","JPY","CHF","AUD","CAD","NZD"};
string Symbols[7]={"AUDUSD","EURUSD","GBPUSD","NZDUSD","USDCAD","USDCHF","USDJPY"};

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
 SetIndexBuffer(0,Max);
 SetIndexStyle(0,DRAW_HISTOGRAM);
 SetIndexLabel(0,"Maximum");
 SetIndexEmptyValue(0,0.0);
 SetIndexBuffer(1,Min);
 SetIndexStyle(1,DRAW_HISTOGRAM);
 SetIndexLabel(1,"Minimum");
 SetIndexEmptyValue(1,0.0);
 SetIndexBuffer(2,Index);
 SetIndexStyle(2,DRAW_HISTOGRAM);
 SetIndexLabel(2,"Index");
 SetIndexBuffer(3,Balance);
 SetIndexStyle(3,DRAW_SECTION);
 SetIndexLabel(3,"Balance");
 SetIndexEmptyValue(3,0.0);
 SetIndexBuffer(4,Prev);
 SetIndexStyle(4,DRAW_ARROW);
 SetIndexArrow(4,119);
 SetIndexLabel(4,"Previous");
 IndicatorDigits(2);
 return(0);
}
//+------------------------------------------------------------------+
//|  Custom indicator deinitialization function                      |
//+------------------------------------------------------------------+
int deinit()
{
 for (int i=0;i<8;i++) ObjectDelete(Currency[i]+Pos);
 ObjectDelete("Name"+Pos);
 return(0);
}
//+------------------------------------------------------------------+
//| Indexes foreign exchange                                         |
//+------------------------------------------------------------------+
int start()
{
 int    i,window,shiftbar[7];
 bool   wait=false;
 double change,indexUSD,sprice[7];
 static datetime timebar;
  
 indexUSD=1.0;
 for (i=0;i<7;i++)
 {
  shiftbar[i]=iBarShift(Symbols[i],0,Time[0],true);
  if (shiftbar[i]==-1) wait=true;
  sprice[i]=StartPrice(i);
  if (sprice[i]==-1) wait=true;
  change=iClose(Symbols[i],0,shiftbar[i])/sprice[i];
  if (change!=0)
  {
   if (StringSubstr(Symbols[i],0,3)==Currency[0]) indexUSD*=change;
   if (StringSubstr(Symbols[i],3,3)==Currency[0]) indexUSD/=change;
  } 
 }
 if (wait) return(0);
 if (timebar!=Time[0])
 {
  timebar=Time[0];
  switch (Choice_Start_Point)
  {
   case 1:
   {
    ArrayInitialize(Index,EMPTY_VALUE);
    ArrayInitialize(Max,0.0);
    ArrayInitialize(Min,0.0);
    ArrayInitialize(Balance,0.0);
    ArrayInitialize(StepAlert,0.0);
    ArrayInitialize(Prev,EMPTY_VALUE);
   } break;
   case 2:
   {
    if (Time[0]==iTime(NULL,UpPeriod(),0))
    {
     ArrayInitialize(Index,EMPTY_VALUE);
     ArrayInitialize(Max,0.0);
     ArrayInitialize(Min,0.0);
     ArrayInitialize(Balance,0.0);
     ArrayInitialize(StepAlert,0.0);
     ArrayInitialize(Prev,EMPTY_VALUE);
    }
   }
   default:
   {
    for (i=0;i<8;i++)
    {
     Index[i+10*Pos]=Index[i+1+10*Pos];
     Max[i+10*Pos]=Max[i+1+10*Pos];
     Min[i+10*Pos]=Min[i+1+10*Pos];
     Prev[i+10*Pos]=Prev[i+1+10*Pos];
    }
    Index[8+10*Pos]=EMPTY_VALUE;
    Max[8+10*Pos]=0.0;
    Min[8+10*Pos]=0.0;
    Balance[9+10*Pos]=0.0;
    Balance[10+10*Pos]=0.0;
    Prev[8+10*Pos]=EMPTY_VALUE;
   }
  } 
 }
 indexUSD=100*MathPow(indexUSD,0.125);
 Index[7+10*Pos]=indexUSD-100.0;
 Index[6+10*Pos]=indexUSD*(iClose(Symbols[1],0,shiftbar[1])/sprice[1])-100.0;
 Index[5+10*Pos]=indexUSD*(iClose(Symbols[2],0,shiftbar[2])/sprice[2])-100.0;
 Index[4+10*Pos]=indexUSD/(iClose(Symbols[6],0,shiftbar[6])/sprice[6])-100.0;
 Index[3+10*Pos]=indexUSD/(iClose(Symbols[5],0,shiftbar[5])/sprice[5])-100.0;
 Index[2+10*Pos]=indexUSD*(iClose(Symbols[0],0,shiftbar[0])/sprice[0])-100.0;
 Index[1+10*Pos]=indexUSD/(iClose(Symbols[4],0,shiftbar[4])/sprice[4])-100.0;
 Index[0+10*Pos]=indexUSD*(iClose(Symbols[3],0,shiftbar[3])/sprice[3])-100.0;
 for (i=0;i<8;i++)
 {
  if (Index[i+10*Pos]>StepAlert[i]+Step_Size || Index[i+10*Pos]<StepAlert[i]-Step_Size)
  {
   Prev[i+10*Pos]=StepAlert[i];
   if (Index[i+10*Pos]>0) StepAlert[i]=MathFloor(Index[i+10*Pos]/Step_Size)*Step_Size;
   else StepAlert[i]=MathCeil(Index[i+10*Pos]/Step_Size)*Step_Size;
   if (Use_Alert) Alert("Èíäåêñ ",Currency[7-i]," äîñòèã îòìåòêè ",StepAlert[i]);
  }
  if (Index[i+10*Pos]>Max[i+10*Pos]) Max[i+10*Pos]=Index[i+10*Pos];
  if (Index[i+10*Pos]<Min[i+10*Pos]) Min[i+10*Pos]=Index[i+10*Pos];
  Balance[8+10*Pos]=MathMax(Max[ArrayMaximum(Max)],MathAbs(Min[ArrayMinimum(Min)]));
  Balance[9+10*Pos]=Balance[8+10*Pos]*(-1);
  if (ObjectFind(Currency[i]+Pos)==-1)
  {
   window=WindowFind(WindowExpertName());
   ObjectCreate(Currency[i]+Pos,OBJ_TEXT,window,Time[7-i+10*Pos],0);
   ObjectSetText(Currency[i]+Pos,Currency[i]+"   "+DoubleToStr(Index[7-i+10*Pos],2),8,"Arial",Gray);
   ObjectSet(Currency[i]+Pos,OBJPROP_ANGLE,90.0);
  }
  else
  {
   ObjectSet(Currency[i]+Pos,OBJPROP_TIME1,Time[7-i+10*Pos]);
   ObjectSet(Currency[i]+Pos,OBJPROP_PRICE1,0);
   ObjectSetText(Currency[i]+Pos,Currency[i]+"   "+DoubleToStr(Index[7-i+10*Pos],2),8,"Arial",Gray);
  }
 }
 if (ObjectFind("Name"+Pos)==-1)
 {
  window=WindowFind(WindowExpertName());
  ObjectCreate("Name"+Pos,OBJ_TEXT,window,Time[8+10*Pos],0);
  switch (Choice_Start_Point)
  {
   case 1: ObjectSetText("Name"+Pos,"Ïî òåêóùåìó ÒÔ: "+PeriodToStr(Period()),8,"Arial",Gray); break;
   case 2: ObjectSetText("Name"+Pos,"Ïî ñòàðøåìó ÒÔ: "+PeriodToStr(UpPeriod()),8,"Arial",Gray); break;
   default: ObjectSetText("Name"+Pos,"Ïî âðåìåíè: "+Start_Time,8,"Arial",Gray);
  }
  ObjectSet("Name"+Pos,OBJPROP_ANGLE,90.0);
 }
 else
 {
  ObjectSet("Name"+Pos,OBJPROP_TIME1,Time[8+10*Pos]);
  ObjectSet("Name"+Pos,OBJPROP_PRICE1,0);
  switch (Choice_Start_Point)
  {
   case 1: ObjectSetText("Name"+Pos,"Ïî òåêóùåìó ÒÔ: "+PeriodToStr(Period()),8,"Arial",Gray); break;
   case 2: ObjectSetText("Name"+Pos,"Ïî ñòàðøåìó ÒÔ: "+PeriodToStr(UpPeriod()),8,"Arial",Gray); break;
   default: ObjectSetText("Name"+Pos,"Ïî âðåìåíè: "+Start_Time,8,"Arial",Gray);
  }
 }
 return(0);
}

double StartPrice(int n)
{
 double sp,bar;
 switch (Choice_Start_Point)
 {
  case 1:  sp=iOpen(Symbols[n],0,iBarShift(Symbols[n],0,Time[0])); break;
  case 2:
  {
    bar=iBarShift(Symbols[n],UpPeriod(),Time[0],true);
    if (bar==-1) return(-1);
    else sp=iOpen(Symbols[n],UpPeriod(),bar);
  } break;
  default: sp=iOpen(Symbols[n],0,iBarShift(Symbols[n],0,StrToTime(Start_Time)));
 }
 return(sp);
}

int UpPeriod()
{
 int p;
 switch (Period())
 {
  case PERIOD_M1:  p=PERIOD_M5;  break;
  case PERIOD_M5:  p=PERIOD_M15; break;
  case PERIOD_M15: p=PERIOD_M30; break;
  case PERIOD_M30: p=PERIOD_H1;  break;
  case PERIOD_H1:  p=PERIOD_H4;  break;
  case PERIOD_H4:  p=PERIOD_D1;  break;
  case PERIOD_D1:  p=PERIOD_W1;  break;
  case PERIOD_W1:  p=PERIOD_MN1; break;
  case PERIOD_MN1: p=PERIOD_MN1;
 }
 return(p);
}

string PeriodToStr(int period)
{
 string p;
 switch (period)
 {
  case PERIOD_M1:  p="M1";  break;
  case PERIOD_M5:  p="M5";  break;
  case PERIOD_M15: p="M15"; break;
  case PERIOD_M30: p="M30"; break;
  case PERIOD_H1:  p="H1";  break;
  case PERIOD_H4:  p="H4";  break;
  case PERIOD_D1:  p="D1";  break;
  case PERIOD_W1:  p="W1";  break;
  case PERIOD_MN1: p="MN1";
 }
 return(p);
}
//+------------------------------------------------------------------+

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