Блог им. Burger

Роботы на VB (Excel)

Использую для рутинных операций робота, написанного в Excel под Альфу.
Поскольку пока трейдинг не является моим единственным источником дохода
встал вопрос удалённого управления роботом и через него терминалом, т.к.
войти под одним логином с разных компов нельзя — первое соединение
терминалится.
Для реализации удалённого управления в Excel завёл источник данных —
html-страничку, т.к. у меня есть свой домен.
Собственно «страничка» — это лишь буквенно-цифровой код из 10 символов,
который забирает Excel через «Подключение к источнику данных».
Дальше робот этот код «разбирает» на команды.
Для ввода кода написал простую html+php форму, которая сохраняет
управляющик код в страничку. Так что можно даже с телефона ввести
новую настройку робота.
Но столкнулся с проблемой, что при частом рефреше «Подключения» в Excel
выпадают ошибки:
Роботы на VB (Excel)
или
Роботы на VB (Excel)
Что завешивает робот.
Посоветуйте как перехватывать такие ошибки в Execl?
★5
25 комментариев
Наши руки не для скуки…
avatar
Месье знает толк в извращениях…
avatar
Привет!
Извини, что не совсем по теме поста.
А данные от экселя нормально передаются?
Если не сложно, то не поделишься файлом?
Если там какое-то ноу-хау, то во сколько его оценишь?)
Ковырял образец альфовский, но у меня что-то так и не заработало.
Спасибо!
avatar
krolix, Альфовский образец вполне адекватный, его можно
переделать на свой лад. Правда у них вроде 2 примера есть:
— один позволяет получить инфу по структуре API
— второй полноценный робот на пересечениях средних
Который имеется ввиду?
avatar
Андрей Кучумов, помнится, назывался alfa_trade_v006 (1 скорее всего).

Система своя, экспорт котировок из терминала настроил, вычисления тоже. Не понял, как можно там сделки совершать по результатам закрытия часовиков.

Второй вроде тоже видел, но там, кажется, только зашитые алгоритмы захода в сделки, которые даром не нужны.
avatar
krolix, да, alfa_trade_v006 не только для «тренировки» подойдёт.
Доработать можно почти как угодно для позиционной торговли.
А для высокочастотников Альфа в принципе не вариант, как брокер.
avatar
про Threading почитайте
avatar
AndreiSk, раньше это VSTO называлось, сейчас есть спец. тип проекта Эксель в Visual Studio. Там можно на любом языке все что угодно написать, включая MultiTreading Приложение.
avatar
вводите событие он error goto и опять сначала
avatar
Evg_gg_gg, у него при этом весь стек переполнится от эксепшенов. Ему надо написать полноценное хотя бы 2-х поточное приложение.
avatar
_sg_, хотите сказать перехват только «нужных» ошибок реализовать
нельзя, только всех?
Собственно мне обработчик ошибкио не нужен, по логике
ошибка возникает, когда не успел обновится старый запрос,
а уже по таймеру поступил новый запрос. Поэтому мне главное,
не обработать, а переждать, и чтобы робот не прерывался
фатально…
avatar
Мне трудно судить «издалека» что у Вас там происходит. На мой взгляд у Вас робот обрабатывает что-то и обновляет данные в ячейках в фоновом режиме. В это время извне приходит запрос на изменение каких-то параметров его (робота) работы. Это происходит во время обновления данных. Эксель Вам выдает ошибку. Следовательно, необходимо разнести эти операции по разным потокам: Один поток обрабатывает и обновляет информацию. Другой поток «слушает» и обрабатывает внешние запросы.
avatar
_sg_, в целом примерно так, только обновляется лишь одна ячейка,
из которой забирается значение управляющего сигнала,
после выполнения рефреша. Но видимо Excel лишь запускает
рефрешь, но не ждёт результата исполнения, а программа
сразу же пытается обсчитывать принятые данные…
Иногда рефрешь либо из-за инета, либо ещё по какой причине
«тормозит» и тогда возникает коллизия обращения к «занятым»
данным.
avatar
То есть Вы в цикле сначала делаете Refresh, а потом пытаетесь читать обновляемую ячейку в этом же цикле?
Это неправильно. Нужно написать обработчик события не помню как точно называется в Экселе по-моему OnChanged. Это обработчик будет вызываться когда значение в ячейке уже изменилось, то есть когда получен новый Ваш Код в результате Refresh'a. То есть Вы в цикле делаете ТОЛЬКО Refresh + Задержка. При этом в ячейку записывается Код. Но Читаете этот Код из ячейки по событию «OnChanged» в обработчике этого события, а не в цикле в котором Refresh.
avatar
_sg_, Если Refresh делает сам Эксель по таймеру, тогда Вам необходимо написать только обработчик события «OnChanged», в котором и будете читать Ваш код.
avatar
_sg_, разве Excel умеет «ловить» события? Вроде это особеннось C.
avatar
Ну Вы даете. Прогуглите про события в Екселе. Думаю найдете килограммы Примеров. А Я вначале думал, что у Вас там навороченная система, хотел Вас нацелить на VSTO, потоки итд. Теперь понятно, что в данном случае это не нужно.
avatar
_sg_, :) Робот же не миллионными позами рулит, пока… зачем так заморачиваться…
avatar
_sg_, но идею с проверкой изменения стоит потестить
avatar
Почему удаленку не юзаешь?
avatar
EAGor, в смысле? Софт типа RAdmin?
avatar
Андрей Кучумов, или mstsc
avatar
EAGor, у меня есть бесплатный TeamViewer, правда нельзя разрывать сессию… Но в целом это не лучший вариант,
когда трафик лимитированный.
avatar

теги блога Андрей Кучумов

....все тэги



UPDONW
Новый дизайн