думаю общее расхождение в серверных временах не так критична, и при оптимизации на каждом из ДЦ сгладиться.
Меня пока больше смущает не расхождение времени ДЦ с GMT (хотя это позже нужно будет сделать), а то, что используется в вычислениях функция Hour(), которая, судя по описанию языка, является не текущим временем, а временем старта программы советники - и, как написано, константой со времени старта, не изменяющейся...
Вместо неё (функции Hour()), как мне кажется, во всех местах её использования, уместно заменить на что-то типа:
1. TimeHour( TimeCurrent( ) ) - это число часов текущего времени установленного на компьютере;
или
2. TimeHour( Time ) - это число часов серверного времени последнего пришедшего тика;
или
3. TimeHour( Time[ 0 ] ) - это число часов серверного времени открытия текущего бара;
_http://docs.mql4.com/ru/predefined/variables/time :
datetime Time[] Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Данные типа datetime представляют собой время в секундах, прошедшее с 00:00 1 января 1970 года.
Это нужно бы обсудить и проверить, что лучше из ... - я пока пишу голословно ... из соображений