Борис Гудылин, Проблема у нас не воспроизводится. Просьба, уточнить как именно меняется инструмент. Какие индикаторы установлены, какие-то из Ваших, или встроенные?
s_mike@rambler.ru, Если Вы говорите что она повторяется значит у Вас есть примеры. Нам нужен пример, в идеале не старше месяца, чтобы провести адекватный анализ и найти причины. В частности нужна дата/время свечи, интервал графика, код инструмента/класса и кто брокер.
s_mike@rambler.ru, И что Вы предлагаете? Если график заведомо поврежден, надо чинить график, а не фильтровать данные в терминале. Или Вам известно что было 24го июня шестьлет назад?
Борис Гудылин, Еще раз, дело не в версии. Индикаторы ломаются потому что на графике дырка. А дырка на графике потому что на сервере брокера график поврежден. Естественно в обычной жизни такой ситуации не должно быть, однако причины мы выяснить не сможем, так как речь про историю шести летней давности. Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Борис Гудылин, Класс FEG это иностранная площадка, она есть далеко не у всех брокеров. По всей видимости, график каким-то образом поврежден на стороне сервера. Вам нужно обратиться к брокеру указав на проблему.
Здравствуйте, К сожалению точной формулы нет, так как конечный результат напрямую зависит от выбранного шрифта. Можно взять за правило что width примерно означает количество символов.
Индикатор RSI строится по EMA, которому нужен расчет по предыдущим значениям. Скорее всего проблема именно в этом. Прогоните цикл для корректного расчета for i=1,ds:Size() do a=func(i, {Period=12, VType="Typical", round=7}, ds) end
Constantin написал: Правильно написали - время у свечи должно быть, ведь этот параметр существует. Остальные параметры - nil. Плюс свойство exists (или как там оно называется) должно быть установлено в false.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Здравствуйте, Действительно, в 7.6 поведение изменилось. В предыдущих версиях, на пропущенных свечках время выводилось, а вместо цены был 0. Данное поведение было признано некорректным, так как 0 означает наличие данных, а не их отсутствие. В связи с чем, начиная с 7.6 на пропущенных свечках выводится nil по всем параметрам (в том числе и по времени). И это правильно, так как отсутствие свечи это отсутствие данных. Однако, к сожалению, данное исправление по ошибке не попало в список изменений. Приносим извинения за неудобства.
В качестве решения, Вам нужно добавить в скрипте проверку на наличие данных, примерно следующим образом:
Код
function OnCalculate(indx)
-- если новый день, то сохраняем цену начала дня
if T(indx) and T(indx).hour <= 10 and T(indx).min == 0 then
price_begin_day = O(indx)
end
return price_begin_day
end
Здравствуйте, Описанная проблема у нас не повторяется. Единственное, есть версия, что ошибку возвращает какой-то другой, параллельно работающий, скрипт. Проверьте этот момент. Если разобраться не получится, просьба прислать для анализа, на адрес quiksupport@arqatech.com копию всей папки с проблемным терминалом QUIK (без ключей доступа). В письме укажите ссылку на эту ветку форума.
bulat, Вопрос не совсем понятен, колбек и так должен быть один. Скорее всего у Вас не два одинаковых колбека, а два разных. Догадываемся что они отличаются видом лимита (параметр limit_kind) В таком случае достаточно добавить в событии проверку на вид лимита.
Код
function OnDepoLimit(dlimit)
if dlimit.limit_kind==0 then
message("Текущий остаток по бумагам "..tostring(dlimit.currentbal))
end
end
Здравствуйте, Версия 7.6 требует свежей версии сервера QUIK. Если брокер не обновил сервер то терминал 7.6 к нему не подключится с ошибкой вида "Неверная версия протокола" Единственная рекомендация не обновляться пока брокер обновит сервер.
Andrei2016, 1) Это только Ваше мнение. Наша реализация от него отличается. Не видим причин менять реализацию. 2) Для таких случаев существует список изменений, который присутствует в каждом обновлении. 3) Да мы добавили свое событие и срабатывает оно после LBUTTONDOWN. Это наше право как разработчика, так как аналога события QTABLE_SELCHANGED в стандартных функциях Windows нет, а оно нужно.
Юрий Юдицкий написал: т.е. проблема неверного отображения ГО упирается только в версию? ок, буду иметь ввиду
С момента выхода версии 5.17 уже прошло очень много лет, поэтому не исключено что в старой версии были какие-то проблемы. Вы можете это легко проверить. Сделайте резервную копию всей папки с терминалом. Потом установите обновление и проверьте. После этого верните обратно содержимое папки из резервной копии.
Космонавт написал: Грамотно ли будет local num_candles превратить в local num_candles[sec]. Ведь возникают риски, что две сделки про разным акциям произойдут одновременно, и с этой переменной произойдёт каша, на неё будут претендовать две акции. или я заблуждаюсь?
У Вас переменная num_candles и так заполняется в зависимости от бумаги. То есть никакой каши не произойдет.
Видимо Вы не совсем понимаете что такое события. Попробуем объяснить. События это функция которая вызывается терминалом при определенных обстоятельствах. То есть когда Вы пишите "s=OnConnected ()" то это Вы вызываете функцию OnConnected, а не терминал. Соответственно делая так "s=OnConnected ()" Вы не получите нужного результата, так как функция сработает не тогда когда надо, а тогда когда Вы ее вызовите.
Вам надо написать так:
Код
s=false
function OnConnected(flag)
s=true
end
function OnDisconnected()
s=false
end
В таком случае, когда Вы запустите код, переменная s=false Когда терминал вызовет функцию OnConnected, она сработает и переменная станет s=true Когда терминал вызовет функцию OnDisconnected, она сработает и переменная станет s=false
Denis написал: Stanislav Tvorogov , спасибо! Еще вопрос: на что повлияет усли уменьшить размер сообщения, посылаемого при проверке связи с сервером в процессе работы? По умолчанию стоит 128.
На работу никак не повлияет. Может повлиять на достоверность показателей в информационном окне (Система - О программе - Информационное окно).
Текущая таблица, Таблица обезличенных сделок и Стакан едут разными никак не синхронизированными потоками. Поэтому никакого жесткого порядка в их поступлении нет.
Космонавт написал: Сейчас записей в таблице обезличенных сделок нет.
Если минутки, то таблица обезличенных сделок совершенно не причем. Интервальные графики формируются сервером и отправляются пользователю независимо от таблицы обезличенных сделок.
Космонавт, Еще раз, сейчас важно не то как себя ведет робот, а то реально записи в таблице есть или нет. Если до запуска робота они есть, то в роботе колбек не сработает. Если нет, то робот их закажет и сработает колбек. Другой вопрос, а должны ли они вообще там быть до торгов. Это уже зависит от того что это за данные. Если пятничные, значит Вы подключились к серверу до смены торговой сессии. Хотя это странно, обычно брокера меняют торговую сессию гораздо раньше чем за пол часа до торгов. И я все еще надеюсь что интервал у Вас тиковый. Хотя и на этот вопрос ответа не последовало.
Космонавт, Не, Вы не ответили на вопрос. И от ответа, будет зависеть объяснение происходящему.
Хорошо, раз диалога не получается постараюсь рассказать как это работает. Скорее всего, мы с Вами говорим про тиковый интервал, не так ли? Потому что если говорить о других интервалах то поведение немного уже другое. Функция установленная в SetUpdateCallback срабатывает только при получении информации терминалом. Просто так она сработать не может. Откройте в терминале тиковый график, подождите пока он загрузится. И закажите точно такой же график через CreateDataSource, и посмотрите сами что поедет через SetUpdateCallback. А приедет туда только свежая информация.
Поэтому возникает вполне логичный вопрос, как у Вас срабатывает функция когда с Ваших слов таблица уже прогрузилась. А срабатывает она скорее всего потому что таблица на самом деле не прогрузилась. А происходит перезакачка данных из-за смены даты. Но это лишь теория, так как ответа от Вас не прозвучало.
Космонавт написал: Да, однозачно уверен. Я осознанно жду пока все сделки прогрузятся вплоть до времени 18-50 (конец сессии) и только потом клацаю на запуск робота
Нет не уверены. Вы ждете до времени 18-50 в пятницу, а речь про субботу.
Космонавт написал: 1. Почему все тики (с самого начала) начали обрабатываться в субботу? К моменту запуска робота Таблица всех сделок уже давно прогрузилась!
Поясните что такое в Вашем понимании "обрабатывается"?
Виктор Столетов написал: Ведь к свечам текущего тайм-фрэйма графика я и так имею доступ с помощью функций O(i), C(i), L(i),H(i),V(i),T(i).day и т.д., после отработки Oncalculate. Зачем же мне использовать функцию getCandlesByIndex?
getCandlesByIndex имеет смысл использовать если требуется получить доступ не к текущему графику. О чем Вы сами говорили выше. При этом другой график может отличаться чем угодно. Таймфреймом, инструментом, или даже быть другим индикатором.