Price Data Components
Indicators Used
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---