iMarketPrice_2_1

Author: ������� �.�.
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open prices of each bar
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
iMarketPrice_2_1
//+------------------------------------------------------------------+
//|                                                 iMarketPrice.mq4 |
//|                                                     Óñåíêîâ È.Ñ. |
//|                                              http://AdvisorTC.ru |
//+------------------------------------------------------------------+
#property copyright "Óñåíêîâ È.Ñ."
#property link      "http://AdvisorTC.ru"
#property indicator_chart_window

extern string  __periodForHiLoCheck = "Ïåðèîä äëÿ êîòîðîãî ïîêàçûâàåòñÿ Hi-Lo. 0 - àâòî íàñòðîéêà";
extern int     _periodForHiLoCheck = 0;
extern string  __isShowSinteticBar = "Ïîêàçûâàòü áàð îòíîøåíèÿ Hi-Lo-Op-Cl";
extern bool    _isShowSinteticBar = true;
/*
extern string  __showBox = "Ïîêàçûâàòü êîðîáî÷êó íà÷àëà ïåðèîäà îöåíêè è ýêñòðåìóìîâ";
extern bool    _showBox = true;
*/

extern string  __setCoord = "-- ÍÀÑÒÐÎÉÊÀ ÐÀÇÌÅÙÅÍÈß ÏÀÍÅËÈ -- ";
extern string  __panelPosition = "Óãîë äëÿ ïàíåëè: 0 - ëåâûé âåðõíèé (ËÂ); 1 - ÏÂ; 2 - ÍË; 3 - ÍÏ";
extern int     _panelPosition = 1;    //_panelPosition = true;
extern string  __coordinates = "Êîîðäèíàòû ïàíåëè";
extern int     _yPanel = 5;
extern int     _xPanel = 5;

extern string  __colors = "-- ÍÀÑÒÐÎÉÊÀ ÖÂÅÒÎÂ --";
extern color   _upColor = LimeGreen;
extern color   _downColor = Red;
extern color   _highColor = Green;
extern color   _toHighColor = Green;
extern color   _lowColor = Brown;
extern color   _toLowColor = Brown;
extern color   _timerColor = DodgerBlue;
extern color   _spreadColor = DodgerBlue;
extern color   _colSymbolName = Gray;

// Ïåðåìåííûå äëÿ îïðåäåëåíèÿ öâåòà òåêóùåé öåíû
int MA_Fast_Period = 1;
int MA_Slow_Period = 5;

string peric = "";

int init() 
{
   if(_periodForHiLoCheck == 0)
   {
      switch(Period())
      {
         case PERIOD_M1:
         _periodForHiLoCheck = PERIOD_H1;
         break;
         case PERIOD_M5:
         _periodForHiLoCheck = PERIOD_H4;
         break;
         case PERIOD_M15:
         _periodForHiLoCheck = PERIOD_H4;
         break;
         case PERIOD_M30:
         _periodForHiLoCheck = PERIOD_D1;
         break;
         case PERIOD_H1:
         _periodForHiLoCheck = PERIOD_D1;
         break;
         case PERIOD_H4:
         _periodForHiLoCheck = PERIOD_W1;
         break;
         case PERIOD_D1:
         _periodForHiLoCheck = PERIOD_W1;
         break;
         case PERIOD_W1:
         _periodForHiLoCheck = PERIOD_MN1;
         break;
      }
   }   
   
   switch(_periodForHiLoCheck)
      {
         case PERIOD_M1:
         peric = "Minute";
         break;
         case PERIOD_M5:
         peric = "5 minutes";
         break;
         case PERIOD_M15:
         peric = "15 minutes";
         break;
         case PERIOD_M30:
         peric = "30 minutes";
         break;
         case PERIOD_H1:
         peric = "Hour";
         break;
         case PERIOD_H4:
         peric = "4 hours";
         break;
         case PERIOD_D1:
         peric = "Day";
         break;
         case PERIOD_W1:
         peric = "Week";
         break;
         case PERIOD_MN1:
         peric = "Month";
         break;
      }
      
   return (0);
}

int deinit() 
{
   DeleteObjects();
   return (0);
}


//---------------------------------------------- 2 -
//- Óäàëåíèå îáúåêòîâ ãðàôèêà äàííîãî ýêñïåðòà -----
void DeleteObjects(string prefixName = "iMP")
{    
   int countObject = ObjectsTotal();
   string nameObject = "";
   for(int i = countObject; i >= 0; i--)
   {
      nameObject = ObjectName(i);
      if(StringFind(nameObject, prefixName, 0) != -1)
      {
         ObjectDelete(nameObject);
      }
   }
}
//- Êîíåö --------------------------------------
//----------------------------------------------

void CreateLabel( string name, 
                  double corner, 
                  int x, 
                  int y, 
                  string text,  
                  color col = -1,
                  int fontSize = 8, 
                  string fontName = "Lucida Console") 
{
   ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
   ObjectSetText(name, text, fontSize, fontName, col);
   ObjectSet(name, OBJPROP_CORNER, corner);
   ObjectSet(name, OBJPROP_XDISTANCE, x);
   ObjectSet(name, OBJPROP_YDISTANCE, y);
}

int ColorOfPrice(int colorUp, int colorDown) 
{
   double cur = iMA(Symbol(), PERIOD_M15, MA_Fast_Period, 0, MODE_SMA, PRICE_TYPICAL, 0);
   double aver = iMA(Symbol(), PERIOD_M15, MA_Slow_Period, 0, MODE_SMA, PRICE_TYPICAL, 0);
   if (cur > aver) { return (colorUp); }
   return (colorDown);
}


// Ôóíêöèÿ óáèðàåò íîëü åñëè êîòèðîâêà íà÷èíàåòñÿ ñ íåãî
string SetPrice(double price)
{
   string result = DoubleToStr(price, Digits);
   
   if(Digits >= 5) 
   {
      int pos = StringFind(result, ".");
      result =  StringSubstr(result, pos, StringLen(result) - pos); 
   }
   return(result);
}


int start() 
{   
   // Òåêóùàÿ öåíà
   string curPrice = SetPrice(Bid);// DoubleToStr(Bid, Digits);
   int fontSizeBig = 20;
   color col = ColorOfPrice(_upColor, _downColor);
   CreateLabel("iMP_curBid", _panelPosition, 
               _xPanel + 34, _yPanel + 28, 
               curPrice, col, fontSizeBig);
         
   // Ñàìàÿ âûñîêàÿ öåíà çà ïåðèîä
   double dayHi = iHigh(Symbol(), _periodForHiLoCheck, 0);
   string dayHigh = "Hi " + SetPrice(dayHi);
   CreateLabel("iMP_dayHigh", _panelPosition, 
               _xPanel + 75, _yPanel + 14, 
               dayHigh, _highColor);
      
   // Ñàìàÿ íèçêà öåíà çà ïåðèîä
   double dayLo = iLow(Symbol(), _periodForHiLoCheck, 0);
   string dayLow = "Lo " + SetPrice(dayLo);   
   CreateLabel("iMP_dayLow", _panelPosition, 
               _xPanel + 75, _yPanel + 53, 
               dayLow, _lowColor);
   
   // Ðàññòîÿíèå îò öåíû äî High
   string toHi = "-" + DoubleToStr((dayHi - Bid) / Point, 0);
   CreateLabel("iMP_toHigh", _panelPosition, 
               _xPanel + 34, _yPanel + 14, 
               toHi, _toHighColor);
   
   // Ðàññòîÿíèå îò öåíû äî Low   
   string toLo = "+" + DoubleToStr((Bid - dayLo) / Point, 0);
   CreateLabel("iMP_toLow", _panelPosition, 
               _xPanel + 34, _yPanel + 53, 
               toLo, _toLowColor);
   
   // Âðåìÿ äî ñëåäóþùåãî áàðà
   double sec = Time[4] - Time[5] - MathMod(TimeCurrent(), Time[4] - Time[5]);
   double min = sec / 60;
   sec = 60.0 * (min - MathFloor(min));
   min = MathFloor(min);
   
   string timeSec = DoubleToStr(sec, 0);
   string timeMin = DoubleToStr(min, 0);
   string timeHour = "";
   if(StringLen(timeSec) == 1) { timeSec = "0" + timeSec; }
   
   if(min / 60 > 1)
   {
      timeHour = DoubleToStr(MathFloor(min / 60), 0);
      timeMin = DoubleToStr(min - MathFloor(min / 60) * 60, 0);
      if(StringLen(timeMin) == 1) { timeMin = "0" + timeMin; }    
      timeHour = timeHour + ":";
   }
   
   CreateLabel("iMP_timeToNextBar", _panelPosition, 
               _xPanel + 5, _yPanel + 65, 
               timeHour + timeMin + ":" + timeSec, _timerColor);
   
   
   // Ask. Ïîñëåäíèå òðè öèôðû
   string curAsk = SetPrice(Ask);
   string q = DoubleToStr((Ask - Bid) / Point, 0); // ñïðåä
   int propa = StringLen(q);
   int countRound = StringLen(q);
   // íàñòðàèâàåì êîëè÷åñòâî öèôð äëÿ àñêà
   for(int l = StringLen(curAsk) - 1 - propa; l >= 0; l--)
   {
      if(StringGetChar(curPrice, l) != StringGetChar(curAsk, l)
         || StringGetChar(curAsk, l) == '.')
      {
         countRound++;
         // îãðàíè÷åíèÿ äëÿ îáðåçêè
         if(countRound == 4) { break; }
      }   
      else { break; }
   }
   // îáðåçêà
   if(countRound <= propa || countRound <= 2) { countRound++; }
   curAsk = StringSubstr(curAsk, StringLen(curAsk) - countRound, StringLen(curAsk) - 1);
   CreateLabel("iMP_curAsk", _panelPosition, 
               _xPanel + 5, _yPanel + 28, 
               curAsk, col);
      
   // Ñïðåä
   string spr = "±" + DoubleToStr((Ask - Bid) / Point, 0);
   CreateLabel("iMP_curSpread", _panelPosition, 
               _xPanel + 5, _yPanel + 40, 
               spr, _spreadColor);
   
   // Òåêóùåå ïîëîæåíèå öåíû
   double toHigh = dayHi - Bid;
   double toLow = Bid - dayLo;
   
   double res = toHigh / (toHigh + toLow);
   
   int posHi = ObjectGet("iMP_toHigh", OBJPROP_YDISTANCE); // 14
   int posLo = ObjectGet("iMP_toLow", OBJPROP_YDISTANCE); // 53
   
   if(res <= 0.5) { col = _highColor; } 
   else { col = _lowColor; }
   
   int posRes = MathRound(MathAbs(posHi - posLo) * res);
   
   // ðèñóåì ñèíòåòè÷åñêóþ ñâå÷êó
   if(_isShowSinteticBar == true)
   {
      // íàñòðàèâàåì öâåò
      if(Bid > iOpen(Symbol(), _periodForHiLoCheck, 0)) { col = _upColor; }
      else { col = _downColor; }
      // Òåëî ñâå÷è
      CreateLabel("iMP_curPosition1", _panelPosition, 
                  150, posHi,//_xPanel + 10, _yPanel + 40, 
                  "|", col, 8, "Fixedsys");
      CreateLabel("iMP_curPosition2", _panelPosition, 
                  150, posHi + 11,//_xPanel + 10, _yPanel + 40, 
                  "|", col, 8, "Fixedsys");               
      CreateLabel("iMP_curPosition3", _panelPosition, 
                  150, posHi + 11 * 2,//_xPanel + 10, _yPanel + 40, 
                  "|", col, 8, "Fixedsys");
      CreateLabel("iMP_curPosition4", _panelPosition, 
                  150, posHi + 11 * 3 - 2,//_xPanel + 10, _yPanel + 40, 
                  "|", col, 8, "Fixedsys");
      
      // òåêóùàÿ öåíà
      // íàñòðàèâàåì öâåò
      /*color c;
      if(Bid > iOpen(Symbol(), _periodForHiLoCheck, 0)) { c = _downColor; }
      else { c = _upColor; }*/
      CreateLabel("iMP_curPosition", _panelPosition, 
                  150, posRes + posHi,
                  "¬", col, 8, "Wingdings 3");
                         
      // öåíà îòêðûòèÿ       
      toHigh = dayHi - iOpen(Symbol(), _periodForHiLoCheck, 0);
      toLow = iOpen(Symbol(), _periodForHiLoCheck, 0) - dayLo;
      res = toHigh / (toHigh + toLow);
      posRes = MathRound(MathAbs(posHi - posLo) * res);               
      CreateLabel("iMP_openPosition", _panelPosition, 
                  155, posRes + posHi,
                  "¬", col, 8, "Wingdings 3");      
   }
   
   
   // ñòîèìîñòü ïóíêòà íà îäèí ëîò
   double PointValue = 0;
   if(MarketInfo(Symbol(), MODE_TICKSIZE) != 0)
   {
      PointValue =   MarketInfo(Symbol(), MODE_TICKVALUE) 
                     * (MarketInfo(Symbol(), MODE_POINT) 
                     / MarketInfo(Symbol(), MODE_TICKSIZE));
   }
   string pip = DoubleToStr(PointValue, 2);
   if(pip == "1.00") { pip = "1.0"; }
   if(AccountCurrency() == "USD") { pip = pip + "$"; }
   else if(AccountCurrency() == "EUR") { pip = pip + "ˆ"; }
   else { pip = pip + AccountCurrency(); }
   
   CreateLabel("iMP_pipValue", _panelPosition, 
               _xPanel + 75, _yPanel + 65, 
               pip, Green);
   
   
   // ìåòêà ðàñ÷åòíîãî ïåðèîäà
   CreateLabel("iMP_checkPeriod", _panelPosition, 
               _xPanel + 5, _yPanel + 80, 
               "calc for current " + peric, Gray, 7);
   // ìåòêà òåêóùåãî ñèìâîëà è ïåðèîäà 
   CreateLabel("iMP_currentPeriod", _panelPosition, 
               _xPanel + 5, _yPanel, 
               Symbol() + ", " + PeriodToString(Period()), _colSymbolName);
   
   return (0);
}


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

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