Автор |
Сообщение |
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
Пробую наладить двухстороннюю связь между Ami и Quik:
1. Получать данные по из таблиц Quik по открытым позициям, ценам лимитных и стоп-заявок через плагин ODBCa.dll;
2. Отправлять тразакции через Trans2QUIK.dll.
Если по п.1 вопрос решен положительно, то по п.2 в сети ничего не нашел.
На выходных состряпал плагин для отправки транзакций из Ami в Quik.
Старался ничего не выдумывать, просто передавать параметры из Ami в функции библиотеки Trans2QUIK.dll и возвращать коды ошибок чтобы не особо заморачиваться с отладкой кода.
Вроде работает.
Хотелось бы услышать от Вас о выявленных багах, особенностях использования плагина, и других подводных камнях, выявленных при тестировании.
Новая версия плагина 1.1.1: |
Последний раз редактировалось: MOAX (Пн Ноя 28, 2011 4:33 pm), всего редактировалось 3 раз(а) |
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Очень интересно Спасибо за плагин, буду тестить как закончу с дописыванием системы |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
ZDN
Зарегистрирован: 13.01.2011
Сообщения: 27
Откуда: Severodvinsk
|
Просто сказка! Спасибо! Будем тестировать. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
vito333
Зарегистрирован: 18.09.2011
Сообщения: 6
|
zadun писал(а): |
Просто сказка! Спасибо! Будем тестировать. |
ну и? протестировали? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
spitfire
Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow
|
Неа Я пока полностью удовлетворен работой своего робота. Если понадобится быстрее/функциональней то буду смотреть в сторону Stock# |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
Так получилось, что периодически приходят письма по поводу работы с плагином и ODBC, а я эту тему забросил.
Исправляюсь.
Выложил новую версию плагина 1.1.1.
В новую версию плагина добавлены функции для работы с ODBC.
Спрашивается - для чего?
Внутренне представление чисел в AmiBroker - float, т.е. число с плавающей точкой одинарной точности.
Номера ордеров в Quik (возвращаемые через Trans2Quik API или через экспорт в базу данных по ODBC - double, т.е. число с плавающей точкой двойной точности.
При преобразовании из double к float теряются три значащие цифры номера ордера.
Получается что используя плагины ODBCa и предыдущую версию AmiTrans2Quik нормальный учет ордеров невозможен. |
Последний раз редактировалось: MOAX (Пн Ноя 28, 2011 4:34 pm), всего редактировалось 2 раз(а) |
|
Посмотреть профиль Отправить личное сообщение |
|
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
Для построения робота с обратной связью по ODBC необходимо из Quik экспортировать таблицы сделок, заявок, стоп-заявок и позиций по клиентским счетам в базу данных примерно в следующем виде: |
Последний раз редактировалось: MOAX (Вс Ноя 27, 2011 10:04 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
Пример работоспособного робота, использующего AmiTrans2Quik и обратную связь по ODBC во вложении: |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
Соответствие экспортируемых полей между таблицами Quik и полями в файле odbc.mdb:
Из Таблицы позиций по клиентским счетам в таблицу Futures экспортируем столбцы:
Фирма - sFirm;
Тип - sType;
Торговый счет - sAccount;
Код инструмента - sTicker;
Тек. чист. поз. - iTotalNet;
Активная покупка - iActiveLong;
Активная продажа - iActiveShort;
Вариационная маржа - dVarMargin;
Стоимость позиций - dPosValue.
Из таблицы Сделок в таблицу Trades экспортируем:
Код бумаги - sTicker;
Время - sTime;
Операция - sOperation;
Цена - dPrice;
Количество - iQuantity;
Номер - dNumber;
Заявка - dOrder.
Из таблицы заявок в таблицу Orders экспортируем:
Код бумаги - sTicker;
Код класса - sClass;
Выставлена (время) - sTime;
Операция - sOperation;
Цена - dPrice;
Количество - iQuantity;
Остаток - iBalance;
Состояние - sStatus;
Номер - dNumber;
ID транзакции - iTransID.
Из таблицы стоп-заявок в таблицу StopOrders экспортируем:
Код бумаги - sTicker;
Дата - sDate;
Время - sTime;
Тип стоп-заявки - sType;
Операция - sOperation;
Стоп-лимит цена - dCondPrice;
Стоп-цена - dCondPrice2;
Цена - dPrice;
Количество - iQuantity;
Активное количество - iBalance;
Состояние - sStatus;
Номер - dNumber;
ID транзакции - iTransID;
Номер заявки - dOrderNumber;
Сервер - sServer. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
zxWizard
Зарегистрирован: 25.09.2011
Сообщения: 46
|
MOAX Спасибо большое!
Но в архиве AmiTrans2Quik 1.1.1 лежит QUIK2AMIBROKER_DataPlugin.dll
квиковский штатный плагин! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
zxWizard писал(а): |
MOAX Спасибо большое!
Но в архиве AmiTrans2Quik 1.1.1 лежит QUIK2AMIBROKER_DataPlugin.dll
квиковский штатный плагин! |
Не досмотрел, залил по новой, пробуйте. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
Народ, что-то получается или непонятки возникают? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
zxWizard
Зарегистрирован: 25.09.2011
Сообщения: 46
|
MOAX писал(а): |
Народ, что-то получается или непонятки возникают? |
Все получилось! плагин просто чудо все необходимые функции включает в себя! Работает на ура! MOAX огромный респект!
От себя хочу добавить к приложенной инструкции к плагину для тех кто в будущем его будет использовать: При настройке экспорта таблиц из квика через ODBC ставьте галку «Формальные Имена» иначе статус заявки выводится русскими буквами и есть проблемы со считыванием в Ами.
MOAX есть вопрос : я сейчас задумал сделать в Ами расчет средней цены позиции (для моей системы это важно), у тебя не было подобных задач? может есть подобный код с учетом функций твоего плагина?
Я так понял это можно сделать как-то не сложно с помощью SQL запроса чтобы на выходе получить массив данных(из таблицы Trades), но в SQL не селен сейчас пытаюсь разобраться или это все же лучше сделать через цикл с построчным считыванием…? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MOAX
Зарегистрирован: 13.03.2011
Сообщения: 44
|
zxWizard писал(а): |
1) я сейчас задумал сделать в Ами расчет средней цены позиции (для моей системы это важно), у тебя не было подобных задач? может есть подобный код с учетом функций твоего плагина?
2) Я так понял это можно сделать как-то не сложно с помощью SQL запроса чтобы на выходе получить массив данных(из таблицы Trades), но в SQL не селен сейчас пытаюсь разобраться или это все же лучше сделать через цикл с построчным считыванием…? |
1) Сделал сделку - запомни цену открытия используя номер заявки:
Код: |
sQuery = "SELECT dPrice FROM Trades WHERE dOrder = " + sOrder + ";";
|
и т.д.
2) Плагин массив не возвращает, только число или строку за один запрос.
Плагин ODBC возвращает массив только когда ключем для выборки является поле DATE/TIME, т.е для котировок.
Я думаю, что другие типы массивов в AFL не поддерживаются и как с ними работать не понятно (Может стоит у Олега уточнить) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
zxWizard
Зарегистрирован: 25.09.2011
Сообщения: 46
|
Не буду усложнять пойду этим путем:
Код: |
1) Сделал сделку - запомни цену открытия используя номер заявки:
sQuery = "SELECT dPrice FROM Trades WHERE dOrder = " + sOrder + ";";
|
Просто у меня на данный момент робот используется только на закрытие сделки, а открываюсь ручками с докупками по тренду от этого и задача такая.
MOAX Спасибо за поддержку! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|