Вот достаточно распространённые часы.
В строке "int gmt_shift" указываем кол-во МИНУТ, на которое отколоняется от GMT ваш брокер. По умолчанию стоит 0. У меня для Альпари 1800 получается. Минус в этой строке ставить не надо.
Далее.
В строке "datetime GMT = localTime + gmt_shift * 60;" исправляем, что нам надо-вычесть или прибавить кол-во указанных в первой строке минут. Для Альпари получается вычесть, поэтому + меняем на -, получаем такую строку: "datetime GMT = localTime - gmt_shift * 60"
Далее.
Выставляем ТОЧНО время Лондона, Нью-Йорка, Токио, найдя их в яндексе. Это делаем коррекцией строк, которые идут СРАЗУ за той, которую исправляли только что:
datetime london = GMT + (LondonTZ + (dst - 1)) * 3600;
datetime tokyo = GMT + (TokyoTZ) * 3600;
datetime newyork = GMT + (NewYorkTZ + (dst - 1)) * 3600;
То, что в скобках (dst - 1), вот это исправляем. Для Альпари получаем такие строки:
datetime london = GMT + (LondonTZ + (dst + 1)) * 3600;
datetime tokyo = GMT + (TokyoTZ) * 3600;
datetime newyork = GMT + (NewYorkTZ + (dst + 1)) * 3600;
Локальное время у меня выставилось нормально без коррекции. С настройками, появляющимися при установке часов на экран всё просто. Если кто хочет, может еще в строке:
"ObjectSetText( "locl", "Local:", 10, "Arial", labelColor );" заменить "Local:" названием своего города и т.п. Часы можно установить в любой удобный угол, удаление от верха/низа также настраивается.
Так же дополнительно выложу таймер, отсчитывающий время до конца бара, а то на скрине видно, вдруг кому-то понадобится.