Варианты улучшения МТС

leokon

New member
Народ на форуме крутой. Так что неудобно простые вопросы задавать. Но попробую.

Пишу интрадейного робота. КВИК - EXEL - КВИК. В EXELе использую VBA. Сделал программный таймер, управляющий сбором данных из таблиц, но он жрет много процессорного времени. Иногда система затыкается.
1. Есть ли в VBA экономный n-секундный таймер?
2. Есть ли возможность на "простанавливать" работу программы VBA, чтобы дать запас для решения других задач?
 

mehanizator1

New member
Народ на форуме крутой. Так что неудобно простые вопросы задавать. Но попробую.

Пишу интрадейного робота. КВИК - EXEL - КВИК. В EXELе использую VBA. Сделал программный таймер, управляющий сбором данных из таблиц, но он жрет много процессорного времени. Иногда система затыкается.
1. Есть ли в VBA экономный n-секундный таймер?
2. Есть ли возможность на "простанавливать" работу программы VBA, чтобы дать запас для решения других задач?
а нахрена таймер? просто все засовываешь в обработчик события обновления таблицы данных. у меня тоже почти все на экселе, проц не грузится совсем.
 

leokon

New member
а нахрена таймер? просто все засовываешь в обработчик события обновления таблицы данных. у меня тоже почти все на экселе, проц не грузится совсем.
"обработчик события обновления таблицы данных" - красиво звучит, но для меня непонятно. Можно дать пояснения? Спасибо.
PS "проц не грузится совсем" -?
 

leokon

New member
Существует ли в VBA стандартная процедура вычисления скользящего среднего? Я написал, но получилось довольно громоздко. Спасибо за совет, а лучше ссылку.
 

Асан

New member
VBA - это язык общего назначения, он ничего о трейдинге не знает... надо делать функцию, которая будут возвращать некоторое значение
 

mehanizator1

New member
Существует ли в VBA стандартная процедура вычисления скользящего среднего? Я написал, но получилось довольно громоздко. Спасибо за совет, а лучше ссылку.
вы не знаете как посчитать среднее? сложить все значения и поделить на их количество.
 

USDEUR

New member
За первый ответ спасибо, но на самом деле скользящее среднее существенно отличается от обычного среднего.
Еще вопрос.
Ищу как в VBA сформировать файл с расширением .tri.
Чем же это скользящее отличается от обычного? Скользящее оно потому, что по прошествии определенного периода времени в расчет добавляется последнее значение и изымается первое. Вот и весь прикол. А про файл я в блоге ответил. Только не спрашивай у меня синтаксис, посмотри в справке, ибо головой я не помню, а под рукой ничего нет, давно не творил.
 

leokon

New member
Чем же это скользящее отличается от обычного? Скользящее оно потому, что по прошествии определенного периода времени в расчет добавляется последнее значение и изымается первое. Вот и весь прикол. А про файл я в блоге ответил. Только не спрашивай у меня синтаксис, посмотри в справке, ибо головой я не помню, а под рукой ничего нет, давно не творил.
Спасибо. Этим и отличается. Но с точки зрения программы, это существенно.
 

leokon

New member
Спасибо. Этим и отличается. Но с точки зрения программы, это существенно.
1. Я не прав оказалось не существенно.
2. Нахально вчера вечером запустил систему в работу - получил удовольствие и небольшой убыток.
3. Не могу найти в КВИКЕ - где "лежит" - количество фьючерсов (по аналогии с количеством акций), имеющихся у меня в данный момент. Вычисляю по косвенным признакам. Неудобно.
Помогите-е-е-е-е.
 

Dim_plus

New member
3. Не могу найти в КВИКЕ - где "лежит" - количество фьючерсов (по аналогии с количеством акций), имеющихся у меня в данный момент. Вычисляю по косвенным признакам. Неудобно.
Помогите-е-е-е-е.
Таблица "ПозицииПоКлиентскимСчетамФьючерсы" поле "ТекЧистПоз"
 

V8

New member
Спасибо. Но вроде выкрутился через DoEvents.
А можно по подробнее, вот у меня через таймер:

Sub qwert()
On Error Resume Next 'если попадается ошибка, то клиенты обычно не понимают что делать - макрос безнадежно останавливается. Эта функция позволяет в этом макросе игнорировать ошибки и продолжать дальше выполнение кода
Dim servermin As String 'определение переменной как строковой(читай книгу по языку) - не помню зачем...
servermin = 0 'возникали ошибки какие-то пришлось это ввести
If Лист1.Cells(6, 2) <> "Работает" Then GoTo ends 'если не работает то идем в конец
If Лист1.Cells(8, 2) <> "" Then servermin = Round(Лист1.Cells(8, 3), 1) 'время сервера получаем
kolich = 0 'возникали ошибки какие-то пришлось это ввести
aaa = 0
Лист1.Cells(9, 1) = servermin
If Лист1.Cells(7, 3) = "ОТКРЫТА" Then 'это понятно
servermin = Round(Лист1.Cells(8, 3), 1) 'чтение переменной слева до 2го знака(читай книгу)
'Лист1.Cells(8, 1) = servermin
'servermin = Right(servermin, 1) 'чтение получившейся перпеменной справа на 1 знак - получаем окончание минут (например 10:37:56 - получаем 7. Это для того что бы прога понимала что закончилась пятиминутка - смотри дальше)
Лист1.Cells(9, 2) = servermin
If servermin >= 1 And Лист1.Cells(6, 2) = "Работает" Then 'если текущая минута 0 или 5, а секунду назад нет, то значт наступила новая пятиминутка. В конце кода записываем в Лист1.Cells(1, 35) текущую минуту - она в след-ий раз станет прошлой минутой для сравнивания
If Лист1.Cells(100, 20) = "Zanovo" Then 'если начали заново расчет то пропускаем расчет и записываем тущую минуту в историю - ведь нам надо получить хоть какую-то историю а не сравнивать с нулями
If Лист1.Cells(15, 101) = "" Then GoTo ends1
End If
For i = 15 To 25 'этот цикл глобален и позволяет работать с каждой строкой (с каждой бумагой соответственно) и запусскается соотв-но 10 раз.Кончается далеко внизу
For R = 15 To 25 'этот цикл для получения инфы о кол-ве используемых бумагах для расчета равномерного распределения всех средств между ними
If Лист1.Cells(R, 11) = "Исп-ть" Then
kolich = kolich + 1
End If

и т.д. это тело проги опроса ечеек, а вот в конце , делаю так:

End If
End If
ends:
Application.OnTime Now + TimeValue("00:00:01"), "qwert" 'запуск макроса этого же через секунду. Чаще никак не получается
End Sub -cобственно тут и сам таймер, а вот как увязать без загрузки проца, и сдесь обновление раз в секунду, ну чаще не получалось
-??????????????????????????????
 

leokon

New member
А можно по подробнее, вот у меня через таймер:

Sub qwert()
On Error Resume Next 'если попадается ошибка, то клиенты обычно не понимают что делать - макрос безнадежно останавливается. Эта функция позволяет в этом макросе игнорировать ошибки и продолжать дальше выполнение кода
Dim servermin As String 'определение переменной как строковой(читай книгу по языку) - не помню зачем...
servermin = 0 'возникали ошибки какие-то пришлось это ввести
If Лист1.Cells(6, 2) <> "Работает" Then GoTo ends 'если не работает то идем в конец
If Лист1.Cells(8, 2) <> "" Then servermin = Round(Лист1.Cells(8, 3), 1) 'время сервера получаем
kolich = 0 'возникали ошибки какие-то пришлось это ввести
aaa = 0
Лист1.Cells(9, 1) = servermin
If Лист1.Cells(7, 3) = "ОТКРЫТА" Then 'это понятно
servermin = Round(Лист1.Cells(8, 3), 1) 'чтение переменной слева до 2го знака(читай книгу)
'Лист1.Cells(8, 1) = servermin
'servermin = Right(servermin, 1) 'чтение получившейся перпеменной справа на 1 знак - получаем окончание минут (например 10:37:56 - получаем 7. Это для того что бы прога понимала что закончилась пятиминутка - смотри дальше)
Лист1.Cells(9, 2) = servermin
If servermin >= 1 And Лист1.Cells(6, 2) = "Работает" Then 'если текущая минута 0 или 5, а секунду назад нет, то значт наступила новая пятиминутка. В конце кода записываем в Лист1.Cells(1, 35) текущую минуту - она в след-ий раз станет прошлой минутой для сравнивания
If Лист1.Cells(100, 20) = "Zanovo" Then 'если начали заново расчет то пропускаем расчет и записываем тущую минуту в историю - ведь нам надо получить хоть какую-то историю а не сравнивать с нулями
If Лист1.Cells(15, 101) = "" Then GoTo ends1
End If
For i = 15 To 25 'этот цикл глобален и позволяет работать с каждой строкой (с каждой бумагой соответственно) и запусскается соотв-но 10 раз.Кончается далеко внизу
For R = 15 To 25 'этот цикл для получения инфы о кол-ве используемых бумагах для расчета равномерного распределения всех средств между ними
If Лист1.Cells(R, 11) = "Исп-ть" Then
kolich = kolich + 1
End If

и т.д. это тело проги опроса ечеек, а вот в конце , делаю так:

End If
End If
ends:
Application.OnTime Now + TimeValue("00:00:01"), "qwert" 'запуск макроса этого же через секунду. Чаще никак не получается
End Sub -cобственно тут и сам таймер, а вот как увязать без загрузки проца, и сдесь обновление раз в секунду, ну чаще не получалось
-??????????????????????????????
Извините, но понять трудно. Комментарии в какой-то непонятной кодировке.
У меня, кстати, после радости - запуска программы и первых профитов перестал работать обмен через .tri .tro .trr файлы.
Вроде ничего существенно не менял. Буду разбираться.
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху