Получение времени сервера для QUIK.

Получение времени сервера для QUIK.
Atom
09.06.2010
HaMMeR


У меня есть такое предложение.

А почему бы не получать время сервера из Статусбара QIUK?

Если кому интерсно, у меня это уже сделанно. И работает безотказно.

C# + WinApi


Теги:


Спасибо:


1 2  >
Mikhail Sukhov

Фотография
Дата: 09.06.2010
Ответить


Выкладывай. А какую проблему это решит?

Спасибо:

HaMMeR

Фотография
Дата: 09.06.2010
Ответить


using System; using System.Diagnostics; using System.Linq; using System.Text.RegularExpressions; using ManagedWinapi.Windows;

internal static class ServerTime { //Экземпляр Статусбара private static readonly SystemWindow StatusBar;

   static ServerTime()
    {
        //Поличаем список всех процессов
        Process[] processlist = Process.GetProcesses();

       //Находим процесс QUIK
        Process infoExe = processlist.Single(process =>

(process.ProcessName == "info"));

       //Получаем обработчик окна QUIK
        var swnd = new SystemWindow(infoExe.MainWindowHandle); //

msctls_statusbar32

       //Находим Статусбар
        StatusBar = swnd.AllChildWindows.Single(window =>

(window.ClassName.Equals("msctls_statusbar32"))); }

   public static DateTime GetServerTime()
    {
        //Начальная инициализация времени сервера
        //Берем текушее время
        DateTime serverTime = DateTime.Now;
        DateTime wndSrvTime = serverTime;

       //Текст статусбара
        String srvTimeString = StatusBar.Content.LongDescription;
        try
        {
            String dateTime = "";

           //Успользуем регулярное выражение, чтобы найти время
            var regexObj = new Regex(@"\d\d:\d\d:\d\d");
            Match matchResult = regexObj.Match(srvTimeString);
            if (matchResult.Success)
            {
                dateTime = matchResult.Value;
            }

           //Успользуем регулярное выражение, чтобы найти дату
            regexObj = new Regex(@"\d\d[/.]\d\d[/.]\d\d\d\d");
            matchResult = regexObj.Match(srvTimeString);
            if (matchResult.Success)
            {
                dateTime = matchResult.Value + " " + dateTime;
            }
            wndSrvTime = DateTime.Parse(dateTime);
        }
        catch (ArgumentException)
        {
            // Syntax error in the regular expression
        }
        catch(FormatException)
        {
            //
        }

       return wndSrvTime;
    }
}
Спасибо:

HaMMeR

Фотография
Дата: 09.06.2010
Ответить


Не надо будет волноваться о синхрнизации премени компютера с временем на бирже.

А еще можно получить премя используя портфель и QPILE.

Спасибо:

takanaev

Фотография
Дата: 10.06.2010
Ответить


Так вроде QPILE-скрипт запускается каждые n секунд, думаю, не вариант.

Спасибо:

HaMMeR

Фотография
Дата: 10.06.2010
Ответить


Я согласен с вами и нашел алтернативный вариант. Который у меня безотказно работает.

Спасибо:

ddd888

Фотография
Дата: 10.06.2010
Ответить


Интересно, а какую еще информацию можно "выудить" таким образом из квика?

Спасибо:

HaMMeR

Фотография
Дата: 10.06.2010
Ответить


А что именно вам надо?

Спасибо:

ddd888

Фотография
Дата: 10.06.2010
Ответить


Если б знать, что возможно, то тогда и спрос соответствующий появился бы. :) Да вопросов возникает куча, на самом деле. Хотя бы, например, какие таблицы открыты или насколько корректно происходит обновление информации - нет ли запаздываний в приеме данных. Каков статус соединения с брокером и т.д.

Спасибо:

HaMMeR

Фотография
Дата: 10.06.2010
Ответить


Можно например получить

  • какие таблицы открыты
  • статус соединения с брокером

Да и много чего. Можно с примером поиграть. В режиме Debug постаь точку остановки и посмотри swnd.AllChildWindows, думаю найдеш мнсого чего интересного.

Спасибо:

ddd888

Фотография
Дата: 10.06.2010
Ответить


Супер! На досуге надо будет обязательно "поковыряться". :)

Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy