StopFirst 1.00, the read-only core
Fourteen headers, a header-only MQL5 library: lot size from risk, pips on
forex, gold and indices, broker checks, bars and candle patterns, cached ATR,
sessions in GMT, account risk, symbol suffixes, a calendar filter. Sends no
trade requests. Plus the LotByRisk example script.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 21:40:34 +03:00 | | | //+------------------------------------------------------------------+
|
| | | //| Time.mqh|
|
| | | //| Copyright 2026, bandersoft |
|
| | | //| https://www.mql5.com/en/users/fats |
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //| Timeframe and weekday names, trading-hour windows. |
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | #ifndef STOPFIRST_TIME_MQH
|
| | | #define STOPFIRST_TIME_MQH
|
| | |
|
| | | #include "Defs.mqh"
|
2026-10-16 21:48:01 +03:00 | | | #include "Sessions.mqh" // CurrentGmtHour
|
StopFirst 1.00, the read-only core
Fourteen headers, a header-only MQL5 library: lot size from risk, pips on
forex, gold and indices, broker checks, bars and candle patterns, cached ATR,
sessions in GMT, account risk, symbol suffixes, a calendar filter. Sends no
trade requests. Plus the LotByRisk example script.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 21:40:34 +03:00 | | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| Convert timeframe to string |
|
| | | //| |
|
| | | //| Returns: the short label - "M1", "M15", "H4", "MN1" and so on - |
|
| | | //| or "Unknown" for a value outside the 21 standard |
|
| | | //| timeframes. |
|
| | | //+------------------------------------------------------------------+
|
| | | string TimeframeToString(ENUM_TIMEFRAMES timeframe)
|
| | | {
|
| | | switch(timeframe)
|
| | | {
|
| | | case PERIOD_M1: return "M1";
|
| | | case PERIOD_M2: return "M2";
|
| | | case PERIOD_M3: return "M3";
|
| | | case PERIOD_M4: return "M4";
|
| | | case PERIOD_M5: return "M5";
|
| | | case PERIOD_M6: return "M6";
|
| | | case PERIOD_M10: return "M10";
|
| | | case PERIOD_M12: return "M12";
|
| | | case PERIOD_M15: return "M15";
|
| | | case PERIOD_M20: return "M20";
|
| | | case PERIOD_M30: return "M30";
|
| | | case PERIOD_H1: return "H1";
|
| | | case PERIOD_H2: return "H2";
|
| | | case PERIOD_H3: return "H3";
|
| | | case PERIOD_H4: return "H4";
|
| | | case PERIOD_H6: return "H6";
|
| | | case PERIOD_H8: return "H8";
|
| | | case PERIOD_H12: return "H12";
|
| | | case PERIOD_D1: return "D1";
|
| | | case PERIOD_W1: return "W1";
|
| | | case PERIOD_MN1: return "MN1";
|
| | | default: return "Unknown";
|
| | | }
|
| | | }
|
| | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| Get day of week as string |
|
| | | //| |
|
| | | //| Returns: "Sunday" through "Saturday" for 0..6, "Unknown" for any |
|
| | | //| other value. |
|
| | | //+------------------------------------------------------------------+
|
| | | string DayOfWeekToString(int day)
|
| | | {
|
2026-10-16 21:48:01 +03:00 | | | //--- a switch needs no state and no first-call branch
|
StopFirst 1.00, the read-only core
Fourteen headers, a header-only MQL5 library: lot size from risk, pips on
forex, gold and indices, broker checks, bars and candle patterns, cached ATR,
sessions in GMT, account risk, symbol suffixes, a calendar filter. Sends no
trade requests. Plus the LotByRisk example script.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 21:40:34 +03:00 | | | switch(day)
|
| | | {
|
| | | case SUNDAY: return "Sunday";
|
| | | case MONDAY: return "Monday";
|
| | | case TUESDAY: return "Tuesday";
|
| | | case WEDNESDAY: return "Wednesday";
|
| | | case THURSDAY: return "Thursday";
|
| | | case FRIDAY: return "Friday";
|
| | | case SATURDAY: return "Saturday";
|
| | | }
|
| | |
|
| | | return "Unknown";
|
| | | }
|
| | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| Check if within trading hours |
|
| | | //| |
|
| | | //| Parameters: |
|
| | | //| startHour, endHour - 0..23, end exclusive, wrapping allowed |
|
| | | //| gmtOffset - hours to shift the GMT window by |
|
| | | //| |
|
2026-10-16 21:48:01 +03:00 | | | //| The window is in GMT, via Sessions.mqh, not raw broker server |
|
| | | //| time: on a GMT+3 broker IsWithinTradingHours(8, 17) means |
|
| | | //| 08:00-17:00 GMT, which is 11:00-20:00 on the broker clock. Do not |
|
| | | //| pass the broker's own offset as gmtOffset to compensate. |
|
StopFirst 1.00, the read-only core
Fourteen headers, a header-only MQL5 library: lot size from risk, pips on
forex, gold and indices, broker checks, bars and candle patterns, cached ATR,
sessions in GMT, account risk, symbol suffixes, a calendar filter. Sends no
trade requests. Plus the LotByRisk example script.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 21:40:34 +03:00 | | | //| |
|
| | | //| In the Strategy Tester the offset cannot be measured, so call |
|
| | | //| SetGmtOffset() in OnInit or this silently assumes GMT+0. See |
|
| | | //| Sessions.mqh. |
|
| | | //| |
|
| | | //| Returns: true if the current GMT hour, shifted by gmtOffset, |
|
| | | //| falls in [startHour, endHour). Windows wrapping past |
|
| | | //| midnight, such as 22 to 6, are handled. false for |
|
| | | //| out-of-range hours. |
|
| | | //+------------------------------------------------------------------+
|
| | | bool IsWithinTradingHours(int startHour, int endHour, int gmtOffset = 0)
|
| | | {
|
| | | if(startHour < 0 || startHour > 23 || endHour < 0 || endHour > 23)
|
| | | return false;
|
| | |
|
2026-10-16 21:48:01 +03:00 | | | //--- the base is the broker clock converted to GMT,
|
StopFirst 1.00, the read-only core
Fourteen headers, a header-only MQL5 library: lot size from risk, pips on
forex, gold and indices, broker checks, bars and candle patterns, cached ATR,
sessions in GMT, account risk, symbol suffixes, a calendar filter. Sends no
trade requests. Plus the LotByRisk example script.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 21:40:34 +03:00 | | | //--- not the broker clock itself
|
| | | int currentHour = ((CurrentGmtHour() + gmtOffset) % 24 + 24) % 24;
|
| | |
|
| | | if(startHour <= endHour)
|
| | | return (currentHour >= startHour && currentHour < endHour);
|
| | | else
|
| | | return (currentHour >= startHour || currentHour < endHour);
|
| | | }
|
| | |
|
| | | #endif // STOPFIRST_TIME_MQH
|
| | | //+------------------------------------------------------------------+
|