iMarketPrice_2_1

Author: ������� �.�.
4 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