ZZ_Standard_Functions_TF_YR1_Lib
Download scriptThis script is designed to provide traders with specialized data regarding the "Yearly" timeframe in MetaTrader. While standard platforms usually offer monthly or weekly views, this tool calculates and extracts specific information for a yearly cycle, which helps in analyzing long-term market structures.
Here is a breakdown of how the logic works:
Core Functionality
The script operates by scanning through historical monthly data to reconstruct and identify Yearly periods. Instead of looking at a single bar, it "travels" through the history of the currency pair to determine where one year ends and another begins.
Key Features and Logic:
- Yearly Bar Counting: The script calculates exactly how many yearly cycles exist in the current history of a specific asset. It does this by looking at monthly bars and identifying transitions between different calendar years.
- Time-Based Search: You can input a specific date, and the script will search through the history to find which "Yearly Bar" that date belongs to.
- It includes an "Exact Match" toggle: if turned off, it will find the nearest year available; if turned on, it will only return a result if the date matches perfectly.
- Data Extraction for Specific Years: Once the script identifies a specific yearly bar (for example, by its sequence number), it can pull the following details for that period:
- Opening Time: The exact date and time when that yearly cycle started.
- Price Data: It retrieves the opening price, the highest price reached, the lowest price reached, and the final closing price for that specific year.
How the Information is Displayed
The script takes all this calculated data and displays it in a summary format directly on your trading chart. This allows a user to see at a glance:
- The current timeframe being used.
- The total number of yearly cycles recorded.
- The specific index of the year associated with a chosen date.
- All relevant price levels (High, Low, Open, Close) for a user-defined yearly position.
Essentially, this serves as a high-level historical scanner that simplifies the process of finding and viewing annual price milestones without the user having to manually scroll through years of monthly charts.
//+-----------------------------------------------------------------------------------------------+
//| ZZ_Standard_Functions_TF_YR1_Lib.mq4|
//| Copyright © Zhunko |
//|01.07.2007 ÌF ZHUNKO zhunko@mail.ru |
//+-----------------------------------------------------------------------------------------------+
//| Íàáîð ôóíêöèé äëÿ ÒÔ YR1. |
//|1.Êîëè÷åñòâî áàðîâ â ÒÔ YR1. |
//| int iBars_YR1 (string Exchange); |
//| iBarsYR (âàëþòíàÿ ïàðà); |
//|2.Íîìåð áàðà ïî âðåìåíè â ÒÔ YR1. |
//| int iBarShift_YR1 (string Exchange, datetime time, bool exact); |
//| iBarShiftYR (âàëþòíàÿ ïàðà, çíà÷åíèå âðåìåíè äëÿ ïîèñêà, âîçâðàùàåìîå çíà÷åíèå åñëè áàð íå |
//| íàéäåí (FALSE - iBarShift âîçâðàùàåò áëèæàéøèé/TRUE - iBarShift âîçâðàùàåò -1));|
//|3.Âðåìÿ îòêðûòèÿ ïî íîìåðó áàðà â ÒÔ YR1. |
//| datetime iTime_YR1 (string Exchange, int shift); |
//| iCloseYR (âàëþòíàÿ ïàðà, íîìåð áàðà); |
//|4.Öåíà îòêðûòèÿ. |
//| double iOpen_YR1 (string Exchange, int shift); |
//| iOpenYR (âàëþòíàÿ ïàðà, íîìåð áàðà); |
//|5.Ìàêñèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1. |
//| double iHigh_YR1 (string Exchange, int shift); |
//| iHighYR (âàëþòíàÿ ïàðà, íîìåð áàðà); |
//|6.Ìèíèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1. |
//| double iLow_YR1 (string Exchange, int shift); |
//| iLowYR (âàëþòíàÿ ïàðà, íîìåð áàðà); |
//|7.Öåíà çàêðûòèÿ. |
//| double iClose_YR1 (string Exchange, int shift); |
//| iCloseYR (âàëþòíàÿ ïàðà, íîìåð áàðà); |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright © 2006 Zhunko"
#property link "zhunko@mail.ru"
#property library
//ææææÑòàíäàðäíûå áèáëèîòå÷íûå ôóíêöèè äëÿ ÒÔ YR1.æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//====Êîëè÷åñòâî áàðîâ â ÒÔ YR1.===================================================================================================================================================
int iBars_YR1 (string Exchange) // iBarsYR (âàëþòíàÿ ïàðà);
{
int iBarsMN1; // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsYR1 = 0; // Êîëè÷åñòâî áàðîâ â ÒÔ YR1.
//----
iBarsMN1 = iBars (Exchange, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
for (int i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
return (iBarsYR1);
}
//=================================================================================================================================================================================
//====Íîìåð áàðà ïî âðåìåíè â ÒÔ YR1.==============================================================================================================================================
int iBarShift_YR1 (string Exchange, datetime time, bool exact) // iBarShiftYR (âàëþòíàÿ ïàðà, çíà÷åíèå âðåìåíè äëÿ ïîèñêà, âîçâðàùàåìîå çíà÷åíèå åñëè áàð íå íàéäåí (FALSE - iBarShift âîçâðàùàåò áëèæàéøèé/TRUE - iBarShift âîçâðàùàåò -1);
{
bool Coincidence = false;
datetime iTimeMN1_0; // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeMN1_1; // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
int i;
int iBarsYR1 = 0; // Êîëè÷åñòâî áàðîâ â ÒÔ YR1.
int iBarsMN1; // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int FirstYear; // Ïåðâûé ãîä íà÷àëà èñòîðèè ïàðû.
int ShiftYR1 = 0; // Âîçâðàùàåìîå çíà÷åíèå.
//----
iBarsMN1 = iBars (Exchange, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
FirstYear = StrToInteger (StringSubstr (TimeToStr (iTime (Exchange, PERIOD_MN1, iBarsMN1 - 1), TIME_DATE), 0, 4)); // Ïåðâûé ãîä íà÷àëà èñòîðèè ïàðû.
if (TimeYear (time) < FirstYear || Year() < TimeYear (time)) // Äëÿ ýêîíîìèè âðåìåíè íà öèêëàõ, ïðè âûáðàííîì âðåìåíè ñî çíà÷åíèåì ìåíüøåì âðåìåíè íà÷àëà èñòîðèè èëè áîëüøåì òåêóùåãî ãîäà.
{
if (exact == false) // Åñëè ïåðåêëþ÷àòåëü çàïðåùàåò, òî âîçâðàùàåì íîìåð áëèæàéøåãî áàðà (íîìåð ïåðâîãî áàðà â èñòîðèè).
{
if (TimeYear (time) < FirstYear) ShiftYR1 = Year() - FirstYear; // Åñëè âõîäíîå âðåìÿ ìåíüøå, ÷åì âðåìÿ íà÷àëî èñòîðèè, òî âîçâðàùàåìì íîìåð áàðà íà÷àëà èñòîðèè.
if (TimeYear (time) > Year()) ShiftYR1 = 0; // Åñëè âõîäíîå âðåìÿ áîëüøå, ÷åì âðåìÿ êîíöà èñòîðèè, òî âîçâðàùàåìì íîìåð áàðà êîíöà èñòîðèè.
}
else ShiftYR1 = -1; // Åñëè ïåðåêëþ÷àòåëü ðàçðåøàåò, òî âîçâðàùàåì -1 â ñëó÷àå îòñóòñòâèÿ áàðà.
}
else // Åñëè âõîäíîå âðåìÿ áîëüøå èëè ðàâíî âðåìåíè íà÷àëà èñòîðèè, òî ïðîâåðÿåì âõîäíîå âðåìÿ íà ñîâïàäåíèå ñ ìåñÿ÷íîé èñòîðèåé.
{
if (exact == true) // Åñëè ïåðåêëþ÷àòåëü ðàçðåøàåò, òî âîçâðàùàåì -1 â ñëó÷àå îòñóòñòâèÿ áàðà.
{
for (i = 0; i < iBarsMN1; i++)
{
if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) ShiftYR1++;
if (TimeYear (time) == TimeYear (iTime (Exchange, PERIOD_MN1, i))) // Âûõîäèì èç öèêëà ïî óñëîâèþ ðàâåíñòâà âõîäíîãî ïàðàìåòðà íàéäåíîìó â öèêëå.
{
Coincidence = true;
break;
}
}
if (Coincidence == false) ShiftYR1 = -1; // Åñëè ñîâïàäåíèÿ â öèêëå íå ïðîèçîøëî, âîçâðàùàåì -1.
}
else // Åñëè ïåðåêëþ÷àòåëü çàïðåùàåò, òî âîçâðàùàåì áëèæàéøèé ïî õîäó öèêëà (ïðåäûäóùèé) áàð.
{
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
ShiftYR1 = -1;
for (i = 0; i < iBarsMN1; i++)
{
iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, i);
iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, i + 1);
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0)
{
ShiftYR1++;
if (ShiftYR1 == 0) // Ñïåöèàëüíûå óñëîâèÿ äëÿ ïåðâîãî áàðà â èñòîðèè.
{
if (TimeYear (time) == TimeYear (iTimeMN1_0)) break; // Âûõîäèì èç öèêëà ïî óñëîâèþ ðàâåíñòâà âõîäíîãî ïàðàìåòðà íàéäåíîìó â öèêëå.
else
{
if (TimeYear (iTimeMN1_1) < TimeYear (time)) // Íå ïðîâåðÿåì íà ïîñëåäóùèé áàð.
{
ShiftYR1++; // Âîçâðàùàåì ïðåäûäóùèé áàð, ñîîòâåòñòâóþùèé ìëàäøåìó ãîäó.
break;
}
}
}
if (0 < ShiftYR1 && ShiftYR1 < iBarsYR1) // Ïðèìåíÿåì îáû÷íûå óñëîâèÿ "âîðîòà" äëÿ íå ïåðâîãî è íå ïîñëåäíåãî ãîäà â èñòîðèè.
{
if (TimeYear (time) == TimeYear (iTimeMN1_0)) break; // Âûõîäèì èç öèêëà ïî óñëîâèþ ðàâåíñòâà âõîäíîãî ïàðàìåòðà íàéäåíîìó â öèêëå.
else // Åñëè èñêîìûé ãîä íå ðàâåí íàéäåíîìó, òî ïðîâåðÿåì íà îòñóòñòâèå áàðà.
{
if (TimeYear (iTimeMN1_1) < TimeYear (time) && TimeYear (time) < TimeYear (iTimeMN1_0))
{
ShiftYR1++; // Âîçâðàùàåì ïðåäûäóùèé áàð, ñîîòâåòñòâóþùèé ìëàäøåìó ãîäó.
break;
}
}
}
if (ShiftYR1 == iBarsYR1) break; // Åñëè áàð ïîñëåäíèé, òî âîçâðàùàåì òåêóùèé áàð, ñîîòâåòñòâóþùèé ìëàäøåìó ãîäó.
}
}
}
}
return (ShiftYR1);
}
//=================================================================================================================================================================================
//====Âðåìÿ îòêðûòèÿ ïî íîìåðó áàðà â ÒÔ YR1.======================================================================================================================================
datetime iTime_YR1 (string Exchange, int shift) // iCloseYR (âàëþòíàÿ ïàðà, íîìåð áàðà);
{
datetime TimeYR; // Âîçâðàùàåìîå çíà÷åíèå.
int i;
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int ShiftYR1 = -1; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (Exchange, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift > iBarsYR1 - 1) TimeYR = 0; // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
for (i = 0; i < iBarsMN1; i++)
{
datetime iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ.
{
ShiftYR1++;
if (shift == ShiftYR1)
{
TimeYR = iTimeMN1_0;
break;
}
}
}
}
return (TimeYR);
}
//=================================================================================================================================================================================
//====Öåíà îòêðûòèÿ.===============================================================================================================================================================
double iOpen_YR1 (string Exchange, int shift) // iOpenYR (âàëþòíàÿ ïàðà, íîìåð áàðà);
{
double OpenYR; // Âîçâðàùàåìîå çíà÷åíèå.
int i;
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int ShiftYR1 = -1; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (Exchange, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift > iBarsYR1 - 1) OpenYR = 0; // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
for (i = 0; i < iBarsMN1; i++)
{
datetime iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ.
{
ShiftYR1++;
if (shift == ShiftYR1) OpenYR = iOpen (Exchange, PERIOD_MN1, i);
}
}
}
return (OpenYR);
}
//=================================================================================================================================================================================
//====Ìàêñèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1.==================================================================================================================================
double iHigh_YR1 (string Exchange, int shift) // iHighYR (âàëþòíàÿ ïàðà, íîìåð áàðà);
{
bool Break = false;
datetime iTimeMN1_0;
datetime iTimeMN1_1;
double ArrayHighMN1[12]; // Òåõíè÷åñêèé ìàññèâ.
double HighYR; // Âîçâðàùàåìîå çíà÷åíèå.
int count = -1; // Êîëè÷åñòâî ýëåìåíòîâ äëÿ ïîèñêà.
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int i, j;
int ShiftYR1 = 0; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (Exchange, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift > iBarsYR1 - 1) HighYR = 0; // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
if (shift == 0) // Åñëè áàð íóëåâîé, òî ñ÷èòàåì óïîðîù¸ííûì ñïîñîáîì.
{
for (j = 0; j < 12; j++)
{
count++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
ArrayHighMN1[count] = iHigh (Exchange, PERIOD_MN1, j);
iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) break;// Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê.
}
}
if (0 < shift || shift < iBarsMN1 - 1)
{
for (i = 0; i < iBarsMN1; i++)
{
iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê.
{
ShiftYR1++;
if (shift == ShiftYR1)
{
for (j = i + 1; j < i + 13; j++)
{
count++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
ArrayHighMN1[count] = iHigh (Exchange, PERIOD_MN1, j);
iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê.
{
Break = true;
break;
}
}
if (Break == true) break;
}
}
}
}
HighYR = ArrayHighMN1[ArrayMaximum (ArrayHighMN1, count + 1, 0)]; // Èùèì ìàêñèìàëüíîå çíà÷åíèå
}
// Comment ("ArrayHighMN1[", count + 1, "] = {", ArrayHighMN1[0], ", ", ArrayHighMN1[1], ", ", ArrayHighMN1[2], ", ", ArrayHighMN1[3], ", ", ArrayHighMN1[4], ", ", ArrayHighMN1[5], ", ", ArrayHighMN1[6], ", ", ArrayHighMN1[7], ", ", ArrayHighMN1[8], ", ", ArrayHighMN1[9], ", ", ArrayHighMN1[10], ", ", ArrayHighMN1[11], "};");
return (HighYR);
}
//=================================================================================================================================================================================
//====Ìèíèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1.===================================================================================================================================
double iLow_YR1 (string Exchange, int shift) // iLowYR (âàëþòíàÿ ïàðà, íîìåð áàðà);
{
bool Break = false;
datetime iTimeMN1_0;
datetime iTimeMN1_1;
double ArrayLowMN1[12]; // Òåõíè÷åñêèé ìàññèâ.
double LowYR; // Âîçâðàùàåìîå çíà÷åíèå.
int count = -1; // Êîëè÷åñòâî ýëåìåíòîâ äëÿ ïîèñêà.
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int i, j;
int ShiftYR1 = 0; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (Exchange, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift > iBarsYR1 - 1) LowYR = 0; // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
if (shift == 0) // Åñëè áàð íóëåâîé, òî ñ÷èòàåì óïîðîù¸ííûì ñïîñîáîì.
{
for (j = 0; j < 12; j++)
{
count++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
ArrayLowMN1[count] = iLow (Exchange, PERIOD_MN1, j);
iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) break;// Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê.
}
}
if (0 < shift || shift < iBarsMN1 - 1)
{
for (i = 0; i < iBarsMN1; i++)
{
iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê.
{
ShiftYR1++;
if (shift == ShiftYR1)
{
for (j = i + 1; j < i + 13; j++)
{
count++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
ArrayLowMN1[count] = iLow (Exchange, PERIOD_MN1, j);
iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê.
{
Break = true;
break;
}
}
if (Break == true) break;
}
}
}
}
LowYR = ArrayLowMN1[ArrayMinimum (ArrayLowMN1, count + 1, 0)]; // Èùèì ìàêñèìàëüíîå çíà÷åíèå
}
// Comment ("ArrayLowMN1[", count + 1, "] = {", ArrayLowMN1[0], ", ", ArrayLowMN1[1], ", ", ArrayLowMN1[2], ", ", ArrayLowMN1[3], ", ", ArrayLowMN1[4], ", ", ArrayLowMN1[5], ", ", ArrayLowMN1[6], ", ", ArrayLowMN1[7], ", ", ArrayLowMN1[8], ", ", ArrayLowMN1[9], ", ", ArrayLowMN1[10], ", ", ArrayLowMN1[11], "};");
return (LowYR);
}
//=================================================================================================================================================================================
//====Öåíà çàêðûòèÿ.===============================================================================================================================================================
double iClose_YR1 (string Exchange, int shift) // iCloseYR (âàëþòíàÿ ïàðà, íîìåð áàðà);
{
double CloseYR; // Âîçâðàùàåìîå çíà÷åíèå.
int i;
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int ShiftYR1 = 0; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (Exchange, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (Exchange, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (Exchange, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift > iBarsYR1 - 1) CloseYR = 0; // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
if (shift == 0) CloseYR = iClose (Exchange, PERIOD_MN1, 0); // Åñëè áàð íóëåâîé, òî öåíà çàêðûòèÿ ãîäîâîãî áàðà ðàâíà öåíå çàêðûòèÿ ìåñÿ÷íîãî áàðà.
else // Åñëè áàð íå íóëåâîé, èùåì â öèêëå íåñîâïàäåíèÿ ãîäà âðåìåíè îòêðûòèÿ ñîñåäíèõ áàðîâ.
{
for (i = 0; i < iBarsMN1; i++)
{
datetime iTimeMN1_0 = iTime (Exchange, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeMN1_1 = iTime (Exchange, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ.
{
ShiftYR1++;
if (shift == ShiftYR1) CloseYR = iClose (Exchange, PERIOD_MN1, i + 1);
}
}
}
}
return (CloseYR);
}
//=================================================================================================================================================================================
//æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//+------------------------------------------------------------------+
//| ZZ_Check TF YR1.mq4 |
//| Copyright © Zhunko |
//|01.07.2007 ÌF ZHUNKO zhunko@mail.ru|
//+------------------------------------------------------------------+
//|ÈÍÄÈÊÀÒÎÐ ÄËß ÊÎÍÒÐÎËß ÔÓÍÊÖÈÉ ÄËß ÒÔ YR1 èç áèáëèîòåêè |
//|"ZZ_Standard_Functions_TF_YR1_Lib.ex4" |
//+------------------------------------------------------------------+
/*#property copyright "Copyright © 2006 Zhunko"
#property link "zhunko@mail.ru"
//----
#property indicator_chart_window
#import "ZZ_Standard_Functions_TF_YR1_Lib.ex4"
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1.
int iBars_YR1 (string Exchange); // iBars_YR (âàëþòíàÿ ïàðà);
// Íîìåð áàðà ïî âðåìåíè â ÒÔ YR1.
int iBarShift_YR1 (string Exchange, datetime time, bool exact); // iBarShift_YR (âàëþòíàÿ ïàðà, çíà÷åíèå âðåìåíè äëÿ ïîèñêà, âîçâðàùàåìîå çíà÷åíèå åñëè áàð íå íàéäåí (FALSE - iBarShift âîçâðàùàåò áëèæàéøèé/TRUE - iBarShift âîçâðàùàåò -1));|
// Âðåìÿ îòêðûòèÿ ïî íîìåðó áàðà â ÒÔ YR1.
datetime iTime_YR1 (string Exchange, int shift); // iTime_YR (âàëþòíàÿ ïàðà, íîìåð áàðà);
// Öåíà îòêðûòèÿ.
double iOpen_YR1 (string Exchange, int shift); // iOpen_YR (âàëþòíàÿ ïàðà, íîìåð áàðà);
// Ìàêñèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1.
double iHigh_YR1 (string Exchange, int shift); // iHigh_YR (âàëþòíàÿ ïàðà, íîìåð áàðà);
// Ìèíèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1.
double iLow_YR1 (string Exchange, int shift); // iLow_YR (âàëþòíàÿ ïàðà, íîìåð áàðà);
// Öåíà çàêðûòèÿ.
double iClose_YR1 (string Exchange, int shift); // iClose_YR (âàëþòíàÿ ïàðà, íîìåð áàðà);
#import
//====
extern int Number_Bar = 40;
extern string TimeYR1 = "2006.01.01 00:00";
extern bool Exact = false;
//====
string ArrayTimfram_str[9] = {"M1", "M5", "M15", "M30", "H1", "H4", "D1", "W1", "MN1"};
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int iBarsYR1 = iBars_YR1 (Symbol());
int iBarShiftYR1 = iBarShift_YR1 (Symbol(), StrToTime (TimeYR1), Exact);
datetime iTimeYR = iTime_YR1 (Symbol(), Number_Bar);
double iOpenYR1 = iOpen_YR1 (Symbol(), Number_Bar);
double iHighYR1 = iHigh_YR1 (Symbol(), Number_Bar);
double iLowYR1 = iLow_YR1 (Symbol(), Number_Bar);
double iCloseYR1 = iClose_YR1 (Symbol(), Number_Bar);
string TF;
//----
if (Period() == 1) TF = ArrayTimfram_str[0];
if (Period() == 5) TF = ArrayTimfram_str[1];
if (Period() == 15) TF = ArrayTimfram_str[2];
if (Period() == 30) TF = ArrayTimfram_str[3];
if (Period() == 60) TF = ArrayTimfram_str[4];
if (Period() == 240) TF = ArrayTimfram_str[5];
if (Period() == 1440) TF = ArrayTimfram_str[6];
if (Period() == 10080) TF = ArrayTimfram_str[7];
if (Period() == 43200) TF = ArrayTimfram_str[8];
Comment ("Èíñòðóìåíò ", Symbol(), " ", TF,
"\nÊîëè÷åñòâî áàðîâ = ", iBarsYR1,
"\nÍîìåð áàðà ïî âðåìåíè = ", iBarShiftYR1, " (", TimeYR1, ")",
"\nÂðåìÿ îòêðûòèÿ ïî íîìåðó áàðà = ", TimeToStr (iTimeYR, TIME_DATE|TIME_MINUTES), " (", Number_Bar, ")",
"\nÖåíà îòêðûòèÿ = ", iOpenYR1, "(", Number_Bar, ")",
"\nÌàêñèìàëüíàÿ öåíà = ", iHighYR1, "(", Number_Bar, ")",
"\nÌèíèìàëüíàÿ öåíà = ", iLowYR1, "(", Number_Bar, ")",
"\nÖåíà çàêðûòèÿ = ", iCloseYR1, "(", Number_Bar, ")");
// iHighYR1 = iHigh_YR1 (Symbol(), Number_Bar);
// iLow_YR1 (Symbol(), Number_Bar);
return(0);
}*/
//===================================================================================================================
Comments