//+-------------------------------------------------------------------------------------------------------------------------------+
//| ZH_StandardFunctionsTfQ1.lib.mq4|
//| Copyright © Zhunko |
//|14.09.2009 - 12.10.2009 ÌF ZHUNKO vadim@zhunko.ru |
//+-------------------------------------------------------------------------------------------------------------------------------+
//| ÍÀÁÎÐ ÑÒÀÍÄÀÐÒÍÛÕ ÔÓÍÊÖÈÉ ÄËß ÒÔ Q1. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|1.Êîëè÷åñòâî áàðîâ â ÒÔ Q1. |
//| int iBars_Q1 (string symbol); // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|2.Íîìåð áàðà ïî âðåìåíè â ÒÔ Q1. |
//| int iBarShift_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| datetime time, // Çíà÷åíèå âðåìåíè äëÿ ïîèñêà. |
//| bool exact) // Âîçâðàùàåìîå çíà÷åíèå åñëè áàð íå íàéäåí |
//| // (FALSE - iBarShift âîçâðàùàåò áëèæàéøèé/TRUE - iBarShift âîçâðàùàåò -1). |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|3.Âðåìÿ îòêðûòèÿ ïî íîìåðó áàðà â ÒÔ Q1. |
//| datetime iTime_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|4.Öåíà îòêðûòèÿ âûáðàííîãî áàðà â ÒÔ Q1. |
//| double iOpen_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|5.Ìàêñèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ Q1. |
//| double iHigh_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|6.Ìèíèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ Q1. |
//| double iLow_Q1 (string symbol, // Ââàëþòíàÿ ïàðà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|7.Öåíà çàêðûòèÿ âûáðàííîãî áàðà â ÒÔ Q1. |
//| double iClose_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà. |
//| int shift) // Íîìåð áàðà. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|8. Âîçâðàùàåò òåêóùèé íîìåð êâàðòàëüíîãî áàðà â ãîäó. |
//| int Quarter() |
//+-------------------------------------------------------------------------------------------------------------------------------+
//|9. Âîçâðàùàåò íîìåð êâàðòàëà äëÿ óêàçàííîãî âðåìåíè. |
//| int TimeQuarter (datetime time) // Äàòà, ïðåäñòàâëåííàÿ â âèäå êîëè÷åñòâà ñåêóíä, ïðîøåäøèõ ïîñëå 00:00 1 ÿíâàðÿ 1970 ãîäà. |
//+-------------------------------------------------------------------------------------------------------------------------------+
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
#property copyright "Copyright © 2006 Zhunko"
#property link "vadim@zhunko.ru"
#property library
//----Ìàññèâû.-----------------------------------------------------------------------------------------------------------------------------
// Íå âèñîêîñíûé ãîä: ßíâàðü Ôåâðàëü Ìàðò Àïðåëü Ìàé Èþíü Èþëü Àâãóñò Ñåíòÿáðü Îêòÿáðü Íîÿáðü Äåêàáðü
int ArSecondsInMonth[2][12] = {2678400, 2419200, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000, 2678400,
// Âèñîêîñíûé ãîä: ßíâàðü Ôåâðàëü Ìàðò Àïðåëü Ìàé Èþíü Èþëü Àâãóñò Ñåíòÿáðü Îêòÿáðü Íîÿáðü Äåêàáðü
2678400, 2505600, 2678400, 2592000, 2678400, 2592000, 2678400, 2678400, 2592000, 2678400, 2592000, 2678400};
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 1. Êîëè÷åñòâî áàðîâ â ÒÔ Q1.
int iBars_Q1 (string symbol) // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
{
bool Switch_Q1 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
bool Switch_Q2 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
bool Switch_Q3 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
bool Switch_Q4 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
datetime iTimeMN1; // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
int i;
int iBarsMN1; // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsQ1; // Êîëè÷åñòâî áàðîâ â ÒÔ Q1.
//----
iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
for (i = 0, iBarsQ1 = 0; i < iBarsMN1; i++)
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
if (i > 0) // Íà ïåðâîé èòåðàöèè íå ïðîâåðÿì ñìåíó ãîäà.
{// Åñëè ñìåíèëñÿ ãîä, èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ âî âñåõ êâàðòàëàõ. Ìîæåò ïðèãîäèòüñÿ ïðè îòñóòñòâèè áàðîâ âíóòðè ãîäà è íåñêîëüêèõ ëåò ïîäðÿä (äûðû â èñòîðèè).
if (MathMod (TimeYear (iTimeMN1), TimeYear (iTime (symbol, PERIOD_MN1, i - 1))) != 0)
{
Switch_Q1 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
Switch_Q2 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
Switch_Q3 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
Switch_Q4 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
}
}
// Ïåðåêëþ÷àåì ïî íîìåðàì ìåñÿöåâ.
switch (TimeMonth (iTimeMN1))
{//----Ìåñÿöà 4-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 12:
case 11:
case 10:
{
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q4 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q4 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 3-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 9:
case 8:
case 7:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q3 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q3 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 2-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 6:
case 5:
case 4:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q2 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q2 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 1-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 3:
case 2:
case 1:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
if (Switch_Q1 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q1 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
}
}
return (iBarsQ1);
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 2. Íîìåð áàðà ïî âðåìåíè â ÒÔ Q1.
int iBarShift_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
datetime time, // Çíà÷åíèå âðåìåíè äëÿ ïîèñêà.
bool exact) // Âîçâðàùàåìîå çíà÷åíèå åñëè áàð íå íàéäåí (FALSE - iBarShift âîçâðàùàåò áëèæàéøèé/TRUE - iBarShift âîçâðàùàåò -1).
{
bool Switch_Q1 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
bool Switch_Q2 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
bool Switch_Q3 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
bool Switch_Q4 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
datetime TimeFirst_Q1; // Âðåìÿ çàêðûòèÿ ïåðâãî êâàðòàëüíîãî áàðà â èñòîðèè. Êâàðòàë íà÷àëà èñòîðèè ïàðû.
datetime TimeLast_Q1; // Âðåìÿ îòêðûòèÿ ïîñëåäíåãî êâàðòàëüíîãî áàðà â èñòîðèè.
datetime iTimeMN1; // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà MN1.
datetime iTimeQ1_0; // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà Q1.
datetime iTimeQ1_1; // Âðåìÿ îòêðûòèÿ ïðåäûäóùåãî áàðà íà Q1.
int AmountBar; // Êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â ïåðâîì èëè ïîñëåäíåì êâàðòàëüíûõ áàðàõ.
int i, j;
int ShiftQ1 = 0; // Âîçâðàùàåìîå çíà÷åíèå ñìåùåíèÿ áàðà â ÒÔ Q1.
int iBarsMN1; // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int LeapYear; // Âèñîêîñíîñòü ãîäà âûáðàííîãî âðåìåíè.
int NumberMonth; // Íîìåð ìåñÿöà.
//====Ïîäãîòîâêà äàííûõ.================================================================================================================================================================================================================
iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
//====Ðàñ÷¸ò âðåìåíè çàêðûòèÿ ïåðâîãî êâàðòàëüíîãî áàðà â èñòîðèè. Êâàðòàë íà÷àëà èñòîðèè ïàðû.==========================================================================================================================================
TimeFirst_Q1 = iTime (symbol, PERIOD_MN1, iBarsMN1 - 1); // Âðåìÿ îòêðûòèÿ ïåðâîãî â èñòîðèè ìåñÿ÷íîãî áàðà.
if (MathMod (TimeYear (TimeFirst_Q1), 4) == 0) LeapYear = true; // Åñëè ãîä âèñîêîñíûé.
else LeapYear = false; // Åñëè ãîä íå âèñîêîñíûé.
NumberMonth = TimeMonth (TimeFirst_Q1); // Íîìåð ìåñÿöà.
// Âû÷èñëÿåì êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â êâàðòàëüíîì áàðå.
AmountBar = MathMod (NumberMonth, 3); // Åñëè áàð ïîñëåäíèé â êâàðòàëå, òî êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ ðàâíî íóëþ.
if (AmountBar > 0) AmountBar = 3 - AmountBar; // Åñëè áàð íå ïîñëåäíèé â êâàðòàëå, ïðîäîëæàåì âû÷èñëÿòü.
// Ïðîèçâîäèì ïðèáàâëåíèå âðåìåíè.
for (i = NumberMonth; i <= (NumberMonth + AmountBar); i++) TimeFirst_Q1 += ArSecondsInMonth[LeapYear][i - 1];
//====Ðàñ÷¸ò âðåìåíè îòêðûòèÿ ïîñëåäíåãî êâàðòàëüíîãî áàðà â èñòîðèè.===================================================================================================================================================================
TimeLast_Q1 = iTime (symbol, PERIOD_MN1, 0); // Âðåìÿ îòêðûòèÿ ïîñëåäíåãî â èñòîðèè ìåñÿ÷íîãî áàðà.
if (MathMod (TimeYear (TimeLast_Q1), 4) == 0) LeapYear = true; // Åñëè ãîä âèñîêîñíûé.
else LeapYear = false; // Åñëè ãîä íå âèñîêîñíûé.
NumberMonth = TimeMonth (TimeLast_Q1); // Íîìåð ìåñÿöà.
// Âû÷èñëÿåì êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â êâàðòàëüíîì áàðå.
AmountBar = MathMod (NumberMonth, 3); // Íîìåð ìåñÿ÷íîãî áàðà â êâàðòàëå.
if (AmountBar == 0) AmountBar = 2; // Åñëè áàð ïîñëåäíèé â êâàðòàëå, òî êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ ðàâíî äâóì.
else AmountBar = AmountBar - 1; // Åñëè áàð íå ïîñëåäíèé â êâàðòàëå, ïðîäîëæàåì âû÷èñëþòü.
// Ïðîèçâîäèì âû÷èòàíèå âðåìåíè. Íà÷èíàåì ñ ïîñëåäíåãî ìåñÿöà.
for (i = (NumberMonth - AmountBar); i < NumberMonth; i++) TimeLast_Q1 -= ArSecondsInMonth[LeapYear][i - 1];
//----Äèàãíîñòèêà.---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Comment ("TimeFirst_Q1 = ", TimeToStr (TimeFirst_Q1, TIME_DATE|TIME_MINUTES|TIME_SECONDS), "\nLastQuarter = ", TimeToStr (TimeLast_Q1, TIME_DATE|TIME_MINUTES|TIME_SECONDS));
//======================================================================================================================================================================================================================================
if (time < TimeFirst_Q1 || time >= TimeLast_Q1) // Äëÿ ýêîíîìèè âðåìåíè íà öèêëàõ, ïðè âûáðàííîì âðåìåíè ñî çíà÷åíèåì ìåíüøåì âðåìåíè íà÷àëà èñòîðèè èëè áîëüøåì òåêóùåãî êâàðòàëà.
{
if (exact == true) return (-1); // Åñëè ïåðåêëþ÷àòåëü ðàçðåøàåò, òî âîçâðàùàåì -1 â ñëó÷àå îòñóòñòâèÿ áàðà.
else // Åñëè ïåðåêëþ÷àòåëü çàïðåùàåò, òî âîçâðàùàåì áëèæàéøèé ïî õîäó öèêëà (ïðåäûäóùèé) áàð.
{
if (time < TimeFirst_Q1) return (iBars_Q1 (symbol) - 1); // Åñëè çàäàííîå çíà÷åíèå âðåìåíè äëÿ ïîèñêà ìåíüøå âðåìåíè íà÷àëà èñòîðèè, ñ÷èòàåì êîëè÷åñòâî áàðîâ.
if (time > TimeLast_Q1) return (0); // Åñëè çàäàííîå çíà÷åíèå âðåìåíè äëÿ ïîèñêà áîëüøå âðåìåíè êîíöà èñòîðèè, âîçðàùàåì ïîñëåäíèé áàð.
}
}
else // Åñëè çàäàííîå çíà÷åíèå âðåìåíè ñîîòâåòñòâóåò ñóùåñòâóþùåé èñòîðèè.
{// Âðåìÿ çàêðûòèÿ íóëåâîãî áàðà ÒÔ Q1.
iTimeQ1_0 = iTime (symbol, PERIOD_MN1, 0); // Âðåìÿ îòêðûòèÿ ïåðâîãî â èñòîðèè ìåñÿ÷íîãî áàðà.
if (MathMod (TimeYear (TimeFirst_Q1), 4) == 0) LeapYear = true; // Åñëè ãîä âèñîêîñíûé.
else LeapYear = false; // Åñëè ãîä íå âèñîêîñíûé.
NumberMonth = TimeMonth (iTimeQ1_0); // Íîìåð ìåñÿöà.
AmountBar = 3 - MathMod (NumberMonth, 3); // Êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â ïåðâîì êâàðòàëüíîì áàðå.
// Âðåìÿ çàêðûòèÿ íóëåâîãî áàðà ÒÔ Q1. Ïðîèçâîäèì ïðèáàâëåíèå âðåìåíè.
for (i = NumberMonth; i <= (NumberMonth + AmountBar); i++) iTimeQ1_0 += ArSecondsInMonth[LeapYear][i - 1];
// Ðàñ÷¸ò ãîäà íà âèñîêîñíîñòü. Íà÷àëüíûå óñëîâèÿ.
if (MathMod (TimeYear (TimeLast_Q1), 4) == 0) LeapYear = true; // Åñëè ãîä âèñîêîñíûé.
else LeapYear = false; // Åñëè ãîä íå âèñîêîñíûé.
for (i = 0, ShiftQ1 = -1; i < iBarsMN1; i++) // Öèêë ïî ìåñÿ÷íûì áàðàì. Íà÷àëî ñ íóëåâîãî áàðà.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òåêóùåãî ìåñÿ÷íîãî áàðà.
// Âîçâðàùàåì íîìåð áëèæàéøåãî áàðà â ñëó÷àå îòñóòñòâèÿ áàðà. Åñëè çàäàííîå âðåìÿ áîëüøå âðåìåíè îòêðûòèÿ òåêóùåãî áàðà MN1.
if (i > 0) // Íà ïåðâîé èòåðàöèè íå ïðîâåðÿì ñìåíó ãîäà.
{// Åñëè ñìåíèëñÿ ãîä, èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ âî âñåõ êâàðòàëàõ. Ìîæåò ïðèãîäèòüñÿ ïðè îòñóòñòâèè áàðîâ âíóòðè ãîäà è íåñêîëüêèõ ëåò ïîäðÿä (äûðû â èñòîðèè).
if (MathMod (TimeYear (iTimeMN1), TimeYear (iTime (symbol, PERIOD_MN1, i - 1))) != 0)
{
Switch_Q1 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
Switch_Q2 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
Switch_Q3 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
Switch_Q4 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
// Ðàñ÷¸ò ãîäà íà âèñîêîñíîñòü.
if (MathMod (TimeYear (iTimeMN1), 4) == 0) LeapYear = true; // Åñëè ãîä âèñîêîñíûé.
else LeapYear = false; // Åñëè ãîä íå âèñîêîñíûé.
}
}
// Ïåðåêëþ÷àåì ïî íîìåðàì ìåñÿöåâ.
NumberMonth = TimeMonth (iTimeMN1); // Íîìåð ìåñÿöà.
switch (NumberMonth)
{//----Ìåñÿöà 4-ãî êâàðòàëà.--------------------------------------------------------------------------------------
case 12:
case 11:
case 10:
{
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q4 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q4 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 3-ãî êâàðòàëà.--------------------------------------------------------------------------------------
case 9:
case 8:
case 7:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q3 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q3 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 2-ãî êâàðòàëà.--------------------------------------------------------------------------------------
case 6:
case 5:
case 4:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q2 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q2 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 1-ãî êâàðòàëà.--------------------------------------------------------------------------------------
case 3:
case 2:
case 1:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
if (Switch_Q1 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q1 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
}
// Åñëè ïåðåêëþ÷àòåëü ðàçðåøàåò, òî ïðîèçâîäèì ïîèñê âðåìåíè â ïðåäïîëàãàåìîé "äûðå" èñòîðèè.
if (exact == true)
{// Ðàñ÷¸ò âðåìåíè çàêðûòèÿ òåêóùåãî êâàðòàëüíîãî áàðà.
iTimeQ1_1 = iTimeMN1; // Âðåìÿ îòêðûòèÿ ïîñëåäíåãî â êâàðòàëå ìåñÿ÷íîãî áàðà.
// Âû÷èñëÿåì êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â êâàðòàëüíîì áàðå.
AmountBar = MathMod (NumberMonth, 3); // Åñëè áàð ïîñëåäíèé â êâàðòàëå, òî êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ ðàâíî íóëþ.
if (AmountBar > 0) AmountBar = 3 - AmountBar; // Åñëè áàð íå ïîñëåäíèé â êâàðòàëå, ïðîäîëæàåì âû÷èñëþòü.
// Ïðîèçâîäèì ïðèáàâëåíèå âðåìåíè äëÿ ðàñ÷¸òà âðåìÿ çàêðûòèÿ òåêóùåãî áàðà íà Q1.
for (j = NumberMonth; j <= (NumberMonth + AmountBar); j++) iTimeQ1_1 += ArSecondsInMonth[LeapYear][j - 1];
// Ïðîâåðÿåì íà "äûðó" â èñòîðèè.
if (iTimeQ1_1 < time && time < iTimeQ1_0) return (-1); // Âîçâðàùàåì -1 â ñëó÷àå îòñóòñòâèÿ áàðà.
}
// Ðàñ÷¸ò âðåìåíè îòêðûòèÿ òåêóùåãî êâàðòàëüíîãî áàðà.
iTimeQ1_0 = iTimeMN1; // Âðåìÿ îòêðûòèÿ ïåðâîãî â èñòîðèè ìåñÿ÷íîãî áàðà.
// Âû÷èñëÿåì êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â êâàðòàëüíîì áàðå.
AmountBar = MathMod (NumberMonth, 3); // Íîìåð ìåñÿ÷íîãî áàðà â êâàðòàëå.
if (AmountBar == 0) AmountBar = 2; // Åñëè áàð ïîñëåäíèé â êâàðòàëå, òî êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ ðàâíî äâóì.
else AmountBar = AmountBar - 1; // Åñëè áàð íå ïîñëåäíèé â êâàðòàëå, ïðîäîëæàåì âû÷èñëþòü.
// Ïðîèçâîäèì âû÷èòàíèå âðåìåíè äëÿ ðàñ÷¸òà âðåìåíè îòêðûòèÿ òåêóùåãî áàðà íà Q1.
for (j = (NumberMonth - AmountBar); j < NumberMonth; j++) iTimeQ1_0 -= ArSecondsInMonth[LeapYear][j - 1];
if (time >= iTimeQ1_0) return (ShiftQ1); // Âîçâðàùàåì íîìåð òåêóùåãî áàðà íà Q1.
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 3. Âðåìÿ îòêðûòèÿ ïî íîìåðó áàðà â ÒÔ Q1.
datetime iTime_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà
int shift) // Íîìåð áàðà.
{
bool Switch_Q1 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
bool Switch_Q2 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
bool Switch_Q3 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
bool Switch_Q4 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
datetime iTimeMN1; // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
datetime iTimeQ1; // Âîçâðàùàåìîå çíà÷åíèå.
int AmountBar; // Êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â ïåðâîì èëè ïîñëåäíåì êâàðòàëüíûõ áàðàõ.
int i, j;
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsQ1 = iBars_Q1 (symbol); // Êîëè÷åñòâî áàðîâ â ÒÔ Q1.
int LeapYear; // Âèñîêîñíîñòü ãîäà.
int NumberMonth; // Íîìåð ìåñÿöà.
int ShiftQ1; // Òåêóùèé íîìåð áàðà ÒÔ Q1.
//----
if (0 > shift || shift >= iBarsQ1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else // Åñëè íîìåð áàðà íàõîäèòñÿ â ïðåäåëàõ èñòîðèè, èùåì åãî.
{// Ðàñ÷¸ò ãîäà íà âèñîêîñíîñòü. Çàäà¸ì íà÷àëüíîå çíà÷åíèå.
if (MathMod (TimeYear (MarketInfo (symbol, MODE_TIME)), 4) == 0) LeapYear = true; // Åñëè ãîä âèñîêîñíûé.
else LeapYear = false; // Åñëè ãîä íå âèñîêîñíûé.
for (i = 0, ShiftQ1 = -1; i < iBarsMN1; i++) // Öèêë ïî íîìåðàì ìåñÿ÷íûõ áàðîâ.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
if (i > 0) // Íà ïåðâîé èòåðàöèè íå ïðîâåðÿì ñìåíó ãîäà.
{// Åñëè ñìåíèëñÿ ãîä, èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ âî âñåõ êâàðòàëàõ. Ìîæåò ïðèãîäèòüñÿ ïðè îòñóòñòâèè áàðîâ âíóòðè ãîäà è íåñêîëüêèõ ëåò ïîäðÿä (äûðû â èñòîðèè).
if (MathMod (TimeYear (iTimeMN1), TimeYear (iTime (symbol, PERIOD_MN1, i - 1))) != 0)
{
Switch_Q1 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
Switch_Q2 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
Switch_Q3 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
Switch_Q4 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
// Ðàñ÷¸ò ãîäà íà âèñîêîñíîñòü.
if (MathMod (TimeYear (iTimeMN1), 4) == 0) LeapYear = true; // Åñëè ãîä âèñîêîñíûé.
else LeapYear = false; // Åñëè ãîä íå âèñîêîñíûé.
}
}
// Ïåðåêëþ÷àåì ïî íîìåðàì ìåñÿöåâ.
NumberMonth = TimeMonth (iTimeMN1); // Íîìåð ìåñÿöà.
switch (NumberMonth)
{//----Ìåñÿöà 4-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 12:
case 11:
case 10:
{
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q4 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q4 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 3-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 9:
case 8:
case 7:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q3 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q3 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 2-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 6:
case 5:
case 4:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q2 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q2 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 1-ãî êâàðòàëà.-----------------------------------------------------------------------------------------
case 3:
case 2:
case 1:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
if (Switch_Q1 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q1 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
}
// Åñëè íàøëè íóæíûé áàð.
if (shift == ShiftQ1)
{// Ðàñ÷¸ò âðåìåíè îòêðûòèÿ íàéäåííîãî êâàðòàëüíîãî áàðà.
iTimeQ1 = iTimeMN1; // Âðåìÿ îòêðûòèÿ ïîñëåäíåãî â êâàðòàëå ìåñÿ÷íîãî áàðà.
// Âû÷èñëÿåì êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ â êâàðòàëüíîì áàðå.
AmountBar = MathMod (NumberMonth, 3); // Íîìåð ìåñÿ÷íîãî áàðà â êâàðòàëå.
if (AmountBar == 0) AmountBar = 2; // Åñëè áàð ïîñëåäíèé â êâàðòàëå, òî êîëè÷åñòâî äîáàâëÿåìûõ áàðîâ ðàâíî äâóì.
else AmountBar = AmountBar - 1; // Åñëè áàð íå ïîñëåäíèé â êâàðòàëå, ïðîäîëæàåì âû÷èñëþòü.
// Ïðîèçâîäèì âû÷èòàíèå âðåìåíè.
for (j = (NumberMonth - AmountBar); j < NumberMonth; j++) iTimeQ1 -= ArSecondsInMonth[LeapYear][j - 1]; // Âðåìÿ îòêðûòèÿ òåêóùåãî áàðà íà Q1.
// Comment ("NumberMonth = ", NumberMonth, "\nShiftQ1 = ", ShiftQ1, "\niTimeQ1 = ", TimeToStr (iTimeQ1, TIME_DATE|TIME_MINUTES|TIME_SECONDS));
// Sleep (5000);
return (iTimeQ1); // Âîçâðàùàåì âðåìÿ îòêðûòèÿ êâàðòàëüíîãî áàðà.
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 4. Öåíà îòêðûòèÿ âûáðàííîãî áàðà â ÒÔ Q1.
double iOpen_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
int shift) // Íîìåð áàðà.
{
bool Switch_Q1 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
bool Switch_Q2 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
bool Switch_Q3 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
bool Switch_Q4 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
datetime iTimeMN1; // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
int i, j, k;
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsQ1 = iBars_Q1 (symbol); // Êîëè÷åñòâî áàðîâ â ÒÔ Q1.
int FirstMonth; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
int ShiftQ1; // Òåêóùèé íîìåð áàðà ÒÔ Q1.
//----
if (0 > shift || shift >= iBarsQ1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else // Åñëè íîìåð áàðà íàõîäèòñÿ â ïðåäåëàõ èñòîðèè, èùåì åãî.
{
for (i = 0, ShiftQ1 = -1; i < iBarsMN1; i++) // Öèêë ïî íîìåðàì ìåñÿ÷íûõ áàðîâ.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
if (i > 0) // Íà ïåðâîé èòåðàöèè íå ïðîâåðÿì ñìåíó ãîäà.
{// Åñëè ñìåíèëñÿ ãîä, èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ âî âñåõ êâàðòàëàõ. Ìîæåò ïðèãîäèòüñÿ ïðè îòñóòñòâèè áàðîâ âíóòðè ãîäà è íåñêîëüêèõ ëåò ïîäðÿä (äûðû â èñòîðèè).
if (MathMod (TimeYear (iTimeMN1), TimeYear (iTime (symbol, PERIOD_MN1, i - 1))) != 0)
{
Switch_Q1 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
Switch_Q2 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
Switch_Q3 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
Switch_Q4 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
}
}
// Ïåðåêëþ÷àåì ïî íîìåðàì ìåñÿöåâ.
switch (TimeMonth (iTimeMN1))
{//----Ìåñÿöà 4-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 12:
case 11:
case 10:
{
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q4 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 10; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q4 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 3-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 9:
case 8:
case 7:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q3 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 7; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q3 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 2-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 6:
case 5:
case 4:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q2 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 4; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q2 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 1-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 3:
case 2:
case 1:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
if (Switch_Q1 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 1; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q1 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
if (shift == ShiftQ1) // Åñëè íàøëè íóæíûé áàð.
{
for (i++, k = TimeYear (iTimeMN1);; i++) // Èùèì ïåðâûé ìåñÿ÷íûé áàð êâàðòàëüíîãî áàðà.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
// Äëÿ ïåðâîãî áàðà ïåðâîãî êâàòàëà îñîáûå óñëîâèÿ ïðîâåðêè íà÷àëà.
if (FirstMonth == 1) {if (TimeMonth (iTimeMN1) > 3 || TimeYear (iTimeMN1) != k) return (iOpen (symbol, PERIOD_MN1, i - 1));} // Îñòàíàâëèâàåì öèêë, åñëè ñëåäóþùèé áàð íàõîäèòñÿ â äðóãîì êâàðòàëå èëè ãîäó.
else {if (TimeMonth (iTimeMN1) < FirstMonth || TimeYear (iTimeMN1) != k) return (iOpen (symbol, PERIOD_MN1, i - 1));} // Îñòàíàâëèâàåì öèêë, åñëè ñëåäóþùèé áàð íàõîäèòñÿ â äðóãîì êâàðòàëå èëè ãîäó.
}
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 5. Ìàêñèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ Q1.
double iHigh_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
int shift) // Íîìåð áàðà.
{
bool Switch_Q1 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
bool Switch_Q2 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
bool Switch_Q3 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
bool Switch_Q4 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
datetime iTimeMN1; // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
datetime iTimeMN1_1; // Âðåìÿ îòêðûòèÿ ñëåäóþùåãî ìåñÿ÷íîãî áàðà.
int i, l;
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsQ1 = iBars_Q1 (symbol); // Êîëè÷åñòâî áàðîâ â ÒÔ Q1.
int FirstMonth; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
int ShiftQ1; // Òåêóùèé íîìåð áàðà ÒÔ Q1.
// Ìàññèâû.
double ArHighMN1[3]; // Ìàññèâ ñ ìàêñèìàëüíûìè öåíàìè ìåñÿ÷íûõ áàðîâ â êâàðòàëüíîì áàðå.
//----
if (0 > shift || shift >= iBarsQ1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else // Åñëè íîìåð áàðà íàõîäèòñÿ â ïðåäåëàõ èñòîðèè, èùåì åãî.
{
for (i = 0, ShiftQ1 = -1; i < iBarsMN1; i++) // Öèêë ïî íîìåðàì ìåñÿ÷íûõ áàðîâ.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
if (i > 0) // Íà ïåðâîé èòåðàöèè íå ïðîâåðÿì ñìåíó ãîäà.
{// Åñëè ñìåíèëñÿ ãîä, èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ âî âñåõ êâàðòàëàõ. Ìîæåò ïðèãîäèòüñÿ ïðè îòñóòñòâèè áàðîâ âíóòðè ãîäà è íåñêîëüêèõ ëåò ïîäðÿä (äûðû â èñòîðèè).
if (MathMod (TimeYear (iTimeMN1), TimeYear (iTime (symbol, PERIOD_MN1, i - 1))) != 0)
{
Switch_Q1 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
Switch_Q2 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
Switch_Q3 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
Switch_Q4 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
}
}
// Ïåðåêëþ÷àåì ïî íîìåðàì ìåñÿöåâ.
switch (TimeMonth (iTimeMN1))
{//----Ìåñÿöà 4-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 12:
case 11:
case 10:
{
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q4 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 10; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q4 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 3-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 9:
case 8:
case 7:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q3 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 7; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q3 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 2-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 6:
case 5:
case 4:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q2 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 4; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q2 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 1-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 3:
case 2:
case 1:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
if (Switch_Q1 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 1; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q1 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
if (shift == ShiftQ1) // Åñëè íàøëè íóæíûé áàð.
{
for (l = 0; l < 3; i++, l++) // Èùèì ïåðâûé ìåñÿ÷íûé áàð êâàðòàëüíîãî áàðà.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ òóêóùåãî ìåñÿ÷íîãî áàðà.
iTimeMN1_1 = iTime (symbol, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ñëåäóþùåãî ìåñÿ÷íîãî áàðà.
ArHighMN1[l] = iHigh (symbol, PERIOD_MN1, i); // Ñêëàäûâàåì ìàêñèìàëüíûå öåíû ìåñÿ÷íûûõ áàðîâ â òåõíè÷åñêèé ìàññèâ.
// Äëÿ ïåðâîãî áàðà ïåðâîãî êâàòàëà îñîáûå óñëîâèÿ ïðîâåðêè íà÷àëà.
if (FirstMonth == 1) {if (TimeMonth (iTimeMN1_1) > 3 || TimeYear (iTimeMN1) != TimeYear (iTimeMN1_1)) break;} // Îñòàíàâëèâàåì öèêë, åñëè ñëåäóþùèé áàð íàõîäèòñÿ â äðóãîì êâàðòàëå èëè ãîäó.
else {if (TimeMonth (iTimeMN1_1) < FirstMonth || TimeYear (iTimeMN1) != TimeYear (iTimeMN1_1)) break;} // Îñòàíàâëèâàåì öèêë, åñëè ñëåäóþùèé áàð íàõîäèòñÿ â äðóãîì êâàðòàëå èëè ãîäó.
}
return (ArHighMN1[ArrayMaximum (ArHighMN1, l + 1, 0)]); // Âîçâðàùàåì ìàêñèìàëüíóþ öåíó êâàðòàëüíîãî áàðà.
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 6. Ìèíèìàëüíàÿ öåíà âûáðàííîãî áàðà â ÒÔ Q1.
double iLow_Q1 (string symbol, // Ââàëþòíàÿ ïàðà.
int shift) // Íîìåð áàðà.
{
bool Switch_Q1 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
bool Switch_Q2 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
bool Switch_Q3 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
bool Switch_Q4 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
datetime iTimeMN1; // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
datetime iTimeMN1_1; // Âðåìÿ îòêðûòèÿ ñëåäóþùåãî ìåñÿ÷íîãî áàðà.
int i, l;
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsQ1 = iBars_Q1 (symbol); // Êîëè÷åñòâî áàðîâ â ÒÔ Q1.
int FirstMonth; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
int ShiftQ1; // Òåêóùèé íîìåð áàðà ÒÔ Q1.
// Ìàññèâû.
double ArLowMN1[3]; // Ìàññèâ ñ ìàêñèìàëüíûìè öåíàìè ìåñÿ÷íûõ áàðîâ â êâàðòàëüíîì áàðå.
//----
if (0 > shift || shift >= iBarsQ1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else // Åñëè íîìåð áàðà íàõîäèòñÿ â ïðåäåëàõ èñòîðèè, èùåì åãî.
{
for (i = 0, ShiftQ1 = -1; i < iBarsMN1; i++) // Öèêë ïî íîìåðàì ìåñÿ÷íûõ áàðîâ.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
if (i > 0) // Íà ïåðâîé èòåðàöèè íå ïðîâåðÿì ñìåíó ãîäà.
{// Åñëè ñìåíèëñÿ ãîä, èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ âî âñåõ êâàðòàëàõ. Ìîæåò ïðèãîäèòüñÿ ïðè îòñóòñòâèè áàðîâ âíóòðè ãîäà è íåñêîëüêèõ ëåò ïîäðÿä (äûðû â èñòîðèè).
if (MathMod (TimeYear (iTimeMN1), TimeYear (iTime (symbol, PERIOD_MN1, i - 1))) != 0)
{
Switch_Q1 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
Switch_Q2 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
Switch_Q3 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
Switch_Q4 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
}
}
// Ïåðåêëþ÷àåì ïî íîìåðàì ìåñÿöåâ.
switch (TimeMonth (iTimeMN1))
{//----Ìåñÿöà 4-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 12:
case 11:
case 10:
{
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q4 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 10; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q4 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 3-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 9:
case 8:
case 7:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q3 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 7; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q3 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 2-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 6:
case 5:
case 4:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q2 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 4; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q2 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 1-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 3:
case 2:
case 1:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
if (Switch_Q1 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
ShiftQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
FirstMonth = 1; // Íîìåð ïåðâîãî ìåñÿöà êâàðòàëà.
Switch_Q1 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
if (shift == ShiftQ1) // Åñëè íàøëè íóæíûé áàð.
{
for (l = 0; l < 3; i++, l++) // Èùèì ïåðâûé ìåñÿ÷íûé áàð êâàðòàëüíîãî áàðà.
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
iTimeMN1_1 = iTime (symbol, PERIOD_MN1, i + 1); // Âðåìÿ îòêðûòèÿ ñëåäóþùåãî ìåñÿ÷íîãî áàðà.
ArLowMN1[l] = iLow (symbol, PERIOD_MN1, i); // Ñêëàäûâàåì ìèíèìàëüíûå öåíû ìåñÿ÷íûûõ áàðîâ â òåõíè÷åñêèé ìàññèâ.
// Äëÿ ïåðâîãî áàðà ïåðâîãî êâàòàëà îñîáûå óñëîâèÿ ïðîâåðêè íà÷àëà.
if (FirstMonth == 1) {if (TimeMonth (iTimeMN1_1) > 3 || TimeYear (iTimeMN1) != TimeYear (iTimeMN1_1)) break;} // Îñòàíàâëèâàåì öèêë, åñëè ñëåäóþùèé áàð íàõîäèòñÿ â äðóãîì êâàðòàëå èëè ãîäó.
else {if (TimeMonth (iTimeMN1_1) < FirstMonth || TimeYear (iTimeMN1) != TimeYear (iTimeMN1_1)) break;} // Îñòàíàâëèâàåì öèêë, åñëè ñëåäóþùèé áàð íàõîäèòñÿ â äðóãîì êâàðòàëå èëè ãîäó.
}
return (ArLowMN1[ArrayMinimum (ArLowMN1, l + 1, 0)]); // Âîçâðàùàåì ìèíèìàëüíóþ öåíó êâàðòàëüíîãî áàðà.
}
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 7. Öåíà çàêðûòèÿ âûáðàííîãî áàðà â ÒÔ Q1.
double iClose_Q1 (string symbol, // Ñèìâîëüíîå èìÿ èíñòðóìåíòà.
int shift) // Íîìåð áàðà.
{
bool Switch_Q1 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
bool Switch_Q2 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
bool Switch_Q3 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
bool Switch_Q4 = true; // Âûêëþ÷àòåëü ñ÷¸ò÷èêà êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
datetime iTimeMN1; // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
int i;
int iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
int iBarsQ1 = iBars_Q1 (symbol); // Êîëè÷åñòâî áàðîâ èëè íîìåð áàðà â ÒÔ Q1.
// Ïðîâåðêà íà íåêîððåêòíîå çíà÷åíèå íàìåðà áàðà.
if (0 > shift || shift >= iBarsQ1) return (0); // Âîçâðàùàåì íîëü â ñëó÷àå îøèáêè.
else // Åñëè íîìåð áàðà íàõîäèòñÿ â ïðåäåëàõ èñòîðèè, èùåì åãî.
{
iBarsMN1 = iBars (symbol, PERIOD_MN1); // Êîëè÷åñòâî áàðîâ â ÒÔ MN1 òåêóùåãî èíñòðóìåíòà.
for (i = 0, iBarsQ1 = -1; i < iBarsMN1; i++)
{
iTimeMN1 = iTime (symbol, PERIOD_MN1, i); // Âðåìÿ îòêðûòèÿ ìåñÿ÷íîãî áàðà.
if (i > 0) // Íà ïåðâîé èòåðàöèè íå ïðîâåðÿì ñìåíó ãîäà.
{// Åñëè ñìåíèëñÿ ãîä, èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ âî âñåõ êâàðòàëàõ. Ìîæåò ïðèãîäèòüñÿ ïðè îòñóòñòâèè áàðîâ âíóòðè ãîäà è íåñêîëüêèõ ëåò ïîäðÿä (äûðû â èñòîðèè).
if (MathMod (TimeYear (iTimeMN1), TimeYear (iTime (symbol, PERIOD_MN1, i - 1))) != 0)
{
Switch_Q1 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ïåðâîãî êâàðòàëà.
Switch_Q2 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ âòîðîãî êâàðòàëà.
Switch_Q3 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ òðåòüåãî êâàðòàëà.
Switch_Q4 = true; // Èíèöèàëèçèðóåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ ÷åòâ¸ðòîãî êâàðòàëà.
}
}
// Ïåðåêëþ÷àåì ïî íîìåðàì ìåñÿöåâ.
switch (TimeMonth (iTimeMN1))
{//----Ìåñÿöà 4-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 12:
case 11:
case 10:
{
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q4 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q4 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 3-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 9:
case 8:
case 7:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q3 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q3 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 2-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 6:
case 5:
case 4:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q1 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 1-ãî êâàðòàëà.
if (Switch_Q2 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q2 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//----Ìåñÿöà 1-ãî êâàðòàëà.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
case 3:
case 2:
case 1:
{
Switch_Q4 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 4-ãî êâàðòàëà.
Switch_Q3 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 3-ãî êâàðòàëà.
Switch_Q2 = true; // Ðàçðåøàåì ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ äëÿ 2-ãî êâàðòàëà.
if (Switch_Q1 == true) // Åñëè ñ÷¸ò÷èê ðàçðåø¸í.
{
iBarsQ1++; // Ñ÷èòàåì êâàðòàëüíûé áàð.
Switch_Q1 = false; // Çàïðåùàåì ñ÷èòàòü áàðû â ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
break; // Âûõîäèì èç ïåðåêëþ÷àòåëÿ.
}
else continue; // Ñ÷¸ò÷èê êâàðòàëüíûõ áàðîâ çàïðåù¸í, ïåðåõîäèì ê ñëåäóþùåé èòåðàöèè ïî ìåñÿ÷íûì áàðàì.
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
if (shift == iBarsQ1) return (iClose (symbol, PERIOD_MN1, i)); // Åñëè íàøëè íóæíûé áàð. Âîçâðàùàåì âðåìÿ çàêðûòèÿ ìåñÿ÷íîãî áàðà.
}
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 8. Âîçâðàùàåò òåêóùèé íîìåð øåñòè÷àñîâîãî áàðà â ñóòêàõ ïîñëåäíåãî èçâåñòíîãî ñåðâåðíîãî âðåìåíè.
int Quarter()
{
switch (Month())
{
case 1:
case 2:
case 3: return (1);
case 4:
case 5:
case 6: return (2);
case 7:
case 8:
case 9: return (3);
case 10:
case 11:
case 12: return (4);
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
// 9. Âîçâðàùàåò íîìåð êâàðòàëà äëÿ óêàçàííîãî âðåìåíè.
int TimeQuarter (datetime time) // Äàòà, ïðåäñòàâëåííàÿ â âèäå êîëè÷åñòâà ñåêóíä, ïðîøåäøèõ ïîñëå 00:00 1 ÿíâàðÿ 1970 ãîäà.
{
switch (TimeMonth (time))
{
case 1:
case 2:
case 3: return (1);
case 4:
case 5:
case 6: return (2);
case 7:
case 8:
case 9: return (3);
case 10:
case 11:
case 12: return (4);
}
}
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
Comments