Price Data Components
Miscellaneous
0
Views
0
Downloads
0
Favorites
albus_MultiChart_1
//+------------------------------------------------------------------+
//| albus_MultiChart_1.mq4 |
//| Albus Dumbledore © |
//| Ad opus! |
//|èíäèêàòîð ïîçâîëÿåò ðèñîâàòü â îñíîâíîì îêíå ãðàôèê |
//|ëþáîãî èíñòðóìåíòà, ëþáîãî** ïåðèîäà, |
//|äîï÷àðò ìîæíî ïåðåìåùàòü â ëþáóþ òî÷êó îêíà (äâèãàòü ÒÕÒ ìàðêåð) |
//| |
//| * Ñäåëàí ïî ìîòèâàì Instrument2.mq4 îò Denis Orlov |
//| * Ãëþê ñ îòðèñîâêîé òåë áàðîâ ïðè ïåðåêîìïèëÿöèè (åñëè èíä. âêë) |
//| ðåøåíèå - îòêðûòü îêíî íàñòðîåê íàæàòü ÎÊ, äàëüøå ïîðÿäîê |
//| **  òåñòåðå íå âûâîäèòü ïåðèîäû ìåíüøå ÷åì îñíîâíîé ÷àðò |
//| **  òåñòåðå íå çàïóñêàòü áîëüøå ÷åì íà íåäåëüíîì ãðàôèêå :) |
//| *** Ïðè çàïóñêå íà äðåâíåé èñòîðèè ïîñòàâèòü ìíîãî áàðîâ â îêíå |
//| *** Ïðè çàïóñêå íà äðåâíåé èñòîðèè óáåäèòüñÿ ÷òî îíà åñòü |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 4
double Line1[], Line2[], Line3[], Line4[];
extern string Instrument = ""; // ëþáîé èíñòðóìåíò (äîëæíà ïðèñóòñòâîâàòü èñòîðèÿ)
extern int TimeFrame = 0; // ïåðèîä öèôðàìè (äëÿ Í1 - 60)(äîëæíà ïðèñóòñòâîâàòü èñòîðèÿ)
extern int History = 100; // äëèíà ïðîðèñîâêè
extern double KoefPress = 1; // ñæàòèå(ðàçæàòèå) ãðàôèêà äëÿ óäîáñòâà (3-âòðîå ðàñòÿíóò, 0,5-âäâîå ñæàò è ò.ä.)
extern double KoefJPY = 1; // ïðè ðàáîòå ñ åíîâûìè + íååíîâûìè ïàðàìè (èçìåíÿòü 0.01 èëè 100 èëè îêîëî òîãî)
extern double KoefInvers = 1; // íîðì = 1 èíâåðñèÿ = -1
extern int ColorStyle = 1; // öâåòîâàÿ ñõåìà èíäèêàòîðà (èçìåíÿòü îò 1 äî 9)
extern int TxtHorizShift = 0; // çàçîð ìåæäó ÒÕÒ è ãðàôèêîì (êîë. áàðîâ)
extern double TxtAngle = 90.0; // ïîâîðîò ÒÕÒ ãðàäóñîâ (90 - âåðòèêàëüíî)
extern color TxtColor = Red; // öâåò ÒÕÒ
int LastTxtTime; //îïèñûâàåò êîîðäèíàòû ÒÕÒ
double LastTxtPrice; //îïèñûâàåò êîîðäèíàòû ÒÕÒ
int BarsOnLastTick = 0; // äëÿ êîíòðîëÿ ïîÿâëåíèÿ íîâîãî áàðà
double LastOpenPrice = 0; // äëÿ êîíòðîëÿ âåðòèêàëüíîãî ñìåùåíèÿ ãðàôèêà ïðè íîâîì áàðå
string IndName; // ñèìâîë + ÒÔ
//
// init()
//
int init()
{
SetIndexBuffer(0, Line1);
SetIndexBuffer(1, Line2);
SetIndexBuffer(2, Line3);
SetIndexBuffer(3, Line4); //íàçíà÷åíèå áóôåðîâ èíäèêàòîðîâ
SetColorStyle();
if(Instrument == "")
Instrument = Symbol();
if(TimeFrame == 0)
TimeFrame = Period();
IndName = Instrument + " " + PeriodToStr(TimeFrame);
DrawText(IndName + "TXT",
Time[1],
Open[0],
TxtAngle,
IndName,
TxtColor,
12,
0); // ðèñîâàíèå ÒÕÒ ìàðêåðà
LastTxtTime = Time[1];
LastTxtPrice = Open[1];
return(0);
}
//
//
// deinit()
//
int deinit()
{
ObjectDelete(IndName + "TXT");
return(0);
}
//
//
// start()
//
int start()
{
int i = 0; // êîë. áàðîâ êîòîðûå íóæíî ïåðåðèñîâûâàòü
double koefChart = KoefPress * KoefJPY * KoefInvers;
int testingShift;
if(IsTester())
testingShift = iBarShift(Instrument, TimeFrame, Time[0]);
else
testingShift = 0;
//åñëè èíäèêàòîð òîëüêî çàïóùåí, LastOpenPrice ñòàâèì ïî ïîñëåäíåìó ðèñóåìîìó áàðó
if(LastOpenPrice == 0)
if(Instrument == Symbol() && TimeFrame == Period())
LastOpenPrice = Open[0];
else
LastOpenPrice = iOpen(Instrument, TimeFrame,testingShift);
// åñëè íîâûé áàð
if(BarsOnLastTick < Bars)
{
BarsOnLastTick = Bars;
i = History - 1; // åñëè íîâûé áàð - ïåðåðèñîâûâàòü âñå (ò.ê. ðàçíûå ïåðèîäû, âñå ñìåùàåòñÿ)
ArrayInitialize(Line1, 0.0);
ArrayInitialize(Line2, 0.0);
ArrayInitialize(Line3, 0.0);
ArrayInitialize(Line4, 0.0);
//ïåðåìåùåíèå ÒÕÒ
double txtPriceShift; //ñäâèã ïî öåíå
if(Instrument == Symbol() && TimeFrame == Period())
{
txtPriceShift = Open[0] - LastOpenPrice;
LastOpenPrice = Open[0];
}
else
{
txtPriceShift = iOpen(Instrument, TimeFrame, testingShift) - LastOpenPrice;
LastOpenPrice = iOpen(Instrument, TimeFrame, testingShift);
}
ObjectSet(IndName+"TXT",
OBJPROP_PRICE1,
ObjectGet(IndName + "TXT",OBJPROP_PRICE1) + koefChart * txtPriceShift);
ObjectSet(IndName + "TXT",
OBJPROP_TIME1,
ObjectGet(IndName + "TXT", OBJPROP_TIME1) + Time[0] - Time[1]);
}
//åñëè äâèãàëè ÒÕÒ èëè îíà àâòîìàòè÷åñêè ïåðåìåñòèëàñü ïðè ïðèõîäå íîâîãî áàðà
if((LastTxtTime != ObjectGet(IndName + "TXT", OBJPROP_TIME1)) ||
(LastTxtPrice != ObjectGet(IndName + "TXT", OBJPROP_PRICE1))) //ïîëíûé ïåðåñ÷åò åñëè äâèãàëè ÒÕÒ
{
i = History - 1; // âñ¸ ïåðåðèñîâàòü
LastTxtTime = ObjectGet(IndName+"TXT", OBJPROP_TIME1);
LastTxtPrice = ObjectGet(IndName+"TXT", OBJPROP_PRICE1);
ArrayInitialize(Line1, 0.0);
ArrayInitialize(Line2, 0.0);
ArrayInitialize(Line3, 0.0);
ArrayInitialize(Line4, 0.0);
}
//ïîäãîòîâêà ê ðàñ÷åòó èíäèêàòîðà
int HorizMovChart = iBarShift(NULL,0,LastTxtTime);
i = i + HorizMovChart + TxtHorizShift + testingShift; //ó÷åò ñìåùåíèÿ ãðàôèêà ïî ãîðèçîíòàëè
double H,
L,
O,
C,
OLast;
while(i >= (HorizMovChart + TxtHorizShift + testingShift))
{
H = iHigh(Instrument, TimeFrame, i - HorizMovChart - TxtHorizShift);
L = iLow(Instrument, TimeFrame, i - HorizMovChart - TxtHorizShift);
O = iOpen(Instrument,TimeFrame, i - HorizMovChart - TxtHorizShift);
C = iClose(Instrument, TimeFrame, i - HorizMovChart - TxtHorizShift);
OLast = iOpen(Instrument, TimeFrame, testingShift);
//â òåñòåðå ïîñëåäíèé áàð äîï÷àðòà - òîëüêî îïåí, ÷òîá íå ïîäñìàòðèâàòü ;)
if(IsTester() && ((i - HorizMovChart - TxtHorizShift) == testingShift))
{
H = O;
C = O;
L = O;
}
if(C > O)
{
Line1[i - testingShift] = LastTxtPrice + koefChart * (C - OLast);
Line2[i - testingShift] = LastTxtPrice + koefChart * (O - OLast);
Line3[i - testingShift] = LastTxtPrice + koefChart * (H - OLast);
Line4[i - testingShift] = LastTxtPrice + koefChart * (L - OLast);
}
else
if(C < O)
{
Line1[i - testingShift] = LastTxtPrice + koefChart * (C - OLast);
Line2[i - testingShift] = LastTxtPrice + koefChart * (O - OLast);
Line3[i - testingShift] = LastTxtPrice + koefChart * (L - OLast);
Line4[i - testingShift] = LastTxtPrice + koefChart * (H - OLast);
}
else
{
Line1[i - testingShift] = LastTxtPrice + koefChart * (O - OLast);
Line2[i - testingShift] = Line1[i - testingShift] + 0.01 * Point;
Line3[i - testingShift] = LastTxtPrice + koefChart * (L - OLast);
Line4[i - testingShift] = LastTxtPrice + koefChart * (H - OLast);
}
i--;
} //while
return(0);
}
//
//
// SetColorStyle()
// Ôóíêöèÿ óñòàíàâèëèâàåò/ìåíÿåò öâåòîâóþ ñõåìó ãðàôèêà èíäèêàòîðà
// íîìåð ñõåìû áåðåòñÿ èç âíåøíåé ïåðåìåííîé ColorStyle
//
int SetColorStyle()
{
color bullsBar,
bearsBar;
switch(ColorStyle)
{
case 1: bullsBar = DarkTurquoise;
bearsBar = DarkBlue;
break;
case 2: bullsBar = Orange;
bearsBar = Maroon;
break;
case 3: bullsBar = LimeGreen;
bearsBar = DarkGreen;
break;
case 4: bullsBar = DeepPink;
bearsBar = DarkViolet;
break;
case 5: bullsBar = DarkGray;
bearsBar = Black;
break;
case 6: bullsBar = Red;
bearsBar = Black;
break;
case 7: bullsBar = Gray;
bearsBar = Red;
break;
case 8: bullsBar = LimeGreen;
bearsBar = Red;
break;
case 9: bullsBar = LimeGreen;
bearsBar = Black;
}
SetIndexStyle(0, DRAW_HISTOGRAM, 0, 3, bullsBar);
SetIndexStyle(1, DRAW_HISTOGRAM, 0, 3, bearsBar);
SetIndexStyle(2, DRAW_HISTOGRAM, 0, 1, bullsBar);
SetIndexStyle(3, DRAW_HISTOGRAM, 0, 1, bearsBar);
}
//
//
// PeriodToStr()
// Ôóíêöèÿ ïðåîáðàçîâàíèÿ öèôðîâîãî âèäà ïåðèîäà (240) ê ñèìâîëüíîìó (Í4)
//
string PeriodToStr(int per)
{
switch(per)
{
case 1: return("M1");
case 5: return("M5");
case 15: return("M15");
case 30: return("M30");
case 60: return("H1");
case 240: return("H4");
case 1440: return("D1");
case 10080: return("W1");
case 43200: return("ÌN");
}
}
//
//
// DrawText()
// Ôóíêöèÿ âûâîäèò íà ãðàôèê òåêñòîâóþ ìåòêó
//
int DrawText ( string name, //1 èìÿ
datetime times, //2 êîðäèíàòà âðåìåíè
double price, //3 êîîðäèíàòà öåíû
double angle, //4 óãîë íàêëîíà ìåòêè (90-âåðòèêàëüíî)
string text, //5 ñîäåðæàíèå
color clr, //6 öâåò
int size = 10, //7 ðàçìåð øðèôòà
int win = 0) //8 îêíî âûâîäà (0-ãðàôèê öåíû)
{
ObjectCreate (name, OBJ_TEXT, win, times, price);
ObjectSet (name, OBJPROP_PRICE1, price);
ObjectSet (name, OBJPROP_TIME1, times);
ObjectSet (name, OBJPROP_ANGLE, angle);
ObjectSetText (name, text ,size,"Arial",clr);
return (0);
}
//
//
// IsTester() bool
// Ôóíêöèÿ ïðîâåðÿåò â òåñòåðå ìû?
// Äà - âîçâðàùàåò TRUE.
// Íåò - âîçâðàùàåò FALSE.
// Åñëè âðåìÿ ïîñëåäíåãî áàðà äàíîãî ãðàôèêà ìåíüøå âðåìåíè ïîñëåäíåãî
// èñòîðè÷åñêîãî áàðà ñòàðøåãî ïåðèîäà ìû â òåñòåðå
//
bool IsTester()
{
int nextPeriod;
switch(Period())
{
case 1: nextPeriod = 5; break;
case 5: nextPeriod = 15; break;
case 15: nextPeriod = 30; break;
case 30: nextPeriod = 60; break;
case 60: nextPeriod = 240; break;
case 240: nextPeriod = 1440; break;
case 1440: nextPeriod = 10080; break;
case 10080: nextPeriod = 43200;
}
if(Time[0] < iTime(NULL,nextPeriod,0))
return (TRUE);
else
return (FALSE);
}
//
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
---