Pivot_AXEL_MF_0-3255
Download scriptThis script is an automated technical analysis tool designed to calculate and display specific "Pivot" price levels for three major global markets: Asia, Europe, and the USA. These levels are intended to help traders identify potential support and resistance zones based on historical price action.
Core Functionality
The primary logic of the script involves scanning historical market data to determine key price benchmarks—specifically the highest price (High), the lowest price (Low), and the closing price for each specific trading session. By analyzing these three figures, the script calculates a "Pivot" value using a standard averaging formula.
Market Segmentation
The tool divides the global trading day into three distinct geographic segments:
- Asia Session: Based on a 12-hour calculation period.
- Europe Session: Based on a 9-hour calculation period.
- USA Session: Based on a 6-hour calculation period.
Intelligent Time & Date Handling
One of the more sophisticated aspects of this script is its awareness of external variables that typically complicate automated trading:
- Time Zone Adjustments: The script allows users to input their specific GMT offset to ensure the data aligns with their local time.
- Daylight Savings Awareness: It contains a dedicated logic engine to automatically detect whether the market is currently in Summer or Winter time. This ensures that pivot lines shift correctly during seasonal time changes without manual intervention.
- Data Integrity: If the script encounters a "gap" in history (such as missing data for a specific day), it is designed to handle these gaps gracefully to prevent incorrect calculations or visual errors on the chart.
Visual Presentation
The script provides two ways to interact with this information:
- Chart Lines: It draws horizontal dashed lines on the trading chart, representing the calculated Pivot levels for the current active session.
- Dynamic Text Labels: The user can enable text boxes on the chart that display the exact numerical values for the Asia, Europe, and USA pivots, alongside their respective Highs, Lows, and Closing prices. These labels can be customized by the user in terms of position (corners), font color, and offset.
Efficiency Features
To ensure the trading platform remains responsive, the script is optimized to perform calculations only when a new price candle appears, rather than recalculating on every single price tick. This prevents unnecessary strain on the computer's processor while still providing up-to-date information as the market moves.
//+-------------------------------------------------------------------+
//| MF_Pivot AXEL 0-2255.mq4 |
//| Copyright © YuraZ-VAF-Zhunko-Nestor|
//| MF YURAZ yzh@mail.ru |
//| MF VAF vazh-af@inbox.ru |
//| MF ZHUNKO zhunko@mail.ru |
//| MF NESTOR a_nesterchuk@mail.ru |
//+-------------------------------------------------------------------+
//| Èäèêàòîð ðàçðàáîòàí ïî ìàòåðèàëàì ÀÊÀÄÅÌÈÈ ÌÔ. |
//| ÈÑÏÐÀÂËÅÍÍÀß ÂÅÐÑÈß. |
//| Ñîâïàäàåò ñ òî÷íîñòüþ 5ï ñ óðîâíÿìè DJ îò Axel Rudolph ! |
//| Áåðåò äàííûå ñ M1. |
//| ÂÍÈÌÀÅÍÈÅ! |
//| Åñëè âàøå ÄÖ äà¸ò íå òî÷íûå êîòèðîâêè - PIVOT íå áóäåò ñîâïàäàòü. |
//+-------------------------------------------------------------------+
//| ÈÇÌÅÍÅÍÈß è ÄÎÏÎËÍÅÍÈß. |
//| 1.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-101 îò 06.09.2006 . |
//| 1.1.Âîçìîæíî ïåðåìåùåíèå âñåé íàäïèñè ïî ýêðàíó êîîðäèíàòàìè XY |
//| 1.2.Ââåäåíû íàñòðîéêè ïî óìîë÷àíèþ. |
//| 1.3.Ââåäåíà íàñòðîéêà öâåòà òåêñòà. |
//| 2.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-102 îò 08.09.2006 . |
//| 2.1.Èñïðàâëåíà îøèáêà îòðèñîâêè ëèíèè â íåêîòîðûõ òåðìèíàëàõ. |
//| 3.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-103 îò 09.09.2006 . |
//| 3.1.Èçìåí¸í ïåðåêëþ÷àòåëü âûâîäà òåêñòà íà ëîãè÷åñêèé. |
//| 3.2.Èçìåíåíû íàçâàíèÿ âíåøíèõ ïåðåìåííûõ. |
//| 3.3.Ââåäåíû îòñóòñòâóþùèå êîìåíòàðèè â èñõîäíèê. |
//| 3.4.Èçìåíåíà íàñòðîéêà ðàçíèöû âðåìåíè ìåæäó ÌÒ4 è GMT. |
//| 4.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-113 îò 14.09.2006 . |
//| 4.1.Ââåäíà íå÷óâñòâèòåëåííîñòü ê ïðîïóùåííûì áàðàì. |
//| 5.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-114 îò 17.09.2006 . |
//| 5.1.Óïðîùåíû íàñòðîéêè âðåìåíè êîíöà ïåðèîäà ðàñ÷¸òà è âðåìåíè |
//| íà÷àëà îòðèñîâêè ëèíèè. |
//| 5.2.Íà âàëþòíûõ ïàðàõ, ñîäåðæàùèõ JPY, â òåêñòîâîé ñòðîêå öèôðîâîå|
//| çíà÷åíèå ïîñëå çàïÿòîé ñîäåðæèò äâà çíàêà. Íà îñòàëüíûõ |
//| âàëþòíûõ ïàðàõ - ÷åòûðå. |
//| 6.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-214 îò 18.09.2006 . |
//| 6.1 Äîðàáîòêà âûâîäà êîëè÷åñòâà çíàêîâ äëÿ âàëþòíûõ ïàð â |
//| òåêñòîâîì îòîáðàæåíèè. |
//| 7.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-224 îò 19.09.2006 . |
//| 7.1.Óñòðàíåíà îøèáêà íà÷àëà ðàñ÷¸òà â ïîíåäåëüíèê. |
//| 8.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-225 îò 24.09.2006 . |
//| 8.1.Óñòðàíåíà îøèáêà íà÷àëà ðàñ÷¸òà â àçèàòñêóþ ñåññèþ. |
//| 8.2.Ïðè îòñóòñòâèè äàííûõ äëÿ ðàñ÷¸òà âìåñòî "99999999,0000" |
//| âûâîäèòñÿ "0,0000". |
//| 9.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-2254 îò 06.10.2006 . |
//| 9.1.Êîððåêòíîå îòîáðàæåíèå ïîêàçàíèé â çàâèñèìîñòè îò èçìåíåíèÿ |
//| ïàðàìåòðîâ ñòàðòà ðàñ÷¸òà. |
//| 9.2.Îïòèìèçàöèÿ êîäà ïðåîáðàçîâàíèé. |
//| 9.3.Èçìåíåíèå àëãîðèòìà ðàñ÷¸òà ìèíèìóìîâ è ìàêñèìóìîâ ñåññèé. |
//| 10.Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-2255 îò 06.11.2006 |
//| 10.1.Ïåðåõîä íà âû÷èñëåíèå ïî âûøåèäóùåìó òàéì-ôðåéìó äëÿ äíåé, ó |
//| êîòîðûõ îòñóòñòâóåò ïîëíàÿ èñòîðèÿ íà ìëàäøèõ òàéì-ôðåéìàõ. |
//| 10.2.Ïîäêîððåêòèðîâàí àëãîðèòì ðàñ÷åòà ïèâîòà íà åâðîïåéñêóþ |
//| ñåññèþ â çèìíåå âðåìÿ. |
//| 10.3.Îïòèìèçèðîâàíà çàãðóçêà êîìïüþòåðà. Âû÷èñëåíèå çíà÷åíèÿ |
//| òîëüêî ïðè ïîÿâëåíèè íîâîé ñâå÷è, à íå ñ êàæäûì òèêîì. |
//| 11. Äîïîëíåíèÿ â âåðñèè MF_Pivot AXEL 0-3255 îò 25.08.2007 |
//| 11.1.Äîáàâëåíà ôóíêöèÿ àâòîìàòè÷åñêîãî îïðåäåëåíèÿ |
//| ëåòíåãî çèìíåãî âðåìåíè |
//+-------------------------------------------------------------------+
#property copyright "Copyright © 2006 YuraZ-VAF-Zhunko-Nestor"
#property link "yzh@mail.ru ; vazh-af@inbox.ru ; zhunko@mail.ru ; a_nesterchuk@mail.ru"
#property indicator_chart_window
#property indicator_buffers 1
//Öâåò ïî óìîë÷àíèþ.
#property indicator_color1 Gold
//Ñòèëü ïî óìîë÷àíèþ.
#property indicator_style1 STYLE_DASH
//Òîëùèíà ëèíèè ïî óìîë÷àíèþ.
#property indicator_width1 1
//----Ëîêàëèçàöèÿ---------------------------------------------------------------------------------------------------------------------------------
extern int Äíåé = 30; // Êîëè÷åñòâî ðàñ÷èòûâàåìûõ äíåé.
extern int Âðåìÿ_ÄÖ = 2; // Ðàçíèöà âî âðåìåíè ìåæäó ÌÒ4 è GMT.
//----Íàñòðîéêà äëèíû ïåðèîäà ðàñ÷¸òà-------------------------------------------------------------------------------------------------------------
extern double Asia_ïåðèîä_ðàñ÷¸òà_÷àñ = 12 ; // Ïåðèîä ðàñ÷¸òà â ÷àñàõ äëÿ Àçèè.
extern double Europe_ïåðèîä_ðàñ÷¸òà_÷àñ = 9 ; // Ïåðèîä ðàñ÷¸òà â ÷àñàõ äëÿ Åâðîïû.
extern double USA_ïåðèîä_ðàñ÷¸òà_÷àñ = 6 ; // Ïåðèîä ðàñ÷¸òà â ÷àñàõ äëÿ Àìåðèêè.
//----Íàñòðîéêà âðåìåíè êîíöà ïåðèîäà ðàñ÷¸òà è âðåìåíè íà÷àëà îòðèñîâêè ëèíèè--------------------------------------------------------------------
extern string Start_ASIA = "00:15" ; // Âðåìÿ êîíöà ïåðèîäà ðàñ÷¸òà äëÿ Àçèè ïî GMT.
// Âðåìÿ íà÷àëà îòðèñîâêè ëèíèè "PIVOT DJ ASIA" (ó÷èòûâàþòñÿ òîëüêî ÷àñû, ìèíóòû îòáðàñûâàþòñÿ).
extern string Start_EUROPE_Winter = "06:15" ; // Âðåìÿ êîíöà ïåðèîäà ðàñ÷¸òà äëÿ Åâðîïû ïî GMT.
// Âðåìÿ íà÷àëà îòðèñîâêè ëèíèè "PIVOT DJ EUROPE" (ó÷èòûâàþòñÿ òîëüêî ÷àñû, ìèíóòû îòáðàñûâàþòñÿ).
extern string Start_USA_Winter = "13:00" ; // Âðåìÿ êîíöà ïåðèîäà ðàñ÷¸òà äëÿ Àìåðèêè ïî GMT.
// Âðåìÿ íà÷àëà îòðèñîâêè ëèíèè "PIVOT DJ USA" (ó÷èòûâàþòñÿ òîëüêî ÷àñû, ìèíóòû îòáðàñûâàþòñÿ).
//----Íàñòðîéêà îòîáðàæåíèÿ-----------------------------------------------------------------------------------------------------------------------
extern int Óãîë = 0 ; // Ðàñïîëîæåíèå èíäèêàòîðà : 0 = ñâåðõó ñëåâà, 1 = ñâåðõó ñïðàâà, 2 = ñíèçó ñëåâà, 3 = ñíèçó ñïðàâà.
extern int XD = 250 ; // Ñìåùåíèå îò óãëà ïî X.
extern int YD = 0 ; // Ñìåùåíèå îò óãëà ïî Y.
extern bool TEXT_Visible = true ; // true - îòîáðàæàòü òåêñò; false - íå îòîáðàæàòü òåêñò.
extern color TextColor = White ; // Öâåò òåêñòà.
//================================================================================================================================================
double nClose = 0 ;
double nPivot = 0 ;
double nMaxHigh = 0 ;
double nMinLow = 0 ;
//---------------------------------------------------------------
static bool Time_Summer = false; // true - ëåòíåå âðåìÿ / false - çèìíåå âðåìÿ.
//---------------------------------------------------------------
double PBuffer[];
//---------------------------------------------------------------
static string ss1 = "Asia DJ Pivot" ;
static string ss2 = "Europe DJ Pivot" ;
static string ss3 = "Usa DJ Pivot" ;
//===============================================================
datetime t;
int init()
{
t=0;
if ( TEXT_Visible == true )
{
ObjectCreate(ss1, OBJ_LABEL, 0, 0, 0);
ObjectSet(ss1, OBJPROP_XDISTANCE, XD);
ObjectSet(ss1, OBJPROP_YDISTANCE, YD);
ObjectSet(ss1, OBJPROP_CORNER, Óãîë);
ObjectCreate(ss2, OBJ_LABEL, 0, 0, 0);
ObjectSet(ss2, OBJPROP_XDISTANCE, XD);
ObjectSet(ss2, OBJPROP_YDISTANCE, 10+YD);
ObjectSet(ss2, OBJPROP_CORNER, Óãîë);
ObjectCreate(ss3, OBJ_LABEL, 0, 0, 0);
ObjectSet(ss3, OBJPROP_XDISTANCE, XD);
ObjectSet(ss3, OBJPROP_YDISTANCE, 20+YD);
ObjectSet(ss3, OBJPROP_CORNER, Óãîë);
}
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,PBuffer);
return(0);
}
//===============================================================
int deinit()
{
if ( TEXT_Visible == true )
{
ObjectDelete(ss1);
ObjectDelete(ss2);
ObjectDelete(ss3);
}
return(0);
}
//===============================================================
void funPivot(int pDay, int pMonth, int pYear, double PeriodHour, double hourMT4, double minuteMT4)
{
datetime dTimeMT4end;
datetime dTimeMT4begin;
string sTimeMT4 = StringConcatenate(DoubleToStr( pYear, 0),".",DoubleToStr( pMonth , 0),".",DoubleToStr( pDay , 0)," ",
DoubleToStr( hourMT4, 0),":",DoubleToStr( minuteMT4, 0) ) ;
dTimeMT4end = StrToTime(sTimeMT4);
dTimeMT4begin = dTimeMT4end - PeriodHour*3600+60 ;
if (TimeDayOfWeek (dTimeMT4begin) ==0)
dTimeMT4begin = dTimeMT4begin - 172800;
//which period to use depends on the history presence.
int i=PERIOD_M1;
int j =iBarShift(NULL,i,dTimeMT4begin,true);
if (j == -1)
i=PERIOD_M5;
j=iBarShift(NULL,i,dTimeMT4begin,true);
if (j == -1)
i=PERIOD_M15;
int shiftend=iBarShift(NULL,i,dTimeMT4end);
int shiftbegin=iBarShift(NULL,i,dTimeMT4begin);
nMinLow =iLow(NULL,i,Lowest ( NULL, i, MODE_LOW, shiftbegin-shiftend, shiftend));
nMaxHigh= iHigh(NULL,i,Highest( NULL, i, MODE_HIGH, shiftbegin-shiftend, shiftend));
nClose=iClose(NULL,i,shiftend);
nPivot = (nMaxHigh+nMinLow+nClose)/3;
return;
}
//================================================================
int start()
{
if(t==Time[0]) return(0);
t=Time[0];
int mDay;
int mMonth ;
int mYear ;
string mYearMonthDay;
//----------------------------------------------------------------
static double PeriodHour_ ; // = Asia_ïåðèîä_ðàñ÷¸òà_÷àñ;
static double hourMT4_ ; // = Asia_êîíåö_ïåðèîäà_MT4_÷àñ;
static double minuteMT4_ ; // = Asia_êîíåö_ïåðèîäà_MT4_ìèí;
static double nPivotEurope; // = nPivot;
static double nMaxHighE ; // = nMaxHigh;
static double nMinLowE ; // = nMinLow;
static double nCloseE ; // = nClose;
static double nPivotUSA ; // = nPivot;
static double nMaxHighU ; // = nMaxHigh;
static double nMinLowU ; // = nMinLow;
static double nCloseU ; // = nClose;
static double nPivotASIA ; // = nPivot;
static double nMaxHighA ; // = nMaxHigh;
static double nMinLowA ; // = nMinLow;
static double nCloseA ; // = nClose;
//-----------------------------------------------------------------
datetime mDatBegin;
// âðåìÿ áåðåòñÿ ñ áàðà äëÿ ïðàâèëüíîé ðàáîòû â ñîâåòíèêàõ - ïðè òåñòèðîâàííèè TimeCurrent() - èìåëà ïðîáëåìó
Time_Summer = TimeWinter(iTime(Symbol(),PERIOD_M15,0)); // äîñòàòî÷íûé ÒÔ äëÿ îïðåäåëåíèÿ ëåòà èëè çèìà
// if (Bars != IndicatorCounted())
{
if (Äíåé == 0 )
{
deinit();
return(0);
}
else
{
mDatBegin = StrToTime(StringConcatenate(TimeToStr(CurTime(),TIME_DATE)," 00:00")) - ((Äíåé-1) * 86400);
}
//==================================================================
for ( ; mDatBegin < CurTime(); mDatBegin += 86400 )
{
mYear = TimeYear( mDatBegin);
mMonth = TimeMonth( mDatBegin);
mDay = TimeDay( mDatBegin);
mYearMonthDay = StringConcatenate(DoubleToStr (mYear,0) , "." , DoubleToStr (mMonth, 0) , "." , DoubleToStr (mDay , 0));
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
Start_ASIA=StringTrimRight(StringTrimLeft(Start_ASIA));
Start_EUROPE_Winter=StringTrimRight(StringTrimLeft(Start_EUROPE_Winter));
Start_USA_Winter=StringTrimRight(StringTrimLeft(Start_USA_Winter));
if (Time_Summer==true) int TWS =1;
else TWS=0;
int Asia_end_MT4_hour = StrToDouble(StringSubstr(Start_ASIA, 0, 2)) + Âðåìÿ_ÄÖ;
int Asia_end_MT4_min = StrToDouble(StringSubstr(Start_ASIA, 3, 2)) ;
int Europe_end_MT4_hour_pivot = StrToDouble (StringSubstr(Start_EUROPE_Winter, 0, 2)) + Âðåìÿ_ÄÖ-1+TWS;
int Europe_end_MT4_hour_session = StrToDouble (StringSubstr(Start_EUROPE_Winter, 0, 2)) + Âðåìÿ_ÄÖ - TWS;
int Europe_end_MT4_min = StrToDouble (StringSubstr(Start_EUROPE_Winter, 3, 2)) ;
int USA_end_MT4_hour_pivot = StrToDouble (StringSubstr(Start_USA_Winter, 0, 2)) + Âðåìÿ_ÄÖ - TWS;
int USA_end_MT4_hour_session = StrToDouble (StringSubstr(Start_USA_Winter, 0, 2)) + Âðåìÿ_ÄÖ - TWS;
int USA_end_MT4_min = StrToDouble (StringSubstr(Start_USA_Winter, 3, 2)) ;
//----------------------------------------------------------------------------------------------------------------------------------------------------------------*/
PeriodHour_ = Asia_ïåðèîä_ðàñ÷¸òà_÷àñ;
hourMT4_ = Asia_end_MT4_hour;
minuteMT4_ = Asia_end_MT4_min;
funPivot( mDay, mMonth ,mYear ,PeriodHour_, hourMT4_, minuteMT4_);
nPivotASIA = nPivot;
nMaxHighA = nMaxHigh;
nMinLowA = nMinLow;
nCloseA = nClose;
//----------------------------------------------
PeriodHour_ = Europe_ïåðèîä_ðàñ÷¸òà_÷àñ;
hourMT4_ = Europe_end_MT4_hour_pivot;
minuteMT4_ = Europe_end_MT4_min;
funPivot(mDay, mMonth,mYear,PeriodHour_, hourMT4_, minuteMT4_);
nPivotEurope = nPivot;
nMaxHighE = nMaxHigh;
nMinLowE = nMinLow;
nCloseE = nClose;
//----------------------------------------------
PeriodHour_ = USA_ïåðèîä_ðàñ÷¸òà_÷àñ;
hourMT4_ = USA_end_MT4_hour_pivot;
minuteMT4_ = USA_end_MT4_min;
funPivot(mDay, mMonth,mYear,PeriodHour_, hourMT4_, minuteMT4_);
nPivotUSA = nPivot;
nMaxHighU = nMaxHigh;
nMinLowU = nMinLow;
nCloseU = nClose;
//----------------------------------------------
string DC_ASIA = StringConcatenate(mYearMonthDay , " " , Asia_end_MT4_hour, ":00");
string DC_EUROPE = StringConcatenate(mYearMonthDay , " " , Europe_end_MT4_hour_session, ":00");
string DC_USA = StringConcatenate(mYearMonthDay , " " , USA_end_MT4_hour_session, ":00");
int pPivotBARA = iBarShift (NULL,0,StrToTime (DC_ASIA));
int pPivotBARE = iBarShift (NULL,0,StrToTime (DC_EUROPE));
int pPivotBARU = iBarShift (NULL,0,StrToTime (DC_USA));
int j;
if ( nPivotASIA !=0 )
{
for (j = 0 ; j < pPivotBARA; j++)
PBuffer[j] = nPivotASIA ;
}
if ( nPivotEurope !=0)
{
for (j = 0 ; j < pPivotBARE; j++)
PBuffer[j] = nPivotEurope ;
}
if (nPivotUSA !=0 )
{
for (j = 0 ; j < pPivotBARU; j++)
PBuffer[j] = nPivotUSA ;
}
}
if (TEXT_Visible == true )
{
string sPivotASIA = StringConcatenate("PivotAsia =",DoubleToStr(nPivotASIA ,Digits)," High="+DoubleToStr(nMaxHighA,Digits)," Low=",DoubleToStr(nMinLowA,Digits)," Close=",DoubleToStr(nCloseA,Digits)) ;
string sPivotEUROPE = StringConcatenate("PivotEurope=" ,DoubleToStr(nPivotEurope,Digits)," High="+DoubleToStr(nMaxHighE,Digits)," Low=",DoubleToStr(nMinLowE,Digits)," Close=",DoubleToStr(nCloseE,Digits)) ;
string sPivotUSA = StringConcatenate("PivotUSA =" ,DoubleToStr(nPivotUSA ,Digits)," High="+DoubleToStr(nMaxHighU,Digits)," Low=",DoubleToStr(nMinLowU,Digits)," Close="+DoubleToStr(nCloseU,Digits)) ;
ObjectSetText(ss1, sPivotASIA , 8, "Arial", TextColor);
ObjectSetText(ss2, sPivotEUROPE , 8, "Arial", TextColor);
ObjectSetText(ss3, sPivotUSA , 8, "Arial", TextColor);
}
}
return(0);
}
//////////////////////////////////////////////////////////////
//
// YURAZ yzh mail ru
//
// ôóíêöèÿ âåðíåò
// true - ëåòíåå âðåìÿ
// false - çèìíåå âðåìÿ
//
// ïåðåõîä íà çèìíåå â íî÷ü ïîñëåäíåãî âîñêðåñåíüÿ ÎÊÒßÁÐß
// ïåðåõîä íà ëåòíåå â íî÷ü ïîñëåäíåãî âîñêðåñåíüÿ ÌÀÐÒÀ
//
bool TimeWinter(datetime dt)
{
int i;
if ( TimeMonth(dt) >= 11 || TimeMonth(dt) <= 2 ) // ÇÈÌÀ
{
return(false); // ìãíîâåííî âåðíåì çèìíåå
}
if ( TimeMonth(dt) >= 4 && TimeMonth(dt) <= 9) // ËÅÒÎ
{
return(true); // ìãíîâåííî âåðíåì Ëåòî
}
// äåëàòü íå÷åãî èäåì îïðåäåëÿòü
datetime tSeek;
string sTIM;
if ( TimeMonth(dt) == 10 ) // îêòÿáðü
{
if ( TimeDay(dt) >= 20 ) // íî÷üþ â ïîñëåäåå âîñêðåñåíüå îêòÿáðÿ - ïåðåõîä íà çèìíåå âðåìÿ
{
tSeek = StrToTime( StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".10.31"); // óñòàíîâèì ïîñëåäíèé äåíü îêòÿáðÿ
// èùåì ïåðâîå âîñêðåñåíüå ñ êîíöà
for ( i = 31; i >= 20; i-- )
{
if ( TimeDayOfWeek(tSeek) == 0 )
{
break; // íàøëè ïîñëåäíåå âîñêðåñåíüíå îêòÿáðÿ
}
tSeek = tSeek - 86400; // åùå îäèí äåíü
}
if ( dt >= tSeek ) // óæå çèìíåå âðåìÿ
{
return(false); // äà çèìà
}
}
return(true);
}
if ( TimeMonth(dt) == 3 ) // ìàðò
{
if ( TimeDay(dt) >= 20 ) // íî÷üþ â ïîñëåäåå âîñêðåñåíüå ÌÀÐÒÀ - ïåðåõîä íà ËÅÒÍÅÅ âðåìÿ
{
tSeek = StrToTime( StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".03.31"); // óñòàíîâèì ïîñëåäíèé äåíü ìàðòà
for ( i = 31; i >= 20; i-- )
{
if ( TimeDayOfWeek(tSeek) == 0 ) // èùåì ïåðâîå âîñêðåñåíüå ñ êîíöà
{
break; // íàøëè ïîñëåäíåå âîñêðåñåíüíå ìàðòà
}
tSeek = tSeek - 86400; // åùå îäèí äåíü
}
if ( dt >= tSeek ) // óæå ëåòíåå âðåìÿ
{
return(true); // óæå ëåòî
}
}
return(false);
}
}
//+------------------------------------------------------------------+
Comments