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



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

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

Здравствуйте Уважаемые знатоки.

Вопрос связи QUIK с Ami через ODBC.

Схема следующая QUIK->Access->AmiBroker.
Экспортируем в Access таблицы всех сделок.
Нужно получить таблицу с O,H,L,C,V.
Как это можно сделать?

Пока вижу только один вариант:

Запрос1: выделяет из таблицы всех сделок , соответствующие поля (O,H,C,L,V) по времени.
Запрос2: создает таблицу в которую записывается результат запроса1.
Написать программу к.т. запускает запрос2 ежесекундно.

Проблемы этого решения:
Запрос1 – access выполняет довольно долго (так как много подзапросов).
Запрос2 – каждый раз создавать таблицу (и удалать предыдущую) тоже плохо сказывается на быстроте. (даже добавление думаю будет тормозить)


Необходимо:
1) Быстрота (поэтому DDE - не подходит)
2) Файловый СУБД простой для пользователя (поэтому access)

Поделитесь опытом!!!
Посмотреть профиль Отправить личное сообщение
VIt



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

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

Кстати, кто может подскажет. Как увеличить количество баров?
Т.е. подключаюсь к базе и количество баров получается равным количеству данных из этой базы. (BarCount=x). Как увеличить BarCount программно???

..........

И еще вопрос
Как работать с массивами?
Может надо как то создать?
Пишу
X[1]=1;-нормально
X[100]=1;-нормально
X[1000]=1;-ругается
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Цитата:

Кстати, кто может подскажет. Как увеличить количество баров?
Т.е. подключаюсь к базе и количество баров получается равным количеству данных из этой базы. (BarCount=x). Как увеличить BarCount программно???

Никак. BarCount всегда равен числу баров бумаги.
Цитата:

И еще вопрос
Как работать с массивами?
Может надо как то создать?
Пишу
X[1]=1;-нормально
X[100]=1;-нормально
X[1000]=1;-ругается

Все правильно. Если ругается значит в базе меньше 1000 баров и массив X короче 1000

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
VIt



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

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

Спасибо за ответ.
А можно ли создать массив, который был бы больше чем количество баров?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

В AFL нельзя. Можно в AFL сделать вставку на Жабе или Бейсике и там создать нужный массив и с ним работать.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
VIt



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

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

Как все сложно!!!
Олег, спасибо, что помогаете разобраться.
Прошу еще помощи.

Допустим у меня 1000 баров, и мне надо построить прямую, от 0 до 1000.

Попробовал так:
for( i = 0; i < BarCount; i++ )
{
Graph1[i]=i;
}

Данный вариант не подходит, так как рисует прямую только на видимом графике (т.е. если график растянут от 500 до 700, то график внизу слева будет равен 0, а надо 500).
И вообще это можно сделать???
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Это особенность AFL, так называемый квик афл. Если Ами считает, что некоторые данные (как правило невидимые данные или данные не участвующие в тесте в АА) считать не нужно, то он их "пропускает". Однако можно заставить его обрабатывать все данные. Для этого используется функция SetBarsRequired()
Напиши в начале кода
Код:
SetBarsRequired(SbrAll, SbrAll);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
VIt



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

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

Заработало!!! В очередной раз спасибо!!!

Но есть еще вопрос по массивам

1290 баров.
X[199] =1; - не ругается
X[200] =1; – ругается
Как исправить?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Хм. Может сначала инициализировать массив. Типа
X = 0;

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
VIt



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

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

Написал...
Не помогло.

Поставил Ami 5.3 , ошибки вроде нет.
Работал с только что установленными программами (с бумагами к.т. идут по умолчанию ,создал новый chart):

Ami 5.4
X[200]=1; -ругается
Ami 5.3
X[200]=1; -не ругается

Как исправить, что бы в 5.4 тоже работало?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Хм. Действительно.
Используй вот такую конструкцию
Код:

if(BarCount > 300)
{
  x[300] = 1;
}

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
VIt



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

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

000 писал(а):
Хм. Действительно.
Используй вот такую конструкцию
Код:

if(BarCount > 300)
{
  x[300] = 1;
}


Заработало!!! Спасибо!!!
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen