Содержание
1.3 Настройка QUIK для импорта транзакций
1.4 Настройка QUIK для экспорта данных о состоянии портфеля
1.5 Настройка QUIK для экспорта данных о денежных средствах
Функция MSGetCurrentPortfolioFORTS
2.2 Пример. Простейший индикатор
2.3 Пример. Продажа всех бумаг из портфеля
Введение
TAutoTrader.dll – программа, предназначенная для отправки заявок из Metastock в терминал QUIK. Программа реализована в виде динамической библиотеки (.dll)
1. Оптравка заявок в QUIK. Нет ограничений на число инструментов и торговых площадок с которыми можно работать.
2. Получение текущего портфеля по бумаге. Кроме фьючерсов.
3. Ведение журнала работы
В дистрибутив входит три файла:
TAutoTrader.dll - сама программа
TAutoTrader.reg – ключи реестра
TAutoTrader.mdb – база данных
TRANS2QUIK.dll – API импорта транзакций, разработанный создателями QUIK (http://quik.ru/user/download/ )
1. Поместить файл TRANS2QUIK.dll в системную папку Windows. Для Windows 95/98 это папка windows\system. Для более поздних – windows\system32
2. Поместить файл TAutoTrader.dll в папку внешних функций Metastock. Если Metastock установлен в директорию “по умолчанию”, то полный путь к папке будет: “C:\Program Files\Equis\MetaStock\External Function DLLs”
3. Открыть для редактирования файл TAutoTrader.reg и задать пути к QUIK и файлу журнала.
ВНИМАНИЕ! Файл журнала должен существовать, создайте его сами.
ВНИМАНИЕ! Обратите внимание - пути указываются с двойными слешами
4. Выполнить файл TAutoTrader.reg
5. ОБЯЗАТЕЛЬНО перезапустить Metastock (если запущен) – иначе программа не “подхватится”, т.к Metastock загружает информацию о внешних функциях только при запуске.
Откройте панель управления (Control panel). Для этого выберите пункт меню Пуск->Настройки->Панель управления (Start->Settings->Control panel) Windows.
Запустите менеджер источников данных. Для этого зайдите в раздел Администрирование (Administrative tools) панели управления и выберите пункт Источники данных (Data sources ODBC).
На вкладке Пользовательские DSN (User DSN) нажмите кнопку Добавить (Add...)

Откроется окно выбора драйвера источника данных. Выберите драйвер Microsoft Access (как на рисунке ниже) и нажмите кнопку Finish.

Откроется окно добавления источника данных.

В поле Название источника данных (Data Source Name) напишите TAutoTrader.
В разделе База данных (Database) нажмите кнопку Выбрать (Select...) и укажите путь к файлу TAutoTrader.mdb
Нажмите кнопку OK.
Установките галочку “Запускать процесс…”, чтобы не возиться с этим каждый раз при запуске Quik и нажмите кнопку “Начать обработку”. После этого окно можно закрывать, теперь при каждом старте Quik будет включать обработку внешних транзакций автоматически.
Для того, чтобы TAutoTrader мог получать данные о состоянии портфеля в Quik необходимо организовать экспорт таблицы лимитов по бумагам через ODBC в базу данных TAutoTrader.mdb.
ВНИМАНИЕ! Прежде чем приступать к настройке экспорта данных необходимо выполнить пункт “1.2 Создание источника данных”.
Установите флажки “Чистить таблицу перед выводом” и “Вывод после создания”.
Для того, чтобы TAutoTrader мог получать данные о денежных средствах необходимо организовать экспорт таблицы “Клиентский портфель” через ODBC в базу данных TAutoTrader.mdb.
ВНИМАНИЕ! Прежде чем приступать к настройке экспорта данных необходимо выполнить пункт “1.2 Создание источника данных”.
Установите флажки “Чистить таблицу перед выводом” и “Вывод после создания”.
Программа написана таким образом, что разобраться с поддерживаемыми ей функциями будет не сложнее чем с встроенными производителем Metastock функциями – программа полностью интегрируется в него.
Если установка программы произведена правильно, то в окне списка функций (вызвать окно можно например из Indicator builder, нажав кнопку functions в редакторе формул) появится название TAutoTrader, выбор которого приведет к открытию списка поддерживаемых программой функций.

При выборе функции в нижней части окна приводится ее полное описание с указанием параметров. Расшифрофка значений параметров приводится в этом описании.
Предназначена для отправки заявок из Metastock в QUIK.
Параметры функции:
|
Название параметра |
Описание |
|
Account |
Счет, с которого выставляется заявка. Посмотреть свой счет можно в QUIK. Например, в окне выставления заявки поле “Торговый счет”. |
|
SecBoard |
Код торговой площадки. В QUIK это поле называется “Код класса”. Посмотреть можно например в таблице заявок (или сделок, или текущих параметров инструментов). |
|
SecCode |
Код инструмента. В QUIK это поле называется “Код бумаги”. Посмотреть можно например в таблице заявок (или сделок, или текущих параметров инструментов). |
|
Type |
Тип заявки. В QUIK сейчас всегда все заявки лимитированные. В поле необходимо передавать “L” |
|
Price |
Цена. |
|
Quantity |
Количество |
|
Precision |
Точность цены. (у всех бумаг разная точность – какие-то имеют точность 2 знака после запятой. Какие-то 3. у каких-то вообще нет дробной части. QUIK очень щепетильно относится к точности указания числа знаков в дробной части и не пропустит заявку с тремя знаками после запятой в цене, если установлено ограничение всего в два знака. Поэтому в этом поле необходимо передавать число знаков после запятой, установленное для инструмента, по которому выставляется заявка). Посмотреть точность цены для инструмента можно в текущей таблице параметров, поле “Точность”. |
|
BuySell |
Признак покупки или продажи. Для заявкина покупку должен быть равен 1. Для заявки на продажу равен -1. Во всех остальных случаях – ноль. |
|
ClientCode |
Идентификатор клиента |
Пример использования
ExtFml( "TAutoTrader.PushOrder", "SPBFUT00Z00", "SPBFUT", "GDH9", "L", 920.11, 1, 1,1)
Покупка одного контракта на золото на FORTS для счета SPBFUT00Z00. Обратите внимание, что поле Precision установлено в 1, тогда как в поле Price цена указана с точностью двух знаков после запятой. Лишние знаки программа отрежет автоматически, приведя формат цены в соответствие с требованием QUIK.
Предназначена для получения значения текущего портфеля по инструменту (кроме FORTS) из QUIK.
Параметры функции:
|
Название параметра |
Описание |
|
Account |
Счет, с которого выставляется заявка. Посмотреть свой счет можно в QUIK. Например, в окне выставления заявки поле “Торговый счет”. |
|
SecCode |
Код инструмента. В QUIK это поле называется “Код бумаги”. Посмотреть можно в таблице заявок (или сделок, или текущих параметров инструментов). |
|
ClientCode |
Идентификатор клиента |
Пример использования
CurrentPortfolio := ExtFml( "TAutoTrader.MSGetCurrentPortfolio","L01-00000F00" ,"FEES",”5678” );
Получение текущего количества в портфеле бумаги ФСК ЕЭС для счета L01-00000F00. Обратите внимание (ВАЖНО) – значение возвращается В БУМАГАХ (НЕ В ЛОТАХ) и для последующего использования требует коррекции на размер лота:
CurrentPortfolio := CurrentPortfolio / 100;
Предназначена для получения значения текущего портфеля по инструменту для FORTS из QUIK.
Параметры функции:
|
Название параметра |
Описание |
|
Account |
Счет, с которого выставляется заявка. Посмотреть свой счет можно в QUIK. Например, в окне выставления заявки поле “Торговый счет”. |
|
SecCode |
Код инструмента. В QUIK это поле называется “Код бумаги”. Посмотреть можно в таблице заявок (или сделок, или текущих параметров инструментов). |
Пример использования
CurrentPortfolio := ExtFml( "TAutoTrader.MSGetCurrentPortfolioFORTS","SPBFUT77Z78" ,"RIZ0" );
Получение текущего количества в портфеле фьючерса на индекс РТС для счета SPBFUT77Z78. Обратите внимание (ВАЖНО) – значение возвращается В БУМАГАХ.
Предназначена для получения значения свободных денежных редств из QUIK.
Параметры функции:
|
Название параметра |
Описание |
|
Account |
Номер счета. Посмотреть свой счет можно в QUIK. Например, в окне выставления заявки поле “Торговый счет”. |
|
ClientCode |
Идентификатор клиента |
Пример использования
CurrentPortfolio := ExtFml( "TAutoTrader.MSGetFreeMoney","L01-00000F00" ,"5678" );
Предназначена для получения значения текущей денежной оценки размера счета из QUIK (рублевая оценка открытых позиций плюс свободные денежные средства).
Параметры функции:
|
Название параметра |
Описание |
|
Account |
Номер счета. Посмотреть свой счет можно в QUIK. Например, в окне выставления заявки поле “Торговый счет”. |
|
ClientCode |
Идентификатор клиента |
Пример использования
CurrentPortfolio := ExtFml( "TAutoTrader.MSGetTotalMoney","L01-00000F00" ,"5678" );

Сначала определяется условие покупки – последний бар и пересечение снизу вверх однопериодной просто скользящей средней двухпериодной.
BS := If(Cross(Mov(C,1,S),Mov(C,2,S)) AND Year()=LastValue(Year()) AND Month()=LastValue(Month()) AND DayOfMonth()=LastValue( DayOfMonth())AND Hour()=LastValue(Hour()) AND Minute()=LastValue(Minute()),
1,0);
Затем выставляется заявка на покупку.
ExtFml( "TAutoTrader.MSPushOrder","acc" ,"secb" ,"secc" ,"L" ,20.55 ,1 ,1, LastValue(BS),”000”);

Получаем значение портфеля по бумаге.
CurrentPortfolio := ExtFml( "TAutoTrader.MSGetCurrentPortfolio","L01-00000F00" ,"SBER03",”000” );
CurrentPortfolio := CurrentPortfolio / 1; (Это преобразование можно не делать когда размер лота равен единице, естественно. В остальных случаях оно необходимо).
Отправляем заявку на продажу всех бумаг.
ExtFml( "TAutoTrader.MSPushOrder","acc" ,"secb" ,"secc" ,"L" ,20.55 , CurrentPortfolio ,1,-1,”000”);