Skip to content

Commit a7e6dd3

Browse files
authored
1.05
1. Added an option to choose whether to close orders, positions, or both. 2. Added a dark mode option. The MT5 version can even auto-detect the system setting. 3. Added an option to set periods with seconds. 4. Added an option to mix weekly and long-term schedules. The latter still takes priority. 5. Added an option to set time in French style format (15h45-16h00 for example). 6. Added a more nuanced display of which autotrading is currently disabled when user chooses to close trades: platform or expert advisor.
1 parent dbde5d7 commit a7e6dd3

30 files changed

Lines changed: 1419 additions & 198 deletions

MQL4/Experts/AutoTrading Scheduler/AutoTrading Scheduler.mq4

Lines changed: 75 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#property copyright "EarnForex.com"
22
#property link "https://www.earnforex.com/metatrader-expert-advisors/AutoTrading-Scheduler/"
3-
#property version "1.04"
4-
string Version = "1.04";
3+
#property version "1.05"
4+
string Version = "1.05";
55
#property strict
66

77
#property description "Creates a weekly schedule when AutoTrading is enabled."
@@ -36,6 +36,8 @@ input bool WaitForNoPositions = false; // Switch A/T off only when there are no
3636
input bool WaitForNoOrders = false; // Switch A/T off only when there are no pending orders?
3737
input string MagicNumbersFilter = ""; // Magic numbers filter
3838
input bool IgnoreMagicNumbers = false; // Ignore trades with above-listed magic numbers
39+
input ENUM_WHAT_TO_CLOSE WhatToClose = WTC_ALL; // If attempting to close trades, what to close?
40+
input bool DarkMode = false; // DarkMode: Enable dark mode for a less bright panel.
3941

4042
CScheduler Panel;
4143

@@ -47,6 +49,23 @@ long MagicNumbers_array[];
4749
//+------------------------------------------------------------------+
4850
int OnInit()
4951
{
52+
if (DarkMode)
53+
{
54+
CONTROLS_EDIT_COLOR_ENABLE = DARKMODE_EDIT_BG_COLOR;
55+
CONTROLS_EDIT_COLOR_DISABLE = 0x999999;
56+
CONTROLS_BUTTON_COLOR_ENABLE = DARKMODE_BUTTON_BG_COLOR;
57+
CONTROLS_BUTTON_COLOR_DISABLE = 0x919999;
58+
}
59+
else
60+
{
61+
CONTROLS_EDIT_COLOR_ENABLE = C'255,255,255';
62+
CONTROLS_EDIT_COLOR_DISABLE = C'221,221,211';
63+
CONTROLS_BUTTON_COLOR_ENABLE = C'200,200,200';
64+
CONTROLS_BUTTON_COLOR_DISABLE = C'224,224,224';
65+
}
66+
67+
Panel.InitVariables();
68+
5069
if (DeinitializationReason != REASON_CHARTCHANGE)
5170
{
5271
if (!Panel.LoadSettingsFromDisk())
@@ -82,7 +101,60 @@ int OnInit()
82101

83102
ProcessMagicNumbers();
84103

85-
EventSetTimer(1);
104+
if (DarkMode)
105+
{
106+
int total = ObjectsTotal(ChartID());
107+
for (int i = 0; i < total; i++)
108+
{
109+
string obj_name = ObjectName(ChartID(), i);
110+
if (StringSubstr(obj_name, 0, StringLen(Panel.Name())) != Panel.Name()) continue; // Skip non-panel objects.
111+
if (obj_name == Panel.Name() + "Back")
112+
{
113+
114+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BGCOLOR, DARKMODE_BG_DARK_COLOR);
115+
}
116+
if (obj_name == Panel.Name() + "Caption")
117+
{
118+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BGCOLOR, DARKMODE_BG_DARK_COLOR);
119+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_COLOR, DARKMODE_CONTROL_BRODER_COLOR);
120+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BORDER_COLOR, DARKMODE_BG_DARK_COLOR);
121+
}
122+
else if (obj_name == Panel.Name() + "ClientBack")
123+
{
124+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_COLOR, DARKMODE_MAIN_AREA_BORDER_COLOR);
125+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BGCOLOR, DARKMODE_MAIN_AREA_BG_COLOR);
126+
}
127+
else if (StringSubstr(obj_name, 0, StringLen(Panel.Name() + "m_Edt")) == Panel.Name() + "m_Edt")
128+
{
129+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BGCOLOR, DARKMODE_EDIT_BG_COLOR);
130+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BORDER_COLOR, DARKMODE_CONTROL_BRODER_COLOR);
131+
}
132+
else if (StringSubstr(obj_name, 0, StringLen(Panel.Name() + "m_Btn")) == Panel.Name() + "m_Btn")
133+
{
134+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BGCOLOR, DARKMODE_BUTTON_BG_COLOR);
135+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BORDER_COLOR, DARKMODE_CONTROL_BRODER_COLOR);
136+
}
137+
else if (StringSubstr(obj_name, 0, StringLen(Panel.Name() + "m_Chk")) == Panel.Name() + "m_Chk")
138+
{
139+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_COLOR, DARKMODE_TEXT_COLOR);
140+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BGCOLOR, DARKMODE_MAIN_AREA_BG_COLOR);
141+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BORDER_COLOR, DARKMODE_MAIN_AREA_BG_COLOR);
142+
}
143+
else if (StringSubstr(obj_name, 0, StringLen(Panel.Name() + "m_Rgp")) == Panel.Name() + "m_Rgp")
144+
{
145+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_COLOR, DARKMODE_TEXT_COLOR);
146+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BGCOLOR, DARKMODE_MAIN_AREA_BG_COLOR);
147+
ObjectSetInteger(ChartID(), obj_name, OBJPROP_BORDER_COLOR, DARKMODE_MAIN_AREA_BG_COLOR);
148+
}
149+
else
150+
{
151+
if (obj_name == Panel.Name() + "m_LblURL") ObjectSetInteger(ChartID(), obj_name, OBJPROP_COLOR, 0x224400);
152+
else ObjectSetInteger(ChartID(), obj_name, OBJPROP_COLOR, DARKMODE_TEXT_COLOR);
153+
}
154+
}
155+
}
156+
157+
EventSetMillisecondTimer(200); // High-resolution timer to accommodate seconds in the schedule.
86158

87159
return INIT_SUCCEEDED;
88160
}

0 commit comments

Comments
 (0)