× Ссылка на скачивание архива: www.bot4sale.ru/download-categories/2012...6/item/amisharp.html (архив под паролем)

Актуальность содержимого таблиц

Подробнее
8 года 3 мес. назад #593 от Romant
Из квика настроен вывод двух таблиц по DDE, AmiSharp активен, в окне амишарпа обе эти таблицы выводятся.

Одна из таблиц - сделки. Соответственно, вчера она заполнялась, сегодня с утра её брокер почистил. Машина на ночь не выключалась, квик не выключался, амишарп не выключался. Сейчас в квике таблица сделок пустая, в амишарпе - со вчерашними сделками. Пересоздать эту таблицу в амишарпе нельзя - если её через меню скрыть, то она больше не покажется.

Как определить, имеет ли место быть некий косяк и в амишарпе реально неактуальные данные или же это просто GUI в окне amisharp не обновляется?

Через OLE я пока это всё не дёргал, щупаю с внешней стороны.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #594 от Romant
Ради эксперимента руками совершил одну сделку, чтобы таблица со сделками стала в квике не пустой - в амишарпе вчерашние сделки так и остались.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад - 8 года 3 мес. назад #595 от admin
Роман.

Вы можете провести следующий эксперимент.


Добавьте в таблицу текущих параметров 5 бумаг
Сделайте экспорт этой таблицы по ДДЕ в Эксель
Убедитесь, что все 5 строчек есть в экселе
Не закрывая Эксель, уберите 4 из 5 бумаг в таблице текущих параметров и снова включите экспорт по ДДЕ
Посмотрите, как выглядит таблица в экселе - там те же самые 5 строк

Таким образом, терминал quik при УМЕНЬШЕНИИ количества строк (столбцов) не дает наружу никаких сигналов об этом.

К Вашему случаю. При смене торговой даты таблица сделок очистилась, но амишарпу (как и экселю, как и любому другому ДДЕ серверу) никто об этом ничего не скажет.

Как бороться.

При смене торговой даты можно отключить ДДЕ экспорт в квике (sendkeysby.....), удалить через DeleteTable все таблицы, созданные DDE экспортом и снова включить DDE экспорт. Вместо DeleteTable можно последовательно ко всем строкам применить DeleteRow - таблица также очистится.
Последнее редактирование: 8 года 3 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #602 от Romant
Обнаружился ещё один side effect.

После посылки нажатий клавиш в квик винда переключается на на окно квика, тогда как было активным окно амиброкера.

Это как-то обходится?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #603 от admin

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #604 от Romant
Замечательно, спасибо :-)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #605 от Romant
Всё же есть косяк с таблицами...

Вот код, который я применяю для рестарта DDE и чистки существующих таблиц, как Вы рекомендовали:
amis_Object.SendKeysByClass(PathToQUIKExecutable, "^~S", "InfoClass");

// Delete all existing tables
strAmiSharpTablesList = amis_Object.ListOfTables(",");
for (i = 0; (strCurAmiSharpTable = StrExtract(strAmiSharpTablesList, i)) != ""; i++)
{
	amis_Object.DeleteTable(strCurAmiSharpTable);
	Trace(traceLog, "    Deleted table " + strCurAmiSharpTable);
}

amis_Object.SendKeysByClass(PathToQUIKExecutable, "^~L", "InfoClass");
amis_Object.ActivateWindowByClass(PathToAmiBrokerExecutable, "AmiBrokerMainFrameClass");

Код этот должен работать при смене дат, но для теста я запустил его на каждое обновление графика. Из квика настроен вывод по DDE двух таблиц, одна с параметрами по бумаге, вторая со сделками. В таблице параметров по бумаге постоянно обновляется поле "оборот", в таблице сделок ничего не меняется.

Когда код отрабатывает первый раз, в логе видно, что он удалил две таблицы. Все последующие отработки этого кода он удаляет только ту таблицу, в которой поменялись данные (оборот), таблица сделок больше не пересоздаётся.

Если же пойти в квик и руками нажать ctrl-shift-s/l, то в амишарпе появятся обе таблицы. Возможно, есть что-то на поверхности, что я делаю не так? От чего после программного рестарта DDE вторая таблица в амишарпе не видна?

Спасибо.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #606 от admin
Роман

Вот Ваш тест: 3 таблицы на экспорте - ТТП, заявки, сделки

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #607 от Romant
Этот код так же срабатывает на каждую перерисовку графика?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад - 8 года 3 мес. назад #608 от admin
На картинке Вы видите полный текст скрипта. Амброкер настроен на срабатывание на каждый тик.

Попробуйте явно задать в скрипте период обновления чарта . Скажем 5 секунд (RequestTimedRefresh) и посмотрите на результат.
Последнее редактирование: 8 года 3 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #609 от Romant
Он и так обновляется раз в секунду (через requesttimedrefresh).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад - 8 года 3 мес. назад #610 от admin
Роман, думаю, надо что-то искать в консерватории. Тест работает прекрасно. Попробуйте протрассировать вызовы амишарпа через TraceLog . Возможно, это поможет Вам найти причину.
Последнее редактирование: 8 года 3 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #611 от Romant
Вот из лога:
SendKeysByClass("C:\Program Files (x86) - Legacy\QUIK\info.exe","?H","InfoClass") = 0

вертает ноль, то есть ошибка.

Что такое "?H"? Это нормально?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #612 от Romant
ActivateWindowByClass("C:\Program Files (x86)\AmiBroker64\Broker.exe","AmiBrokerMainFrameClass") = 0

активация тоже не проходит...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад - 8 года 3 мес. назад #613 от admin
Забыл при записи трассировки в файл перевести widestring в string. Поэтому вместо ~^L в лог выводилось ?H. Ни на что не влияло, но спасибо. Поправил
Последнее редактирование: 8 года 3 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #614 от Romant
Это здорово - но пока по-прежнему непонятно, в чём может быть ошибка...

Судя по логу, не проходят операции над процессами (клавиши не шлются в quik, окно амиброкера не активируется).

Имеет ли значение ось? У меня win7 64.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #615 от admin
Роман. Пришлите мне тест минимального размера, который у Вас не работает. Все эти функции работают под win7-64 на массе компьютеров

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад - 8 года 3 мес. назад #616 от Romant
Ваш тест (на картинке) полностью идентичен тому, что делаю я.

Ещё момент...

Раз я раньше спросил про то, как активировать окно амиброкера, значит отправка клавиш тогда срабатывала (окно QUIK совершенно точно становилось активным), она почему-то перестала срабатывать впоследствии.

А нельзя в лог добавить больше информации от системных функций, которыми Вы отправляете клавиши? Код ошибки?
Последнее редактирование: 8 года 3 мес. назад пользователем Romant.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад - 8 года 3 мес. назад #617 от admin
Добавил коды возврата. Особо там добавлять-то и нечего. выслал 1.0.1.18
Последнее редактирование: 8 года 3 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
8 года 3 мес. назад #618 от Romant
Спасибо, дам знать результат.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: admin