2017.01.13 10:00:03.210 Trades 'xxxxx': sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.216 Trades 'xxxxx': accepted buy limit 1.00 MXI-6.17 at 2230.15
2017.01.13 10:00:03.218 Trades 'xxxxx': accepted sell limit 1.00 MXI-6.17 at 2300.75
2017.01.13 10:00:03.219 Trades 'xxxxx': failed buy limit 1.00 MXI-6.17 at 2230.15 [Market closed]
2017.01.13 10:00:03.220 Trades 'xxxxx': failed sell limit 1.00 MXI-6.17 at 2300.75 [Market closed]
добавлено
Перед отсылкой ордера проверяется торговое время
//+------------------------------------------------------------------+
//| Expert Check traiding time function |
//+------------------------------------------------------------------+
bool CheckTradingTime(MqlDateTime &tick_time)
{
datetime lk_time = TimeCurrent(tick_time);
if ( ( tick_time.day_of_week == int(FirstDay)) ||
( tick_time.day_of_week == int(SecondDay)))//выходные
{
return(false);
}
#ifdef DEBUG
if ((tick_time.hour >= 0) && (tick_time.hour < 6)) // DEBUG 6-00
{
return(false);
}
#else
if ((tick_time.hour >= 0) && (tick_time.hour < 10))
{
return(false);
}
#endif
// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30
// 14 * 3600 = 50400 - 14:00:00
// 14 * 3600 + 30 = 50430 - 14:00:30
// 14 * 3600 + 60 = 50460 - 14:01:00
// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30
// 18 * 3600 + 45 * 60 = 67500 - 18:45:00
// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30
// 18 * 3600 + 46 * 60 = 67560 - 18:46:00
// 19 * 3600 = 68400 - 19:00:00
// 19 * 3600 + 60 = 68460 - 19:01:00
// 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30
// 23 * 3600 + 50 * 60 = 85800 - 23:50:00
// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30
// 23 * 3600 + 51 * 60 = 85860 - 23:51:00
//---
ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec;
//--- //10:00:02
if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
((trade_time >= time_st_day) && (trade_time < 67470)) ||
((trade_time >= time_st_evn) && (trade_time < 85770)))
{
return(true);
}
return(false);
}
ulong time_st_mon = GetStringTime(TimeStMon);
{
int k = 0;
string s_sec, s_min, s_hour;
int str_size = StringLen(a_string);
//---
if(str_size != 8) return(0);
//---
for(int i = str_size - 1; i >= 0; i--)
{
ushort let_symbol = StringGetCharacter(a_string, i);
if(let_symbol == ':')
{
k++;
switch(k)
{
case 1:
s_sec = StringSubstr(a_string, i + 1, str_size - i - 1);
break;
case 2:
s_min = StringSubstr(a_string, i + 1, str_size - i - 4);
s_hour = StringSubstr(a_string, 0, i);
break;
}
//---
}
}
if(k != 2) return(0);
ulong t_sec = ulong(StringToInteger(s_sec));
ulong t_min = ulong(StringToInteger(s_min)) * 60;
ulong t_hour = ulong(StringToInteger(s_hour)) * 3600;
//---
return(t_hour + t_min + t_sec);
}
Ребята разработчики!
Ну когда же Вы синхронизируете время терминала с временем Биржи?
2017.01.13 10:00:03.969 Trades 'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades 'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades 'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades 'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades 'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]
Тут надо понять, кто наплевал на мировое время и устанавливает своё, биржа или брокер. С корыстным интересом или просто из за своей глупости.
У кого время совпадает с мировым?
Тут надо понять, кто наплевал на мировое время и устанавливает своё, биржа или брокер. С корыстным интересом или просто из за своей глупости.
У кого время совпадает с мировым?
Да, Бог с ним, мировым, мы же торгуем на Московской Бирже, по её времени,
а виноват не брокер, а разработчики, потому что любая котировка, приходящая с Биржи,
обладает временем, следовательно время последней известной котировки и должно быть
известным временем биржи (НЕ СЕРВЕРА) и ТЕРМИНАЛА
TimeCurrent
TimeCurrent, возвращает время СЕРВЕРА, а не БИРЖИ!
Отсюда, вероятно, "и ноги растут".
Да, Бог с ним, мировым, мы же торгуем на Московской Бирже, по её времени,
а виноват не брокер, а разработчики, потому что любая котировка, приходящая с Биржи,
обладает временем, следовательно время последней известной котировки и должно быть
известным временем биржи (НЕ СЕРВЕРА) и ТЕРМИНАЛА
TimeCurrent
TimeCurrent, возвращает время СЕРВЕРА, а не БИРЖИ!
Отсюда, вероятно, "и ноги растут".
А если сервер в Москве, а биржа находится в Бразилии, такое может быть?
А если сервер в Москве, а биржа находится в Бразилии, такое может быть?
Да наплевать где сервер!
Котировка (вернее ВРЕМЯ котировки) - это и есть текущее ТОРГОВОЕ время.
Добавлено
Сейчас, происходит следущее
Сервер МТ5 просто пересылает котировку в терминал, независимости от времени самой котировки,
не сихронизируя время СЕРВЕРА со временем котировки, потому что есть премаркет.
Советник отправляет ордер, терминал утверждает её, а сервер сверяет время НЕПОНЯТНО с чем и
реджектит ордер, с погрешностью аж в 3 секунды (по времени моего компа)!!!!
Да наплевать где сервер!
Котировка (вернее ВРЕМЯ котировки) - это и есть текущее ТОРГОВОЕ время.
Добавлено
Сейчас, происходит следущее
Сервер МТ5 просто пересылает котировку в терминал, независимости от времени самой котировки,
не сихронизируя время СЕРВЕРА со временем котировки, потому что есть премаркет.
Советник отправляет ордер, терминал утверждает её, а сервер сверяет время НЕПОНЯТНО с чем и
реджектит ордер, с погрешностью аж в 3 секунды!!!!
Котировка (вернее ВРЕМЯ котировки) - это и есть текущее ТОРГОВОЕ время.
это биржевое время.
Время сервера вообще в терминал не передается: TimeLocal == TimeTradeServer.
Меня тоже задолбала эта проблема. На форуме неоднократно возникала такая тема. Каждый решает эту проблему по своему, но правильного решения я не видел. Надо определиться как правильно и настоятельно просить разработчиков исправить.
Сейчас существует три функции получения времени (если память не изменяет) это:
TimeLocal == TimeTradeServer, время компьютера,
TimeTradeServer == никчемная функция,
TimeCurrent == время последней котировки.
Нужно добавить время биржы, выкинуть TimeTradeServer или вместо него передавать текущее время биржи, или добавить типа TimeExchange.
А лучше всего было бы получать в терминал конкретные данные не заморачиваясь на времени:
- Можно выставлять новые заявки,
- Можно удалять заявки,
- Торговля разрешена.
Почему то сейчас в терминале такой функционал отсутствует.
Нужно добавить время биржы, выкинуть TimeTradeServer или вместо него передавать текущее время биржи, или добавить типа TimeExchange.
Все таки это не выход для нашей биржи, не знаю как на других.
Они когда захотят тогда и включают торги, бывает и в 10:00, бывает 10:03 или 10:05.
Видимо как проспятся, кофе попьют - тогда и включают ))
Серёж!
Прочти справку по TimeCurrent - там написано, что это время СЕРВЕРА
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ребята разработчики!
Ну когда же Вы синхронизируете время терминала с временем Биржи?
2017.01.13 10:00:03.969 Trades 'xxxxx': sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.975 Trades 'xxxxx': accepted buy limit 2.00 ED-6.17 at 1.0642
2017.01.13 10:00:03.975 Trades 'xxxxx': accepted sell limit 1.00 ED-6.17 at 1.0813
2017.01.13 10:00:03.978 Trades 'xxxxx': failed buy limit 2.00 ED-6.17 at 1.0642 [Market closed]
2017.01.13 10:00:03.979 Trades 'xxxxx': failed sell limit 1.00 ED-6.17 at 1.0813 [Market closed]