Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Проблема такая - есть готовый файл, но запустить в реале не получается. В Оффисе 2003 макрос запускаетя только на тех данных что присутствуют на странице Trades. Если завести, например с Квика, новые данные, то расчет Дельты не происходит и выдает ошибку (на рисунке), на этом все и заканчивается. Юзал давно VB-6, а VBA только начал, поэтому пока не догоню в чем дело. Там на рисунке видно какие-то пароли, но при запуске никаких табличек не выскакивает на счет паролей. Помогите кто может!
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
А вот и рисунок с ошибкой. Кстати, эта шибка на 2007м Оффисе. Но и на 2003м с новыми данными не работает и в реале тоже.
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Сам покопался в макросе, вроде получилось. Работает в реале от Квика. Кому надо поменять Таймфрейм нужно поменять в макросе две строки (Tm = DateAdd("n", 15, Tm)), вместо 15 ставите свое время. Перед запуском в реале удалить все данные на листе Trades. Если выключить Квик и потом снова включить, пересчет продолжается, что очень радует. Хотелось бы добавить выделение ячейки с максимальным объемом на свече. Но пока тяму не хватает. Может кто поможет? Подключайтесь! Вместе может и слепим?
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Еще один вариант ТФ М5. Не плохо бы фильтр присабачить, а то свечи уж больно большие.
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Что-то не наблюдаю активности! Все вроде работает, но хочется большего. Хочу прикрутить выделение ячейки с наибольшей Дельтой на каждой свече. Нашел как выделять ячейку, но не знаю куда вставить. Для этого надо знать весь алгоритм расчетов, чем сейчас и занят. С удивлением обнаружил много лишнего в коде. Нашелся один лишний модуль, куча переменных и процедур, которые не участвуют в расчетах. Почистил как мог - вроде все работает. Не могу понять две строчки (на прилагаемом рисунке), может кто объяснит колхознику по-простому? Строчки выделены рамкой. Всех с Новым годом!
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
А вот и файлы!
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Ну вот вроде получилось сделать выделение максимальной Дельты на каждой свече! Если у кого есть лучший вариант решения этой проблемы, прошу поделиться. Мне кажется существуют и другие способы решения. Интересно было бы посмотреть и поучиться в плане оптимизации кода, т.к. в итоге это сказывается на скорости обработки данных. Еще, вопрос к знатокам. В коде пришлось поменять местами "купля" "продажа", т.к. не вижу логики в отображении свечей. Например, если цена идет вверх несколько свечей, то преобладают быки - дельта должна быть положительной в большинстве случаев, а было все наоборот. Где-то на форумах задавали вопрос Квиковцам насчет направления сделок, обещали решить этот вопрос. Так что не знаю, правильно я сделал или нет?
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
К стати еще. Если кому надо убрать постоянно выпрыгивающую табличку что "макрос содержит личную информацию...", то "...галку нужно убрать в настройках безопасности - удалять личную информацию...". Где-то на форумах нашел - мне помогло!
-------------------- Я не волшебник, но быстро учусь!
|
maras_m
Гость
Зарегистрирован: 17/11/2009
Сообщений: 8
|
|
как завести шкатулку,выскакивает эта ошибка....
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
А ларчик просто открывался! Ответ на рисунке. Жаль, но выделение максимальной Дельты на свече работает не правильно - изначально не правильный алгоритм получился. Вобщем думать надо. Вместе с рисунком кидаю тренировочный файл, а там в коде найдете коментарий "Здесь выделение ячейки". Если у кого появятся идеи, прошу поделиться, буду благодарен. Скорее всего через массивы надо решать, а с этим пока трудности.
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Появилась мысль стакан еще прикрутить. Но вот возникла проблема, может кто поможет, посоветует что? Вопрос такой: есть две переменные Cenas и high одного типа Double. В коде представлены в таком виде Cenas = Round(tr.prices, 1) и high = Round(tr.pric, 1), т.е. Обе округлены до одного знака после запятой. Обе они в процесе обработки изменяются. И вот когда их значения равны должно произойти какое-то событие.Построчно запускаю макрос, переменные изменяются, но когда они становятся одинаковыми (Cenas = high), то ничего не происходит - конструкция If Cenas = high Then...End If.. не срабатывает, а точнее пропускается. Стал разбираться и выяснил, что если заменить Cenas = high, на CN = 0, а CN = Cenas - high, то и в этом случае не срабатывает - почему-то CN не равно нулю, хотя и Cenas и high, если навести на них мышку, числа одинаковые. Например показывают 101,4 и 101,4, а их разница почему-то не равна нулю. В чем тут дело, не пойму? Вот кусочек кода:
While Round(tr.prices, 1) > high ' Проверка на максимум DeltaSheet.Rows(2).Insert Shift:=xlDown 'Вставка строки со сдвигом вниз If (Round(tr.prices, 1) - high) * 10 > 0 Then high = high + 0.1 DeltaSheet.Cells(2, 1).Value = high cn = high - Cenas If cn = 0 Then 'DeltaSheet.Cells(2, 1).Value = high 'Else DeltaSheet.Cells(2, 1).Value = high DeltaSheet.Cells(2, clmn + 2).Value = tr.bid DeltaSheet.Cells(2, clmn + 3).Value = Cenas DeltaSheet.Cells(2, clmn + 4).Value = tr.ask
End If End If Wend
-------------------- Я не волшебник, но быстро учусь!
|
igmar
Верю в СССР
 
Зарегистрирован: 06/11/2006
Сообщений: 685
Нахождение: Россия
|
|
Отнять одно значение от другого и будет видно чему равна разница. Отнимать в ячейке, а не в уме и не наведением мышки.
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Да Умные люди уже объяснили - вещественные переменные и все такое.... Вобщем надо сначала переменные привести к целым числам - вот и все решение! Стакан почти прикрутил, осталось проверить в реале.http://forex.kbpauk.ru/images/icons/ooo.gif
-------------------- Я не волшебник, но быстро учусь!
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Выкладываю файл MD со стаканом. Но сразу предупреждаю - стакан не обновляется, к сожалению! В архиве в Вордовском документе показано как подключать файл к Квику, а на рисунках показано где и что можно поменять. Проблема в том что по отдельности и MD и Стакан работают (в реале), а вместе нет! Вот и вопрос к знатокам - как сделать чтобы две процедуры работали одновременно. Вообще возможно ли это?
-------------------- Я не волшебник, но быстро учусь!
|
lib
Гость
Зарегистрирован: 19/04/2009
Сообщений: 1
Нахождение: Москва
|
|
Занимательная штуковина, а если цена - целое число, тады надо шаг цены прикручивать или как и кстати куда?
-------------------- ..не то чтоб на слово не верю.., но ссылочка вас оправдает... (с)
|
Yans
Гость
Зарегистрирован: 29/10/2010
Сообщений: 18
Нахождение: Россия, г.Волгодонск, Ростовск...
|
|
Блин! Вот незадача! Везде назадавал вопросов! Все кто ответил утверждают, что многопоточность Excell не поддерживает! Хотел все перенести на VB 6.0, но и там тоже самое. Вобщем пока облом. На одном форуме нарыл подсказку. Буду пробовать. Если получится, отпишусь. Ну а если цена - целое число, надо код переделывать. В принципе не очень сложно. Вот например строчка из кода: high = Round(tr.price, 2) 'округляем цену до двух знаков после нуля (Round,...2) и присваиваем high. Если цена число целое, то и округлять не надо. Можно просто записать: high = tr.price и так по всему коду! Вот и все! Удачи. Если кто знает способ, как заставить два потока данных обрабатывать одновременно прошу не жадничать! Мож через массивы...?
-------------------- Я не волшебник, но быстро учусь!
|
Анугама
Душа форума
 
Зарегистрирован: 30/01/2006
Сообщений: 269
Нахождение: Екатеринбург
|
|
В Excel можно реализовать как псевдомногопоточность, так и реальную многопоточность. Первое возможно, если разделить по времени выполнение процедур. Использовать конструкцию Application.OnTime Now + TimeValue("00:00:05"), "my_Procedure" Пример, по-сути, из справки, запускает некий макрос через 5 минут. Можно организовать автоматический запуск нужных процедур по таймеру, причём, передавая от одной к другой данные (как бы параметры), что имитирует многопоточность. Т.к. запуск процедуры напрямую с параметрами невозможен, данные передавать надо через лист, который можно временно создавать программно в скрытом виде и кидать на него некие данные. После чего лист грохать. Второе - более сложный наворот, с запуском ещё одного приложения Excel (именно приложения, Application) в виде инвизибл, но которое, тем не менее, будет работать и выполнять какую-то обработку данных. Т.е. получаем резидентно висящий в оперативке ещё один файл Excel, в котором обрабатываются некие макросы. Сам я реализовывал только первый вариант, но и второй, судя по форумам, люди юзают.
-------------------- Что рубль падает, что доллар - всё хорошо для шляпы нищего...
|