BaseTrader.MartketTime, предложение~/topic/1425/basetrader_martkettime-predlozhenie/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T13:21:14Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/9742/ Кстати, поздравляю с денюхой! Успехов Спасибо большое :) 2011-07-20T20:22:03Z2011-07-20T20:22:03ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ru<div class="quote"><span class="quotetitle">EugeneP <a href="https://stocksharp.ru/posts/m/9680/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><div class="quote"><span class="quotetitle">Alexander</span><div class="innerquote"><br /></div></div><br /><br /><b><span style="color:red">Кстати, поздравляю с денюхой! Успехов [thumbup] </span></b></div></div><br /><br /><br />Спасибо большое :) [thumbup] Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9680/ Кстати, поздравляю с денюхой! Успехов 2011-07-19T10:24:38Z2011-07-19T10:24:38ZEugenePhttps://stocksharp.ru/users/603/info@stocksharp.ru<div class="quote"><span class="quotetitle">Alexander</span><div class="innerquote"><br /></div></div><br /><br /><b><span style="color:red">Кстати, поздравляю с денюхой! Успехов [thumbup] </span></b>Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9678/ 1. вот нашел сервер Name: ntp.rts.ru Address: 194.247.133.37 и моя винда даже смогла с ним ссинхрон...2011-07-19T09:41:07Z2011-07-19T09:41:07ZEugenePhttps://stocksharp.ru/users/603/info@stocksharp.ru<div class="quote"><span class="quotetitle">President <a href="https://stocksharp.ru/posts/m/9675/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />1.<br />вот нашел сервер<br />Name: ntp.rts.ru<br />Address: 194.247.133.37<br />и моя винда даже смогла с ним ссинхронизироваться<br /><br /></div></div><br /><br />pool.ntp.org юзайте. С ним вроде без проблем коннектитсяCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9676/т.о. если есть способ послать на биржу запрос и получить ответ с биржевым временем НАЧАЛА обработки ...2011-07-19T09:06:50Z2011-07-19T09:06:50ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ru<div class="quote"><span class="quotetitle">President <a href="https://stocksharp.ru/posts/m/9675/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">т.о. если есть способ послать на биржу запрос и получить ответ с биржевым временем НАЧАЛА обработки запроса и временем ЗАВЕРШЕНИЯ его обработки (например время приема заявки и время ее исполнения) то это сделать можно.<br /></div></div><br /><br />я такой способ не знаю :)<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9675/а кроме времени в Quik нет какого-нибудь биржевого времени? например, как сейчас определяется Trade....2011-07-19T08:53:54Z2011-07-19T08:53:54ZPresidenthttps://stocksharp.ru/users/510/info@stocksharp.ru<div class="quote"><span class="quotetitle">Alexander <a href="https://stocksharp.ru/posts/m/9672/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><div class="quote"><span class="quotetitle">President <a href="https://stocksharp.ru/posts/m/9670/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">а кроме времени в Quik нет какого-нибудь биржевого времени?<br />например, как сейчас определяется Trade.Time - оно разве не биржей заполняется?<br /><br />если биржей то я бы предпочел с ней и синхронизироваться. чтобы потом в моих логах было максимально возможное совпадение с биржевыми логами.<br /><br /></div></div><br /><br />Trade.Time - время сделки. Как предлагает с ним синхронизоваться? Время когда по DDE придёт сделка тоже не гарантировано.</div></div><br /><br />1.<br />вот нашел сервер<br />Name: ntp.rts.ru<br />Address: 194.247.133.37<br />и моя винда даже смогла с ним ссинхронизироваться<br /><br />2.<br />ТЕОРЕТИЧЕСКИ можно самостоятельно сделать синхронизацию по полям Trade/Order таким же способом каким происходит синхронизация с NTP серверами.<br />вот тут я нашел примерное описание "Принцип определения точного времени" <a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAABjzCee6oKBZQ_HRad30cMcxGbgRvsvhbCemA_qs38gxQ" title="http://time.in.ua/ntp.html
">http://time.in.ua/ntp.html
</a><br />т.о. если есть способ послать на биржу запрос и получить ответ с биржевым временем НАЧАЛА обработки запроса и временем ЗАВЕРШЕНИЯ его обработки (например время приема заявки и время ее исполнения) то это сделать можно.<br /><br />...<br /><br />А ведь на РТС и ММВБ время может различаться ;) с кем тогда синхронизироваться?<br />Наверное и правда лучше дать возможность возможность каждому самому указать нужный ему NTP сервер<br /><br /><br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9673/через проксю думаю не многие инет пользуют, это в основном в корпоративных сетях используют, а робот...2011-07-19T08:06:49Z2011-07-19T08:06:49ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ru<div class="quote"><span class="quotetitle">EugeneP <a href="https://stocksharp.ru/posts/m/9671/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">через проксю думаю не многие инет пользуют, это в основном в корпоративных сетях используют, а роботостроители все таки думаю в большинстве своем вольные птицы, да и с работы робота запускать - как то.. не правильно на мой взгляд. Лучше добавить в s# поддержку синхронизации через NTP, чтобы можно было ее вызывать вручную, например при запуске робота, а уж те кто за проксей пусть сами синхронизируют. Тем более обычно в корпорациях время на раб станциях уже синхронизировано</div></div><br /><br />Ну код для NTP я привёл уже давно - см. первое сообщение.<br />Кому необходимо - уже используют.<br /><br />Вариант синхронизации по запросу тоже неплохой.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9672/а кроме времени в Quik нет какого-нибудь биржевого времени? например, как сейчас определяется Trade....2011-07-19T08:05:53Z2011-07-19T08:05:53ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ru<div class="quote"><span class="quotetitle">President <a href="https://stocksharp.ru/posts/m/9670/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">а кроме времени в Quik нет какого-нибудь биржевого времени?<br />например, как сейчас определяется Trade.Time - оно разве не биржей заполняется?<br /><br />если биржей то я бы предпочел с ней и синхронизироваться. чтобы потом в моих логах было максимально возможное совпадение с биржевыми логами.<br /><br /></div></div><br /><br />Trade.Time - время сделки. Как предлагает с ним синхронизоваться? Время когда по DDE придёт сделка тоже не гарантировано.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9671/через проксю думаю не многие инет пользуют, это в основном в корпоративных сетях используют, а робот...2011-07-19T08:00:33Z2011-07-19T08:00:33ZEugenePhttps://stocksharp.ru/users/603/info@stocksharp.ruчерез проксю думаю не многие инет пользуют, это в основном в корпоративных сетях используют, а роботостроители все таки думаю в большинстве своем вольные птицы, да и с работы робота запускать - как то.. не правильно на мой взгляд. Лучше добавить в s# поддержку синхронизации через NTP, чтобы можно было ее вызывать вручную, например при запуске робота, а уж те кто за проксей пусть сами синхронизируют. Тем более обычно в корпорациях время на раб станциях уже синхронизированоCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9670/а кроме времени в Quik нет какого-нибудь биржевого времени? например, как сейчас определяется Trade....2011-07-19T07:50:52Z2011-07-19T07:50:52ZPresidenthttps://stocksharp.ru/users/510/info@stocksharp.ruа кроме времени в Quik нет какого-нибудь биржевого времени?<br />например, как сейчас определяется Trade.Time - оно разве не биржей заполняется?<br /><br />если биржей то я бы предпочел с ней и синхронизироваться. чтобы потом в моих логах было максимально возможное совпадение с биржевыми логами.<br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9668/Думаю, что вариант неплохой2011-07-19T06:59:25Z2011-07-19T06:59:31Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruДумаю, что вариант неплохойCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/9667/Начал реализовывать, но появилась сложность - для полной поддержки мы должны уметь обращаться к NTP ...2011-07-19T06:30:31Z2011-07-19T06:30:31ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruНачал реализовывать, но появилась сложность - для полной поддержки мы должны уметь обращаться к NTP серверу как через прокси, так и напрямую.<br />Что довольно проблематично. Накладывать на S# сетевые возможности не хочется.<br /><br /><br />Есть другое предложение - по умолчанию в MarketTimeOffset записывать разницу между московским временем и локальным на компьютере (но её получим через временные зоны - +3 от москвы и зоной, установленной локально). Время будет всегда браться локальное - т.е. при необходимости надо будет самому обновить время на компьютере.<br /><br />Сдаётся мне, что это довольно хороший выход, позволяющий обойти все недостатки нынешней реализации - то что либо надо самомуу устанавливать MarketTimeOffset, либо то что время берётся из Квика...Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6466/Вот, нашёл проект, он позволяет избежать проблемы с задержкой на отправку \ получение - всё учитывае...2011-03-06T16:07:39Z2011-03-06T16:07:39ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruВот, нашёл проект, он позволяет избежать проблемы с задержкой на отправку \ получение - всё учитывает.<br /><a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAACAgYUiuylrmO29oHxzVnT56uqFe6OB-NLw4Xm1Tz4aTwZ2_7rQNda8JOOCtBhwd0s" title="http://www.codeproject.com/KB/IP/ntpclient.aspx">CodeProject</a>Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6462/Вначале немного предыстории - в последнее время заметил задержки в получение времени средствами Quik...2011-03-06T14:57:06Z2011-03-06T15:48:28ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruВначале немного предыстории - в последнее время заметил задержки в получение времени средствами QuikTrader.MartketTime - в квике в ходе торгов секунды зачастую идут с задержкой 1-3 секунды, да и отсчёт идёт не каждую секунду. В общем не очень хорошо, на мой взгляд, использовать данное решение.<br /><br />Смарт, насколько я понимаю, использует время компьютера.<br /><br />Поэтому появилась идея использовать не системное время (т.к. оно может:<br />- быть не синхронизировано<br />- быть не московским,<br />....), а московское время из интернета.<br /><br />Т.е. обращаться к стандартными NTP серверам и опрашивая их получать московское время.<br /><br />Поискав в инете наткнулся на множество тем, выбрал решение отсюда как наиболее простое: <a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAAA2ekziqpglRxbXK4EiWaFCj15CYquX_8lm8rVB_EHiEH0HboIA9dOwcBQ9_KILRf_3VCTzPsew29COghLmnbhgzFbgFnjfyTMyXhxsbCTefipZzoorvnMICfgvleckuCUgJmoI9iDiJelFQ0kIcktX" title="http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/8670212a-4157-4e91-b5dd-44934ca31b9e">всемогущий MSDN</a><br /><br />Немного его отредактировал под наши нужны, получил следующее:<br /><br /><div class="code"><strong>Код</strong><div class="innercode">using System;<br />using System.Net;<br />using System.Net.Sockets;<br /><br />namespace Robots.Entities<br />{<br /> /// <summary><br /> /// Static class to receive Moscow time from a NTP server.<br /> /// </summary><br /> public static class NtpClient<br /> {<br /> /// <summary><br /> /// Gets Moscow DateTime from <paramref name="ntpServer"/>.<br /> /// </summary><br /> /// <param name="ntpServer">The hostname of the NTP server.</param><br /> /// <returns>A DateTime containing Moscow current time.</returns><br /> public static DateTime GetMoscowTime(string ntpServer = "time-a.nist.gov")<br /> {<br /> var address = Dns.GetHostEntry(ntpServer).AddressList;<br /><br /> if (address == null || address.Length == 0)<br /> throw new ArgumentException(string.Format("Could not resolve ip address from '{0}'.", ntpServer), "ntpServer");<br /><br /> var ep = new IPEndPoint(address[0], 123);<br /> return GetMoscowTime(ep);<br /> }<br /><br /> /// <summary><br /> /// Gets Moscow DateTime form <paramref name="ep"/> IPEndPoint.<br /> /// </summary><br /> /// <param name="ep">The IPEndPoint to connect to.</param><br /> /// <returns>A DateTime containing Moscow current time.</returns><br /> private static DateTime GetMoscowTime(IPEndPoint ep)<br /> {<br /> var s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);<br /> s.Connect(ep);<br /><br /> var ntpData = new byte[48]; // RFC 2030<br /> ntpData[0] = 0x1B;<br /> for (var i = 1; i < 48; i++)<br /> ntpData[i] = 0;<br /><br /> s.Send(ntpData);<br /> s.Receive(ntpData);<br /><br /> const byte offsetTransmitTime = 40;<br /> ulong intpart = 0;<br /> ulong fractpart = 0;<br /><br /> for (var i = 0; i <= 3; i++)<br /> intpart = 256 * intpart + ntpData[offsetTransmitTime + i];<br /><br /> for (var i = 4; i <= 7; i++)<br /> fractpart = 256 * fractpart + ntpData[offsetTransmitTime + i];<br /><br /> var milliseconds = (intpart * 1000 + (fractpart * 1000) / 0x100000000L);<br /> s.Close();<br /><br /> var timeSpan = TimeSpan.FromMilliseconds(milliseconds);<br /><br /> var dateTime = new DateTime(1900, 1, 1);<br /> dateTime += timeSpan;<br /><br /> var moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");<br /> var offsetAmount = moscowTimeZone.GetUtcOffset(dateTime);<br /> var networkDateTime = dateTime + offsetAmount;<br /><br /> return networkDateTime;<br /> }<br /><br /> /// <summary><br /> /// Gets TimeSpan offset.<br /> /// </summary><br /> /// <returns>Gets offset between local time and Moscow Time.</returns><br /> public static TimeSpan GetMoscowTimeOffset()<br /> {<br /> try<br /> {<br /> var moscowDateTime = GetMoscowTime();<br /> return moscowDateTime - DateTime.Now;<br /> }<br /> catch(Exception)<br /> {<br /> return new TimeSpan(0);<br /> }<br /> }<br /> }<br />}<br /></div></div><br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">NtpClient.GetMoscowTime("time.nist.gov")</div></div> возвращает текущее московское время :)<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">NtpClient.GetMoscowTimeOffset()</div></div> - смещение с московским временем.<br /><br />Предложение состоит в том, чтобы использовать данное время для определения BaseTrader.MarketTime.<br />1 раз - при инициализации получать московское время и просто подсчитать первоначальную разницу между московским временем и локальным.<br />Затем установить его в MarketTimeOffset.<br /><br /><br />Вот текущее использование, которое я сегодня добавил в моего робота:<br /><div class="code"><strong>Код</strong><div class="innercode"> public class OwnQuikTrader : QuikTrader<br /> {<br /> public OwnQuikTrader(string path, string ddeServer, string dllName) :<br /> base(path, ddeServer, dllName)<br /> {<br /> base.MarketTimeOffset = NtpClient.GetMoscowTimeOffset();<br /> }<br /><br />//...<br /><br /> public override DateTime MarketTime<br /> {<br /> get { return DateTime.Now; }<br /> }<br /> }</div></div>Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6464/Хотя, уходит время на отправку и получение запроса - поэтому результат не совсем точный, 1 секунды р...2011-03-06T15:33:31Z2011-03-06T15:33:31ZAlexanderhttps://stocksharp.ru/users/2826/info@stocksharp.ruХотя, уходит время на отправку и получение запроса - поэтому результат не совсем точный, 1 секунды разницы набегает наверное.<br />Но он всяко ближе чем через квик и доступен также из любой временной зоны.Copyright @ StockSharp Platform LLC 2010 - 2024