komposter, для чего нужно вылавливать люфт между локальным и серверным временем?
Какие-то косяки нашел? Объясни, плиз.
Какие-то косяки нашел? Объясни, плиз.
Slawa, Renat, не совсем понимаю - почему тему переименовали.....
Правила форума вроде бы не нарушал......
Если есть _запрещённые_ слова/символы/словосочетания (и т.д. ) прошу опубликовать их на форуме или выслать мне на komposterius собака mail.ru
с Уважением и _искренним_ непониманием происходящего........
Правила форума вроде бы не нарушал......
Если есть _запрещённые_ слова/символы/словосочетания (и т.д. ) прошу опубликовать их на форуме или выслать мне на komposterius собака mail.ru
с Уважением и _искренним_ непониманием происходящего........
Rosh 16.02.05 11:49
"Как узнать, что сервер у брокера РАБОТАЕТ ПОЛНОФУНКЦИОНАЛЬНО?"
это _один_из_вариантов использования....
Rosh 16.02.05 11:49
"Как узнать, что сервер у брокера РАБОТАЕТ ПОЛНОФУНКЦИОНАЛЬНО?"
это _один_из_вариантов использования....
Спасибо за идею.
Если нет цивилизованой возможности осуществлять контроль - можно и так. :-)
МКЛ4 еще не смотрел, думаю, рпридется с ним крепко разбираться.
Гда можно взять описание МКЛ4, что бы удобно было рспечатать?
Все понятно, komposter, для чего ты это затеял. Но тут есть парадокс - если в МТ4 и появится возможность проверять работу сервера брокера, то ты все равно этого не увидишь - потому что брокер не купит такой МТ4 :)
Все понятно, komposter, для чего ты это затеял. Но тут есть парадокс - если в МТ4 и появится возможность проверять работу сервера брокера, то ты все равно этого не увидишь - потому что брокер не купит такой МТ4 :)
Очень интересный и поучительный скрипт. Но очень важно чтобы торговый сервер и клиентский компьютер были реально синхронизированы одинаково. Я у себя запустил на домашнем компьютере и сразу же увидел стабильную разницу в 37 секунд. Пришлось синхронизироваться с тем же сервером что и торговый сервер (clock.psu.edu), после чего все встало на свои места и индикатор начал стабильно показывать 0 секунд разницы. Кстати, индикатор в состоянии также показывать и отрицательные значения когда время на клиенте выставлено впереди паровоза(сервера) или время на сервере отстает.
Какое время на торговом сервере и как часто оно синхронизируется - это зависит от администраторов системы. Если ночью на совершенно спокойном рынке постоянно видите значение 2 сек, то это ни в коем случае не значит что сервер поздно выдает котировку, а лишь говорит о том, что системное время сервера отлично от клиентского ровно на 2 секунды.
Также я должен отметить, что разница, которую показывает этот индикатор, является суммой _только_ двух составляющих (время в котировке выставляет сам сервер при принятии данных извне):
1) сетевые задержки в доставке данных
2) возможные пиковые перегрузки на сервере брокера (когда компьютер не справляется с нагрузкой)
Причем в 99.9% случаев это будут сетевые задержки. Чтобы оценить сетевые задержки, дайте команду ping www.metaquotes.ru и увидите что-то такое:
Обмен пакетами с www.metaquotes.ru [66.235.184.162] по 32 байт: Ответ от 66.235.184.162: число байт=32 время=172мс TTL=118 Ответ от 66.235.184.162: число байт=32 время=171мс TTL=118 Ответ от 66.235.184.162: число байт=32 время=171мс TTL=118 Ответ от 66.235.184.162: число байт=32 время=187мс TTL=118
Я также несколько переписал индикатор, введя проверки, комментарии и зафиксировав масштаб от -3 до 10 сек.
//+------------------------------------------------------------------+
//| TimeOut.mq4 |
//| komposter |
//| mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "komposter"
#property link "mailto:komposterius@mail.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_minimum -3
#property indicator_maximum 10
#property indicator_color1 Red
//---- input parameters
extern int ExtTimeZone=3;
double ExtBuffer[];
string ExtName="TimeOut";
int ExtInitialized=false;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
//----
IndicatorShortName(ExtName);
IndicatorDigits(0);
SetIndexBuffer(0,ExtBuffer);
SetIndexStyle(0,DRAW_HISTOGRAM);
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit() { ObjectDelete (ExtName); return(0); }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
color clr=Green;
double size=15;
//---- первый запуск?
if(ExtInitialized==false)
{
//---- поищем окно индикатора
int window=WindowFind(ExtName);
if(window<0) return(-1);
//---- сконструируем метку на индикаторе
ObjectCreate(ExtName, OBJ_LABEL, window,0,0,0,0,0,0);
ObjectSet(ExtName, OBJPROP_CORNER, 0);
ObjectSet(ExtName, OBJPROP_XDISTANCE, 0);
ObjectSet(ExtName, OBJPROP_YDISTANCE, 10);
ObjectSetText(ExtName,ExtName, 15, "Arial", Green);
//---- выставим флаг инициализированности только если окно существует
ExtInitialized=true;
}
//---- замерим разницу во времени и выставим новые параметры объекта
int luft = ( LocalTime() - ExtTimeZone*3600 ) - ( CurTime() - 3600 );
if(luft>2)
{
if(luft>5) { clr=Red; size=30; }
else { clr=Yellow; size=20; }
}
ObjectSetText(ExtName,luft + " сек", size, "Arial", clr);
//---- прокрутим виртуальный "тиковый" график взад (не более 100 тиков)
for(int i = 100; i >= 0; i -- ) { ExtBuffer[i+1] = ExtBuffer[i]; }
ExtBuffer[0]=luft;
//----
return(0);
}
//+------------------------------------------------------------------+
Rosh 17.02.05 20:10
я тоже так думаю =)
в мт-3 сделать тоже самое---------------не вопрос-----------------и он всеравно пользуется спросом у ДЦ
это мне "внутренний голос" по аське шепчет =)))
в мт-3 сделать тоже самое---------------не вопрос-----------------и он всеравно пользуется спросом у ДЦ
это мне "внутренний голос" по аське шепчет =)))
Что-то не совсем понял. Вроде никто никогда не запрещал проверять качество котировок брокеров, вон некоторые даже на MTAPI пишут мониторинг котировок нескольких брокеров в поиске возможностей для арбитража.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
//+------------------------------------------------------------------+ //| TimeOut.mq4 | //| Доброжелатель, thanks to: komposter | //| mailto:komposterius@mail.ru | //+------------------------------------------------------------------+ #property copyright "Доброжелатель, thanks to: komposter" #property link "mailto:komposterius@mail.ru" #property indicator_separate_window #property indicator_minimum -1 #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Lime string name = "TimeOut"; bool first = true; int Max_TimeOut; datetime Max_TimeOut_Time; double buf0[]; double buf1[]; double SummTimeOut, Average_TimeOut; int Counted; // Часовой пояс ( для Москвы GMT_shift = 3 ) extern int GMT_shift = 3; // Кол-во отрисовываемых баров индикатора extern int DrawBars = 333; int init() { IndicatorShortName( name ); IndicatorDigits ( 3 ); SetIndexBuffer ( 0 , buf0 ); SetIndexStyle ( 0 , DRAW_HISTOGRAM ); SetIndexLabel ( 0 , "TimeOut" ); SetIndexBuffer ( 1 , buf1 ); SetIndexStyle ( 1 , DRAW_LINE ); SetIndexLabel ( 1 , "Average TimeOut" ); SetIndexEmptyValue ( 1, 0 ); for ( int i = MathMax( Bars, DrawBars ); i >= 0; i -- ) { buf0[i] = 0; buf1[i] = 0; } first = true; return(0); } int start() { if ( DrawBars > Bars && Bars > 0 ) { DrawBars = Bars - 1; } // инициализация переменных // цвет выводимой информации при значении индикатора <= 2 color _color = Lime; // размер шрифта выводимой информации при значении индикатора <= 2 double size = 13; //при первом запуске в окне индикатора создаём "текстовые метки", в которые будут выводиться результаты. if ( first == true ) { //поиск окна индикатора по имени int window = WindowFind(name); //если окно не найдено - "текстовые метки" будут созданы в окне графика if( window < 0) { window = 0; } ObjectCreate( name + "_1", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_1", OBJPROP_CORNER, 0); ObjectSet( name + "_1", OBJPROP_XDISTANCE, 0); ObjectSet( name + "_1", OBJPROP_YDISTANCE, 12); ObjectSetText( name + "_1", "Последняя котировка: ", 13, "Arial", White); ObjectCreate( name + "_2", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_2", OBJPROP_CORNER, 0); ObjectSet( name + "_2", OBJPROP_XDISTANCE, 0); ObjectSet( name + "_2", OBJPROP_YDISTANCE, 34); ObjectSetText( name + "_2", "Последняя задержка: ", 13, "Arial", White); ObjectCreate( name + "_3", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_3", OBJPROP_CORNER, 0); ObjectSet( name + "_3", OBJPROP_XDISTANCE, 0); ObjectSet( name + "_3", OBJPROP_YDISTANCE, 57); ObjectSetText( name + "_3", "Макс. задержка: ", 13, "Arial", White); ObjectCreate( name + "_4", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_4", OBJPROP_CORNER, 0); ObjectSet( name + "_4", OBJPROP_XDISTANCE, 0); ObjectSet( name + "_4", OBJPROP_YDISTANCE, 72); ObjectSetText( name + "_4", "Средняя задержка: ", 13, "Arial", White); ObjectCreate( name + "_1_1", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_1_1", OBJPROP_CORNER, 0); ObjectSet( name + "_1_1", OBJPROP_XDISTANCE, 180); ObjectSet( name + "_1_1", OBJPROP_YDISTANCE, 12); ObjectSetText( name + "_1_1", "", 13, "Arial", Red); ObjectCreate( name + "_2_1", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_2_1", OBJPROP_CORNER, 0); ObjectSet( name + "_2_1", OBJPROP_XDISTANCE, 180); ObjectSet( name + "_2_1", OBJPROP_YDISTANCE, 34); ObjectSetText( name + "_2_1", "", size, "Arial", _color); ObjectCreate( name + "_3_1", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_3_1", OBJPROP_CORNER, 0); ObjectSet( name + "_3_1", OBJPROP_XDISTANCE, 180); ObjectSet( name + "_3_1", OBJPROP_YDISTANCE, 57); ObjectSetText( name + "_3_1", "", 13, "Arial", Red); ObjectCreate( name + "_4_1", OBJ_LABEL, window,0,0,0,0,0,0); ObjectSet( name + "_4_1", OBJPROP_CORNER, 0); ObjectSet( name + "_4_1", OBJPROP_XDISTANCE, 180); ObjectSet( name + "_4_1", OBJPROP_YDISTANCE, 72); ObjectSetText( name + "_4_1", "", 13, "Arial", Red); for ( int u = Bars-1; u >= 0; u -- ) { buf0[u] = 0; buf1[u] = 0; } first = false; return(0); } //производим подсчёты // - задержка котировки int luft = ( LocalTime() - GMT_shift*3600 ) - ( CurTime() - 3600 ); // - время и значение максимальной задержки if ( Max_TimeOut <= luft || Max_TimeOut == 0 ) { Max_TimeOut = luft; Max_TimeOut_Time = CurTime(); } // - общая задержка SummTimeOut += luft; // - кол-во тиков Counted ++; // - средняя задержка Average_TimeOut = SummTimeOut / Counted; if ( luft > 2 ) { if ( luft < 5 ) // цвет и размер шрифта выводимой информации при значении индикатора от 2 до 5 { _color = Yellow; size = 15; } else // цвет и размер шрифта выводимой информации при значении индикатора >= 5 { _color = Red; size = 20; } } // изображение на графике - одна свеча соответствует одному тику // хранятся последние DrawBars тиков for ( int i = DrawBars; i >= 0; i -- ) { buf0[i+1] = buf0[i]; buf1[i+1] = buf1[i]; } buf0[0] = luft; buf1[0] = Average_TimeOut; // вывод информации в "текстовые метки" ObjectSetText( name + "_1_1", TimeToStr( CurTime(), TIME_SECONDS ), 13, "Arial", Lime); ObjectSetText( name + "_2_1", luft + " сек", size, "Arial", _color); ObjectSetText( name + "_3_1", Max_TimeOut + " сек" + " ( " + TimeToStr( Max_TimeOut_Time, TIME_SECONDS ) + " )", 13, "Arial", Lime); ObjectSetText( name + "_4_1", DoubleToStr( Average_TimeOut, 3 ) + " сек" + " ( за " + Counted + " тик(-а, -ов) )", 13, "Arial", Lime); return(0); } int deinit() { // при деинициализации - удаляем созданные "текстовые метки" ObjectDelete ( name ); ObjectDelete ( name + "_1" ); ObjectDelete ( name + "_2" ); ObjectDelete ( name + "_3" ); ObjectDelete ( name + "_4" ); ObjectDelete ( name + "_1_1" ); ObjectDelete ( name + "_2_1" ); ObjectDelete ( name + "_3_1" ); ObjectDelete ( name + "_4_1" ); return(0); }