На примере вычисления раундтрипа я хочу показать по пунктам, как начинать работу с QuikOrdersDOM SDK. Все от А до Я: создание проекта, описание структуры, некоторые функции, которые понадобятся для реализации задачи.
Программу будем писать на Delphi.
Создание нового проекта Delphi для работы с QuikOrdersDOM
Проще всего создать новый проект на основе заготовки, которую нам предлагает автор qSDK.
В архиве с приводом, который можно скачать на сайте, есть папка src, а в ней — несколько поддиректорий с примерами проектов. Создаем себе рабочую папку (я назвала ее RoundTrip) и копируем туда файлы из каталога ATLibSample.
Открываем проект в Delphi и прересохраняем его под названием RoundTrip.
Идем в настройки "Project - Options" (горячие клавиши Shift+Ctrl+F11) и там на вкладке "Directories/Conditionals" выбираем в поле "Output directory" директорию, в которую будет компилироваться наша библиотека.
Далее в меню "Run - Parameters..." в поле "Host Application" выбираем QuikOrdersDOM.exe. Сейчас после нажатия на кнопку F9 (Run) будет запускаться QuikOrdersDOM.
Нажимаем и проверяем, как все сработало. Должно все без проблем откомпилироваться и должен запуститься QuikOrdersDOM. Если у вас не запущен Quik, можно запустить его, нажав Q на форме привода.
Библиотеку пока не запускаем, нужно еще внести кое-какие изменения. Но перед этим рассмотрим основные блоки uAtLibMain.
Основные блоки модуля QuikOrdersDOM
В uAtLibMain содержится перечень функций, составляющих основную структуру (так сказать, костяк) любого модуля.
AT_LIB_INIT
function AT_LIB_INIT (T : TLibInitialRecord): Cardinal; stdcall;
Функция AT_LIB_INIT выполняется при "инициализации" модуля. Здесь самое главное — переменная T типа TLibInitialRecord. Именно через нее потом будем получать доступ ко всем функциям SDK.
Также в AT_LIB_INIT можно определять и создавать переменные и т.д.. В общем, подготовить все для работы.
AT_LIB_CYCLE
function AT_LIB_CYCLE: Cardinal ; stdcall;
То, что находится в функции AT_LIB_CYCLE, будет выполняться на каждом цикле. По сути, работа модуля и будет состоять из повторения того, что здесь написано. Количество циклов начинает считаться с момента запуска модуля.
В этой функции получаются и анализируются параметры, реализуется стратегия вашей торговли и т.д..
AT_LIB_DONE
function AT_LIB_DONE: Cardinal ; stdcall;
Функция выполняется по завершению работы модуля. В ней освобождается память, выделенная в AT_LIB_INIT, могут сохраняться какие-нибудь результаты работы, настройки и т.д.
AT_LIB_ABOUT
function AT_LIB_ABOUT: Cardinal; stdcall;
То, что происходит при нажатии на кнопку "О модуле". Здесь можно просто поместить мессадж о том, что делает ваш модуль. А можно и ничего не помещать, если он предназначен только для личного пользования.
AT_LIB_SETUP
function AT_LIB_SETUP: Cardinal ; stdcall;
В этой функции описывается то, что должно происходить при нажатии на кнопку "Настройка". Это может быть вызов формы, т.е. графический интерфейс для изменения настроек или просто для корректировки или отслеживания работы модуля.
Создаем пустую заготовку формы модуля для вычисления раундтрипа
Итак, основные блоки программы разобрали. Перейдем к модулю для вычисления раундтрипа. Из заготовки удалите юнит uEMATrading, почистите функции AT_LIB_INIT, AT_LIB_CYCLE, AT_LIB_DONE.
Далее по порядку:
1. Создаем новую форму (назовем ее frmRT), сохраняем юнит под названием uRT.
2. В uRT добавляем в uses библиотеку uATLibrary. А в глобальные переменные R типа TLibInitialRecord. У нас получится:
var
frmRT : TfrmRT;
R : TLibInitialRecord; // из этой переменной будем вызывать
// функции QuikOrderDOM SDK и получать данные
3. Переходим к uAtLibMain. В uses добавляем юнит с нашей формой uRT. И объявляем глобальную переменную fRT типа TfrmRT.
4. Прописываем следующий код в функциях:
function AT_LIB_INIT (T : TLibInitialRecord): Cardinal; stdcall;
begin
R:=T;
fRT := TfrmRT.Create(nil);
fRT.Show;
end;
function AT_LIB_DONE: Cardinal ; stdcall;
begin
fRT.Free;
end;
На этом первый этап можно считать оконченным. Проверяем, что у нас получилось. Запускаем модуль, выбираем RoundTrip.dll в качестве библиотеки автотрейдинга — и у нас сразу открывается немодальная форма (пока пустая).
Остальное — в следующих частях инструкции. Надеюсь, мои труды останутся ненапрасными и помогут вам на пути к созданию своего собственного торгового робота. :)
Комментариев нет:
Отправить комментарий