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


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

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

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

C# + WinApi

Теги:


Спасибо:




14 Ответов
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
Ответить


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

Спасибо:

takanaev

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


Сейчас если открыта закладка, в которой нет таблицы экспорта (они в
другой закладке), то возникает ошибка.
Очень полезно будет создать механизм открытия той закладки, которая
необходима типа new QuikTrader(quikPath, zakladkaName, ddeServer,
dllName);

Спасибо:

HaMMeR

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


Какая закладка?
Вы имейте ввиду закладка в QIUK-е , они в принцыпе фальшивые и не
имеет значение какя закладка выбрана.
Какую именно ошибка у вас вазникает?

Автор топика
Спасибо:

E G

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


В вашем примере используется директива using ManagedWinapi.Windows

Я что-то не могу найти библиотек такую, не подскажите где ее можно
скачать?

Спасибо:

E G

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


Все нашел, спасибо.

Спасибо:


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

loading
clippy