Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 AmiTrans2Quik AFL Plug-in Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
mamen



Зарегистрирован: 29.11.2011
Сообщения: 8

СообщениеДобавлено: Чт Дек 01, 2011 12:37 am Ответить с цитатой Вернуться к началу

У меня еще такой вопрос почему atqOdbcConnect всегда выдает 0? почему нет ошибки?
Посмотреть профиль Отправить личное сообщение
MOAX



Зарегистрирован: 13.03.2011
Сообщения: 44

СообщениеДобавлено: Чт Дек 01, 2011 5:28 pm Ответить с цитатой Вернуться к началу

mamen писал(а):


Именно системный DNS а не пользовательский?
пробовал указывать DNS тоже к сожалению ничего! при всем при этом используя плагин ODBC получается установить соединение и посылать SQL запросы! Правда не все запросы проходят,возможно я в SQL слабоват!


Ну, даже не знаю чем помочь. У меня все работает.
Проверьте все и попробуйте подключиться к БД с DSN еще раз.
Посмотреть профиль Отправить личное сообщение
mamen



Зарегистрирован: 29.11.2011
Сообщения: 8

СообщениеДобавлено: Чт Дек 01, 2011 6:13 pm Ответить с цитатой Вернуться к началу

можешь подробнее описать принцип работы ф-ии atqOdbcConnect ? напиши пожалуйста что в какой последовательности делать что бы произошло подключение к db!
Посмотреть профиль Отправить личное сообщение
MOAX



Зарегистрирован: 13.03.2011
Сообщения: 44

СообщениеДобавлено: Чт Дек 01, 2011 8:44 pm Ответить с цитатой Вернуться к началу

mamen писал(а):
можешь подробнее описать принцип работы ф-ии atqOdbcConnect ? напиши пожалуйста что в какой последовательности делать что бы произошло подключение к db!


1) В меню Пуск->Администрирование ->Источники данных ODBC создаешь системный источник данных, присваиваешь ему имя (DSN).

2) Настраиваешь вывод из Quik по ODBC таблиц позиций по фьючерсам, таблицы заявок, стоп-заявок, сделок в базу данных.
Открываешь базу данных и проверяешь что данные в нее действительно передаются из Quik. Читай справку Quik.

3) В Ами подключаешься к базе данных функцией atqOdbcConnect( "YouDSN", "", "" )

Все.

PS. atqOdbcConnect реализует стандартный набор действий из библиотеки odbc32.dll, если интересуют подробности - смотри MSDN, или справку к среде разработки.
Посмотреть профиль Отправить личное сообщение
mamen



Зарегистрирован: 29.11.2011
Сообщения: 8

СообщениеДобавлено: Пт Дек 02, 2011 11:42 pm Ответить с цитатой Вернуться к началу

Я все так же делаю. Пытался данные получать из базы посредствам ODBC/SQL Universal AFL plugin. там тоже есть поблемы.

odbcOpenDatabase("ODBC;DSN=QuikDB;DBQ=C:\odbc.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5");
Graph1=odbcGetValueSQL("SELECT nMoney FROM tAccount WHERE sAccount= 'SPBFUT00115';");

AddTextColumn(NumToStr( Graph1, 1.2 ), "odbc ", 1.2, colorDefault, colorWhite);

Вообщем к базе подключается! По запросу выдергивает данные. НО все работает нормально с первой таблицей. Из остальных таблиц данные не достает. почему не знаю! Есть мысли что у меня с Access? Что можно еще сделать? подскажите какие еще возможны варианты передачи данных из Quik в Ami?
Посмотреть профиль Отправить личное сообщение
mamen



Зарегистрирован: 29.11.2011
Сообщения: 8

СообщениеДобавлено: Сб Дек 03, 2011 1:35 am Ответить с цитатой Вернуться к началу

может есть проблема с x64? может плагин не корректно работать?
у меня x64 и Windows 7 стоит!
Посмотреть профиль Отправить личное сообщение
MOAX



Зарегистрирован: 13.03.2011
Сообщения: 44

СообщениеДобавлено: Сб Дек 03, 2011 11:38 am Ответить с цитатой Вернуться к началу

mamen писал(а):
может есть проблема с x64? может плагин не корректно работать?
у меня x64 и Windows 7 стоит!


У меня тоже 7, но х32, проверить негде.

Попробуй робота DDE -> Excel от spitfire

PS. В среде разработки библиотеки ODBC для х64 не нашел.
Посмотреть профиль Отправить личное сообщение
zxWizard



Зарегистрирован: 25.09.2011
Сообщения: 46

СообщениеДобавлено: Вс Дек 04, 2011 1:18 am Ответить с цитатой Вернуться к началу

MOAX при тестировании твоего плагина обнаружил интересный момент:

Код:
Код:
dPrice= atqOdbcNum( "SELECT dPrice FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL' ;");
dNumber= atqOdbcNum("SELECT dNumber FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL' ;");
dOrder= atqOdbcNum( "SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL';");
Plot(dPrice,"\n dPrice",16,styleNoDraw|styleOwnScale);
Plot(dNumber,"\n dNumber",16,styleNoDraw|styleOwnScale);
Plot(dOrder,"\n Order",16,styleNoDraw|styleOwnScale);


Ами выдает:
Price=146,255.00 dNumber=461,426,848.00 Order=6,040,484,864.00
Хотя в базе другое значение dOrders (6040484993) и dNumber (461426846)

Посмотрел в Ами окно Data Window там переменная имеет такое значение: dOrder=6.04048e+009 получается какая-то погрешность в округлении или числа более шестизначных не поддерживаются?

Причем через StrToNum( atqOdbcNumToStr( strQuery, 0,50 )) такая же проблема...
Посмотреть профиль Отправить личное сообщение
zxWizard



Зарегистрирован: 25.09.2011
Сообщения: 46

СообщениеДобавлено: Вс Дек 04, 2011 4:04 am Ответить с цитатой Вернуться к началу

MOAX Помоги пожалуйста разобраться.
Задача прежняя проанализировать таблицу Trades и вычислить среднюю цену входа в сделку, получается мне нужно ее прочитать построчно
и если там уже есть строки после которых позиция была равна нулю их нужно игнорировать при следующем проходе.

1) Смотрим были ли сделки и запоминаем номер заявки
Код:
YesBuy= atqOdbcStr("SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'BUY' ;", 50);
YesSell= atqOdbcStr( "SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL' ;", 50);


2) Если были сделки к примеру BUY то нужно проверить следующие строчки таблицы где есть BUY а номер заявки другой
Код:
TempBuyOrder=atqOdbcStr( "SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'BUY' AND dOrder != '"+YesBuy+"' ;" ,50);


Так вот 2п. не работает переменная TempBuyOrder пустая.
Вопрос:
Можно ли в SQL запросе как условие поиска писать тот столбец по которому и идет вывод данных (dOrder != '"+YesBuy+"')
и в AFL «!=» это не равно можно ли писать так в SQL запросе?
Посмотреть профиль Отправить личное сообщение
MOAX



Зарегистрирован: 13.03.2011
Сообщения: 44

СообщениеДобавлено: Вс Дек 04, 2011 11:09 am Ответить с цитатой Вернуться к началу

zxWizard писал(а):
MOAX при тестировании твоего плагина обнаружил интересный момент:

Код:
Код:
dPrice= atqOdbcNum( "SELECT dPrice FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL' ;");
dNumber= atqOdbcNum("SELECT dNumber FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL' ;");
dOrder= atqOdbcNum( "SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL';");
Plot(dPrice,"\n dPrice",16,styleNoDraw|styleOwnScale);
Plot(dNumber,"\n dNumber",16,styleNoDraw|styleOwnScale);
Plot(dOrder,"\n Order",16,styleNoDraw|styleOwnScale);



Выше писал про проблеммы преобразования из double в float.

Посмотрите в коде робота, там используется atqOdbcNumToStr:

Код:
sQuery = "SELECT dNumber FROM Orders WHERE sStatus = 'ACTIVE' AND sTicker = '" + Name() + "';";
            sOrder = atqOdbcNumToStr( sQuery, 0, 64 );


Код:
sQuery    = "SELECT dNumber FROM Orders WHERE sStatus = 'ACTIVE' AND sOperation = '" + CodeOp + "' AND sTicker = '" + Ticker + "';";
    sOrder    = atqOdbcNumToStr( sQuery, 0, 64 );
Посмотреть профиль Отправить личное сообщение
MOAX



Зарегистрирован: 13.03.2011
Сообщения: 44

СообщениеДобавлено: Вс Дек 04, 2011 11:21 am Ответить с цитатой Вернуться к началу

zxWizard писал(а):
MOAX Помоги пожалуйста разобраться.
Задача прежняя проанализировать таблицу Trades и вычислить среднюю цену входа в сделку, получается мне нужно ее прочитать построчно
и если там уже есть строки после которых позиция была равна нулю их нужно игнорировать при следующем проходе.

1) Смотрим были ли сделки и запоминаем номер заявки
Код:
YesBuy= atqOdbcStr("SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'BUY' ;", 50);
YesSell= atqOdbcStr( "SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'SELL' ;", 50);


2) Если были сделки к примеру BUY то нужно проверить следующие строчки таблицы где есть BUY а номер заявки другой
Код:
TempBuyOrder=atqOdbcStr( "SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'BUY' AND dOrder != '"+YesBuy+"' ;" ,50);


Так вот 2п. не работает переменная TempBuyOrder пустая.
Вопрос:
Можно ли в SQL запросе как условие поиска писать тот столбец по которому и идет вывод данных (dOrder != '"+YesBuy+"')
и в AFL «!=» это не равно можно ли писать так в SQL запросе?


Тут тоже используй atqOdbcNumToStr

Определить среднюю цену - как-то не складывается картинка.
Посмотреть профиль Отправить личное сообщение
zxWizard



Зарегистрирован: 25.09.2011
Сообщения: 46

СообщениеДобавлено: Вс Дек 04, 2011 4:40 pm Ответить с цитатой Вернуться к началу

MOAX писал(а):

Тут тоже используй atqOdbcNumToStr


использую atqOdbcNumToStr
Код:

YesBuy= atqOdbcNumToStr("SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'BUY' ;",0, 50);
TempBuyOrder=atqOdbcNumToStr( "SELECT dOrder FROM Trades WHERE sTicker= '"+Name()+"' AND sOperation= 'BUY' AND dOrder != '"+YesBuy+"' ;",0 ,50);

Но все равно не получается.
То есть первую сточку по условиям находим, а как к последующим строкам обратится вот это не понятно.
То бишь что бы тоже был BUY а номер заявки другой (больше чем мы в первой команде считали).
Посмотреть профиль Отправить личное сообщение
zxWizard



Зарегистрирован: 25.09.2011
Сообщения: 46

СообщениеДобавлено: Вс Дек 04, 2011 5:32 pm Ответить с цитатой Вернуться к началу

Цитата:
То есть первую сточку по условиям находим, а как к последующим строкам обратится вот это не понятно.

Кажется, понял как это можно сделать, возможно кому то будет полезно:
Нужно в таблицу добавить столбец «счетчик» строк и запросы делать построчно…
Посмотреть профиль Отправить личное сообщение
zxWizard



Зарегистрирован: 25.09.2011
Сообщения: 46

СообщениеДобавлено: Пт Дек 09, 2011 7:20 pm Ответить с цитатой Вернуться к началу

Появилась у меня новая задача не просто считывать данные из базы, а еще и записывать их туда из Ами.

MOAX твой плагин работает только на чтение базы, пришлось с ново взглянуть на ODBC/SQL Universal AFL Plugin

Возник вопрос:
1) Если я открою базу через твой плагин atqOdbcConnect то будет ли она доступна для команд ODBC/SQL Universal AFL Plugin или нужно еще открыть командой odbcOpenDatabase( "connectstring" )?

Схема работы:
а) Через AmiTrans2Quik AFL Plug-in считываем данные из базы.
б) Делаем необходимые расчеты в Ами.
в) Сохраняем результат в базу SQL.

2) Если нужно открывать odbcOpenDatabase то перед открытием необходимо ли закрывать базу atqOdbcDisconnect для AmiTrans2Quik или они будут прекрасно работать совместно?

3) Можно ли добавить в твой плагин функцию записи в базу по типу odbcExecuteSQL( "sql statement" ) из ODBC/SQL Universal AFL Plugin?
Посмотреть профиль Отправить личное сообщение
MOAX



Зарегистрирован: 13.03.2011
Сообщения: 44

СообщениеДобавлено: Пт Дек 09, 2011 8:15 pm Ответить с цитатой Вернуться к началу

zxWizard писал(а):

MOAX твой плагин работает только на чтение базы, пришлось с ново взглянуть на ODBC/SQL Universal AFL Plugin



По моему, запросы на вставку (INSERT INTO), обновление (UPDATE) и удаление (DELETE) данных в плагине должны работать корректно.
Попробуй, расскажешь.

PS. Для общего развития - на первых порах с базой данных я пробовал работать через COM интерфейс, используя ADO, получалось.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen