mirror of
https://github.com/rithsila/MT5-EA-Sniper-Strategy.git
synced 2026-08-17 20:58:13 +00:00
170 lines
11 KiB
Plaintext
170 lines
11 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| Sessions.mq5 |
|
|
//| Copyright 2022, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2022, MetaQuotes Ltd."
|
|
#property link "https://www.mql5.com"
|
|
#property version "1.00"
|
|
//+------------------------------------------------------------------+
|
|
//| Expert initialization function |
|
|
//+------------------------------------------------------------------+
|
|
input int NumberOfDays = 50; // Êîëè÷åñòâî äíåé
|
|
input string AsiaBegin = "01:00"; // Îòêðûòèå àçèàòñêîé ñåññèè
|
|
input string AsiaEnd = "10:00"; // Çàêðûòèå àçèàòñêîé ñåññèè
|
|
input color AsiaColor = Goldenrod; // Öâåò àçèàòñêîé ñåññèè
|
|
input string EurBegin = "07:00"; // Îòêðûòèå åâðîïåéñêîé ñåññèè
|
|
input string EurEnd = "16:00"; // Çàêðûòèå åâðîïåéñêîé ñåññèè
|
|
input color EurColor = Tan; // Öâåò åâðîïåéñêîé ñåññèè
|
|
input string USABegin = "14:00"; // Îòêðûòèå àìåðèêàíñêîé ñåññèè
|
|
input string USAEnd = "23:00"; // Çàêðûòèå àìåðèêàíñêîé ñåññèè
|
|
input color USAColor = PaleGreen; // Öâåò àìåðèêàíñêîé ñåññèè
|
|
|
|
int OnInit()
|
|
{
|
|
//---
|
|
DeleteObjects();
|
|
for(int i=0; i<NumberOfDays; i++)
|
|
{
|
|
CreateObjects("AS"+i, AsiaColor);
|
|
CreateObjects("EU"+i, EurColor);
|
|
CreateObjects("US"+i, USAColor);
|
|
}
|
|
Comment("");
|
|
//---
|
|
return(INIT_SUCCEEDED);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Expert deinitialization function |
|
|
//+------------------------------------------------------------------+
|
|
void OnDeinit(const int reason)
|
|
{
|
|
//---
|
|
DeleteObjects();
|
|
Comment("");
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Expert tick function |
|
|
//+------------------------------------------------------------------+
|
|
void OnTick()
|
|
{
|
|
//---
|
|
datetime dt=TimeCurrent();
|
|
|
|
for(int i=0; i<NumberOfDays; i++)
|
|
{
|
|
DrawObjects(dt, "AS"+i, AsiaBegin, AsiaEnd);
|
|
DrawObjects(dt, "EU"+i, EurBegin, EurEnd);
|
|
DrawObjects(dt, "US"+i, USABegin, USAEnd);
|
|
dt=decDateTradeDay(dt);
|
|
while(TimeDayOfWeekMQL4(dt)>5)
|
|
dt=decDateTradeDay(dt);
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
void CreateObjects(string no, color cl)
|
|
{
|
|
ObjectCreate(0, no, OBJ_RECTANGLE, 0, 0,0, 0,0);
|
|
ObjectSetInteger(0, no, OBJPROP_STYLE, STYLE_SOLID);
|
|
ObjectSetInteger(0, no, OBJPROP_COLOR, cl);
|
|
ObjectSetInteger(0, no, OBJPROP_BACK, true);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void DeleteObjects()
|
|
{
|
|
for(int i=0; i<NumberOfDays; i++)
|
|
{
|
|
ObjectDelete(0, "AS"+i);
|
|
ObjectDelete(0, "EU"+i);
|
|
ObjectDelete(0, "US"+i);
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void DrawObjects(datetime dt, string no, string tb, string te)
|
|
{
|
|
datetime t1, t2;
|
|
double p1, p2;
|
|
int b1, b2;
|
|
|
|
t1=StringToTime(TimeToString(dt, TIME_DATE)+" "+tb);
|
|
t2=StringToTime(TimeToString(dt, TIME_DATE)+" "+te);
|
|
b1=iBarShift(NULL, 0, t1);
|
|
b2=iBarShift(NULL, 0, t2);
|
|
p1=iHighest(NULL, 0, MODE_HIGH, b1-b2, b2);
|
|
p2=iLowest(NULL, 0, MODE_LOW, b1-b2, b2);
|
|
ObjectSetInteger(0, no, OBJPROP_TIME, t1);
|
|
ObjectSetDouble(0, no, OBJPROP_PRICE, p1);
|
|
ObjectSetInteger(0, no, OBJPROP_TIME, t2);
|
|
ObjectSetDouble(0, no, OBJPROP_PRICE, p2);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
|
|
datetime decDateTradeDay (datetime dt) {
|
|
int ty=TimeYear(dt);
|
|
int tm=TimeMonth(dt);
|
|
int td=TimeDay(dt);
|
|
int th=TimeHour(dt);
|
|
int ti=TimeMinute(dt);
|
|
|
|
td--;
|
|
if (td==0) {
|
|
tm--;
|
|
if (tm==0) {
|
|
ty--;
|
|
tm=12;
|
|
}
|
|
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
|
|
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
|
|
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
|
|
}
|
|
return(StringToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
|
|
}
|
|
|
|
int TimeDayOfWeekMQL4(datetime date)
|
|
{
|
|
MqlDateTime tm;
|
|
TimeToStruct(date,tm);
|
|
return(tm.day_of_week);
|
|
}
|
|
|
|
int TimeYear(datetime date)
|
|
{
|
|
MqlDateTime tm;
|
|
TimeToStruct(date,tm);
|
|
return(tm.year);
|
|
}
|
|
|
|
int TimeMonth(datetime date)
|
|
{
|
|
MqlDateTime tm;
|
|
TimeToStruct(date,tm);
|
|
return(tm.mon);
|
|
}
|
|
|
|
int TimeMinute(datetime date)
|
|
{
|
|
MqlDateTime tm;
|
|
TimeToStruct(date,tm);
|
|
return(tm.min);
|
|
}
|
|
|
|
int TimeHour(datetime date)
|
|
{
|
|
MqlDateTime tm;
|
|
TimeToStruct(date,tm);
|
|
return(tm.hour);
|
|
}
|
|
|
|
int TimeDay(datetime date)
|
|
{
|
|
MqlDateTime tm;
|
|
TimeToStruct(date,tm);
|
|
return(tm.day_of_year);
|
|
} |