ZH_StandardFunctionsTfYR1.lib
Download scriptThis script is designed as a specialized library for MetaTrader 4, specifically built to handle data calculations based on an annual (yearly) timeframe. While most standard trading tools look at minutes, hours, or days, this code allows a user to treat each year of market history as a single "bar" (a unified block of data).
Here is a breakdown of the logic in non-technical terms:
Core Concept: Yearly Data Mapping
The script works by analyzing "Monthly" data and grouping it into years. It essentially creates a virtual "Yearly Chart." This allows a trader to look back at historical years as individual units rather than scrolling through thousands of individual months or days.
Key Features and Logic:
1. Counting Yearly Bars The script can calculate how many total years of history are available for a specific financial instrument (like EURUSD or Gold). It does this by scanning the monthly history and identifying every time the calendar year changes, counting each new year as one "bar."
2. Finding Specific Dates in History You can provide the script with a specific date, and it will determine exactly which yearly "bar" that date belongs to.
- If you need an exact match and the date isn't found (e.g., it's outside the history range), the script can return an error code.
- If you don't require an exact match, it is smart enough to find the "nearest" year, helping you navigate historical data more fluidly.
3. Retrieving Yearly Price Information Once a specific year (or "bar") is identified, the script can extract the following critical price points for that entire year:
- Opening Price: The price at which the first month of that year began.
- Closing Price: The price at which the final month of that year ended.
- Highest Price: The absolute highest price reached at any point during that entire calendar year.
- Lowest Price: The absolute lowest price reached at any point during that entire calendar year.
How it handles "Highs" and "Lows"
To ensure accuracy when looking for the Yearly High or Low, the script performs a deeper scan. Instead of just looking at one month, it gathers data from up to 12 months of monthly bars to confirm the true peak or valley for that year. If the current year is still in progress, it calculates the high/low based on the data available so far.
Summary for the User
This script acts as a "translation layer." It allows you to ask complex questions about yearly performance—such as "What was the highest price reached in 2015?" or "How many years of data do I have?"—and get instant, accurate answers by automatically organizing monthly history into yearly blocks.
//+-------------------------------------------------------------------------------------------------------------------+
//| ZH_StandardFunctionsTfYR1.lib.mq4|
//| Copyright © Zhunko |
//|01.07.2007 ÌF ZHUNKO vadim@zhunko.ru |
//+-------------------------------------------------------------------------------------------------------------------+
//| Íàáîð ôóíêöèé äëÿ ÒÔ YR1. |
//+-------------------------------------------------------------------------------------------------------------------+
//|1.Êîëè÷åñòâî áàðîâ â ÒÔ YR1. |
//| int iBars_YR1 (string symbol); // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//+-------------------------------------------------------------------------------------------------------------------+
//|2.Íîìåð áàðà ïî âðåìåíè â ÒÔ YR1. |
//| int iBarShift_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| datetime time, // Çíà÷åíèå âðåìåíè äëÿ ïîèñêà. |
//| bool exact) // Âîçâðàùàåìîå çíà÷åíèå åñëè áàð íå íàéäåí |
//| // (FALSE - iBarShift âîçâðàùàåò áëèæàéøèé/TRUE - iBarShift âîçâðàùàåò -1). |
//+-------------------------------------------------------------------------------------------------------------------+
//|3.Âðåìÿ îòêðûòèÿ ïî íîìåðó áàðà â ÒÔ YR1. |
//| datetime iTime_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------+
//|4.Öåíà îòêðûòèÿ âûáðàííîãî áàðà â ÒÔ YR1. |
//| double iOpen_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------+
//|5.Ìàêñèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1. |
//| double iHigh_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------+
//|6.Ìèíèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1. |
//| double iLow_YR1 (string symbol, // Ââàëþòíàÿ ïàðà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------+
//|7.Öåíà çàêðûòèÿ âûáðàííîãî áàðà â ÒÔ YR1. |
//| double iClose_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------+
#property copyright "Copyright © 2006 Zhunko"
#property link "vadim@zhunko.ru"
#property library
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//ææææ Ñòàíäàðäíûå áèáëèîòå÷íûå ôóíêöèè äëÿ ÒÔ YR1. ææææ
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 1. Êîëè÷åñòâî áàðîâ â ÒÔ YR1.
int iBars_YR1 (string symbol) // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
{
int i;
int iBarsMN1; // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsYR1 = 0; // Êîëè÷åñòâî áàðîâ â ÒÔ YR1.
//----
iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
return (iBarsYR1);
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 2. Íîìåð áàðà ïî âðåìåíè â ÒÔ YR1.
int iBarShift_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
datetime time, // Çíà÷åíèå âðåìåíè äëÿ ïîèñêà.
bool exact) // Âîçâðàùàåìîå çíà÷åíèå åñëè áàð íå íàéäåí (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 (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
FirstYear = StrToInteger (StringSubstr (TimeToStr (iTime (symbol, PERIOD_MN1, iBarsMN1 - 1), TIME_DATE), 0, 4)); // Ïåðâûé ãîä íà÷àëà èñòîðèè ïàðû.
if (TimeYear (time) < FirstYear || Year() < TimeYear (time)) // Äëÿ ýêîíîìèè âðåìåíè íà öèêëàõ, ïðè âûáðàííîì âðåìåíè ñî çíà÷åíèåì ìåíüøåì âðåìåíè íà÷àëà èñòîðèè èëè áîëüøåì òåêóùåãî ãîäà.
{
if (exact == false) // Åñëè ïåðåêëþ÷àòåëü çàïðåùàåò, òî âîçâðàùàåì íîìåð áëèæàéøåãî áàðà (íîìåð ïåðâîãî áàðà â èñòîðèè).
{// Åñëè âõîäíîå âðåìÿ ìåíüøå, ÷åì âðåìÿ íà÷àëî èñòîðèè, òî âîçâðàùàåìì íîìåð áàðà íà÷àëà èñòîðèè.
if (TimeYear (time) < FirstYear) return (Year() - FirstYear);
if (TimeYear (time) > Year()) return (0); // Åñëè âõîäíîå âðåìÿ áîëüøå, ÷åì âðåìÿ êîíöà èñòîðèè, òî âîçâðàùàåìì íîìåð áàðà êîíöà èñòîðèè.
}
else return (-1); // Åñëè ïåðåêëþ÷àòåëü ðàçðåøàåò, òî âîçâðàùàåì -1 â ñëó÷àå îòñóòñòâèÿ áàðà.
}
else // Åñëè âõîäíîå âðåìÿ áîëüøå èëè ðàâíî âðåìåíè íà÷àëà èñòîðèè, òî ïðîâåðÿåì âõîäíîå âðåìÿ íà ñîâïàäåíèå ñ ìåñÿ÷íîé èñòîðèåé.
{
if (exact == true) // Åñëè ïåðåêëþ÷àòåëü ðàçðåøàåò, òî âîçâðàùàåì -1 â ñëó÷àå îòñóòñòâèÿ áàðà.
{
for (i = 0, ShiftYR1 = 0; i < iBarsMN1; i++)
{// Åñëè ïðîèçîøëà ñìåíà ãîäà, ïðèáàâëÿåì áàð.
if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) ShiftYR1++;
// Âûõîäèì èç öèêëà ïî óñëîâèþ ðàâåíñòâà âõîäíîãî ïàðàìåòðà íàéäåíîìó â öèêëå.
if (TimeYear (time) == TimeYear (iTime (symbol, PERIOD_MN1, i)))
{
Coincidence = true;
break;
}
}
if (Coincidence == false) return (-1); // Åñëè ñîâïàäåíèÿ â öèêëå íå ïðîèçîøëî, âîçâðàùàåì -1.
}
else // Åñëè ïåðåêëþ÷àòåëü çàïðåùàåò, òî âîçâðàùàåì áëèæàéøèé ïî õîäó öèêëà (ïðåäûäóùèé) áàð.
{// Ñ÷èòàåì êîëè÷åñòâî áàðîâ â ÒÔ YR1.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
for (i = 0, ShiftYR1 = -1; i < iBarsMN1; i++)
{
iTimeMN1_0 = iTime (symbol, PERIOD_MN1, i);
iTimeMN1_1 = iTime (symbol, 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)) return (ShiftYR1);
else
{
if (TimeYear (iTimeMN1_1) < TimeYear (time)) // Íå ïðîâåðÿåì íà ïîñëåäóùèé áàð.
{
ShiftYR1++; // Âîçâðàùàåì ïðåäûäóùèé áàð, ñîîòâåòñòâóþùèé ìëàäøåìó ãîäó.
return (ShiftYR1);
}
}
}
if (0 < ShiftYR1 && ShiftYR1 < iBarsYR1) // Ïðèìåíÿåì îáû÷íûå óñëîâèÿ "âîðîòà" äëÿ íå ïåðâîãî è íå ïîñëåäíåãî ãîäà â èñòîðèè.
{// Âûõîäèì èç öèêëà ïî óñëîâèþ ðàâåíñòâà âõîäíîãî ïàðàìåòðà íàéäåíîìó â öèêëå.
if (TimeYear (time) == TimeYear (iTimeMN1_0)) return (ShiftYR1);
else // Åñëè èñêîìûé ãîä íå ðàâåí íàéäåíîìó, òî ïðîâåðÿåì íà îòñóòñòâèå áàðà.
{
if (TimeYear (iTimeMN1_1) < TimeYear (time) && TimeYear (time) < TimeYear (iTimeMN1_0))
{
ShiftYR1++; // Âîçâðàùàåì ïðåäûäóùèé áàð, ñîîòâåòñòâóþùèé ìëàäøåìó ãîäó.
return (ShiftYR1);
}
}
}
if (ShiftYR1 == iBarsYR1) return (ShiftYR1); // Åñëè áàð ïîñëåäíèé, òî âîçâðàùàåì òåêóùèé áàð, ñîîòâåòñòâóþùèé ìëàäøåìó ãîäó.
}
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 3. Âðåìÿ îòêðûòèÿ ïî íîìåðó áàðà â ÒÔ YR1.
datetime iTime_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà
int shift) // Íîìåð áàðà.
{
int i;
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int ShiftYR1 = -1; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift >= iBarsYR1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
for (i = 0; i < iBarsMN1; i++)
{
datetime iTimeMN1_0 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeMN1_1 = iTime (symbol, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ.
{
ShiftYR1++;
if (shift == ShiftYR1) return (iTimeMN1_0);
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 4. Öåíà îòêðûòèÿ âûáðàííîãî áàðà â ÒÔ YR1.
double iOpen_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
int shift) // Íîìåð áàðà.
{
int i;
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int ShiftYR1 = -1; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift >= iBarsYR1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
for (i = 0; i < iBarsMN1; i++)
{
datetime iTimeMN1_0 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeMN1_1 = iTime (symbol, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ.
{
ShiftYR1++;
if (shift == ShiftYR1) return (iOpen (symbol, PERIOD_MN1, i)); // Âîçâðàùàåì öåíó îòêðûòèÿ íàéäåííîãî ãîäîâîãî áàðà.
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 5. Ìàêñèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1.
double iHigh_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
int shift) // Íîìåð áàðà.
{
datetime iTimeMN1_0;
datetime iTimeMN1_1;
double ArrayHighMN1[12]; // Òåõíè÷åñêèé ìàññèâ.
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int i, j, k;
int ShiftYR1 = 0; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift > iBarsYR1 - 1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
if (shift == 0) // Åñëè áàð íóëåâîé, òî ñ÷èòàåì óïîðîù¸ííûì ñïîñîáîì.
{
for (j = 0, k = 0; j < 12; j++)
{
ArrayHighMN1[k] = iHigh (symbol, PERIOD_MN1, j); // Çàíîñèì â ììàññèâ ìàêñèìóì.
iTimeMN1_0 = iTime (symbol, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (symbol, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
k++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
// Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê. Âîçâðàùàåì ìàêñèìóì.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) return (ArrayHighMN1[ArrayMaximum (ArrayHighMN1, k, 0)]);
}
}
if (0 < shift || shift < iBarsYR1)
{
for (i = 0; i < iBarsMN1; i++)
{
iTimeMN1_0 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (symbol, 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, k = 0; j < i + 13; j++)
{
ArrayHighMN1[k] = iHigh (symbol, PERIOD_MN1, j); // Çàíîñèì â ììàññèâ ìàêñèìóì.
iTimeMN1_0 = iTime (symbol, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (symbol, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
k++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
// Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê. Âîçâðàùàåì ìàêñèìóì.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) return (ArrayHighMN1[ArrayMaximum (ArrayHighMN1, k, 0)]);
}
}
}
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 6. Ìèíèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ YR1.
double iLow_YR1 (string symbol, // Ââàëþòíàÿ ïàðà.
int shift) // Íîìåð áàðà.
{
datetime iTimeMN1_0;
datetime iTimeMN1_1;
double ArrayLowMN1[12]; // Òåõíè÷åñêèé ìàññèâ.
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int i, j, k;
int ShiftYR1 = 0; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (0 > shift || shift > iBarsYR1 - 1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
if (shift == 0) // Åñëè áàð íóëåâîé, òî ñ÷èòàåì óïîðîù¸ííûì ñïîñîáîì.
{
for (j = 0, k = 0; j < 12; j++)
{
ArrayLowMN1[k] = iLow (symbol, PERIOD_MN1, j);
iTimeMN1_0 = iTime (symbol, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (symbol, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
k++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
// Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê. Âîçâðàùàåì ìèíèìóì.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) return (ArrayLowMN1[ArrayMinimum (ArrayLowMN1, k, 0)]);
}
}
if (0 < shift || shift < iBarsYR1)
{
for (i = 0; i < iBarsMN1; i++)
{
iTimeMN1_0 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (symbol, 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, k = 0; j < i + 13; j++)
{
ArrayLowMN1[k] = iLow (symbol, PERIOD_MN1, j);
iTimeMN1_0 = iTime (symbol, PERIOD_MN1, j); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
iTimeMN1_1 = iTime (symbol, PERIOD_MN1, j + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
k++; // Ñ÷¸ò÷èê çíà÷èìûõ áàðîâ.
// Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ. Îñòàíàâëèâàåì ïîèñê. Âîçâðàùàåì ìèíèìóì.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) return (ArrayLowMN1[ArrayMinimum (ArrayLowMN1, k, 0)]);
}
}
}
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 7. Öåíà çàêðûòèÿ âûáðàííîãî áàðà â ÒÔ YR1.
double iClose_YR1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
int shift) // Íîìåð áàðà.
{
int i;
int iBarsYR1; // Êîëè÷åñòâî áàðîâ â ãîäîâîì ÒÔ.
int ShiftYR1 = 0; // Òåêóùèé íîìåð áàðà ÒÔ YR1.
//----
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
// Êîëè÷åñòâî áàðîâ â ÒÔ YR1 òåêóùåãî èíñòðóìåíòà.
for (i = 0; i < iBarsMN1; i++) if (MathMod (TimeYear (1.0 * iTime (symbol, PERIOD_MN1, i)), 1.0 * TimeYear (iTime (symbol, PERIOD_MN1, i + 1))) != 0) iBarsYR1++;
if (shift < 0 || shift >= iBarsYR1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else
{
if (shift == 0) return (iClose (symbol, PERIOD_MN1, 0)); // Åñëè áàð íóëåâîé, òî öåíà çàêðûòèÿ ãîäîâîãî áàðà ðàâíà öåíå çàêðûòèÿ ìåñÿ÷íîãî áàðà.
else // Åñëè áàð íå íóëåâîé, èùåì â öèêëå íåñîâïàäåíèÿ ãîäà âðåìåíè îòêðûòèÿ ñîñåäíèõ áàðîâ.
{
for (i = 0; i < iBarsMN1; i++)
{
datetime iTimeMN1_0 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeMN1_1 = iTime (symbol, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà MN1.
if (MathMod (TimeYear (1.0 * iTimeMN1_0), 1.0 * TimeYear (iTimeMN1_1)) != 0) // Åñëè îñòàòîê íå ðàâåí íóëþ, òî áàðû íàõîäÿòñÿ â ðàçíûõ ãîäàõ.
{
ShiftYR1++;
if (shift == ShiftYR1) return (iClose (symbol, PERIOD_MN1, i + 1)); // Âîçâðàùàåì öåíó çàêðûòèÿ íàéäåííîãî ãîäîâîãî áàðà.
}
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
Comments