//+-------------------------------------------------------------------+
//| 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