- use a 24 digit, binary-ish string input, representing one trading day, (24 hours of a trading day)
- fill a bool array, containing the hourly trade-permission (bool Trade_Permission[24])
- check permission right before sending order. (hour_of_day: 0 to 23)
- you can use 5 inputs, for each trading day of a week.
input string ActiveHours = "001111101111111111111000"; // zeros disable trading bool HourlyPermission[24]; OnInit(): // first check ActiveHours for invalid cases (wrong length, non-1 and non-0 characters etc...) // fill in HourlyPermission[0] to HourlyPermission[23] according to ActiveHours string.... Ontick(): // bla bla bla // convert current time to struct, and get value of hour_of_day if(HourlyPermission[MyStruct.hour_of_day]) { // trade like a mad man :) } else { // don't trade, probabaly just trail-stop or other maintenance procedures }
thank you ill give it a try
I've setup the inputs and time-limitations this way :
- use a 24 digit, binary-ish string input, representing one trading day, (24 hours of a trading day)
- fill a bool array, containing the hourly trade-permission (bool Trade_Permission[24])
- check permission right before sending order. (hour_of_day: 0 to 23)
- you can use 5 inputs, for each trading day of a week.
sorry i've never used time as a trigger before could you give me an example in the code of say allowing the user to set to trade between 0800 && 2100, Thanks
input string ActiveHours = "001111101111111111111000"; // zeros disable trading
This is user friendly but can't be optimized. If you make it a uint, then it can be. min=1, max=224-1, 0xFFFFFF or 16777215. No need for any array or struct.input uint ActiveHours = 0xFFFFFF; // zeros disable trading : bool isActive = bool(ActiveHours & (1 << Hour() ));
- The alternative is just use two ints, startHour and endHour. This can be optimized much easier and is likely more robust.
beg < end ? beg <= tod && tod < end : end <= tod && tod < beg;
- Don't double post!
General rules and best pratices of the Forum. - General - MQL5 programming forum
I've submitted this to the codebase but it hasn't been published yet. Maybe it'll work for your use case.
Put the files here :
Include\Schedule\Schedule.mqh
Scripts\Tests\Schedule\ScheduleTests.mq4
Include the Schedule file in your project and wire it up to the user inputs. The schedule object will have a method for checking whether a time is within the active schedule or not. The tests scripts should show the intended functionality.
#include <Schedule\Schedule.mqh>
// setting up values to define the schedule
ENUM_DAY_OF_WEEK StartDay=1;//Start Day
ENUM_DAY_OF_WEEK EndDay=5;//End Day
string StartTime="12:30";//Start Time
string EndTime="14:30";//End Time
// Creating the schedule from above settings
Schedule s(StartDay,StartTime,EndDay,EndTime);
// Displaying the schedule as a string in English
Print("Schedule : ",s.ToString());
// Creating a datetime to check, this would normally come from ticks or bars instead.
datetime ted0 = StrToTime(StringConcatenate("2018.06.10 ", (string)(s.TimeEnd.Hour), ":", (string)(s.TimeEnd.Minute)));
// Checking whether the given datetime falls within the schedules active time.
Print(s.IsActive(ted0));
I don't think I tested it where the beginning and ending day of the week are the same value. Let me know if you use it and it works.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello there?
This will be simple for someone but I can't seem to get my head round it. I wish to add an extern bool "UseTimer" to an EA so that it will only trade between the times set by the user but I am unsure on how to write the function and indeed the extern setting options can anyone help