Дмитрий написал: можно индикатор для этих целей использовать
Можно, но только не стандартный. Те же фракталы ищут min/max на заданном периоде, а в одной секунде количество тиков не определено. Можете взять код из примеров https://forum.quik.ru/forum17/topic1157/ и попробовать переписать под свои нужды.
Дмитрий написал: Да тиковые данные есть у меня, мне не хочется их циклом обегать, а сразу получить готовые максимумы как для минутных интервалов
Сразу получить не получится. Просто потому что в терминале этих данных нет. Только высчитывать Другой вопрос в том кто их будет высчитывать, Ваш скрипт или готовый индикатор. Например индикатор фракталов может подойти.
sav 312, Начнем с того что функции math.min и math.max принимают только список аргументов, не таблицы. И тем более они не понимают таблицы состоящие из некоторого набора параметров. А getCandlesByIndex как раз таки возвращает таблицы состоящие из параметров. Т.е. чтобы найти min/max Вам в любом случае придется делать цикл, который пробежится по всем свечкам которые вернул getCandlesByIndex. А раз будет цикл, то и функции math.min и math.max применять нет особого смысла, ибо в этом же цикле можно определить min/max через банальный if. Т.е. через getCandlesByIndex запрашиваете все нужные свечки. Потом цикл который берет из них значение и ищет min/max Вот и весь алгоритм.
Другая учетная запись, это может быть брокер, которого Вы попросили за Вас выставить заявку, или это у Вас несколько учетных записей. Учетная запись для WebQUIK (или любой другой терминал) и для QUIK может быть одна, а может быть для каждого терминала своя. Также для одного терминала может быть зарегистрировано несколько учетных записей, например мужа и жены.
Ошибка, из-за которой на сервер доступа вместе с ответом на транзакцию не передавалась информация об остатке заявки, исправлена в версии 5.17 серверного ПО QUIK.
Приносим вам свои извинения за доставленные неудобства.
lergen, Скорей всего причина в том что элемент st.n_f является числом, а Вы обращаетесь к нему как к таблице. Для более точного анализа нужна полная версия кода.
kroki написал: В каких реальных случаях вызываются OnDepoLimitDelete(), OnMoneyLimitDelete(), OnFuturesLimitDelete() (первые два для limit_kind >= 0, внутренние не особо интересны)? Кто-нибудь встречал эти вызовы в реале?
Они вызываются когда брокер удаляет лимит. Необходимость удалить лимит возникает в случае если его неправильно задали, а это к счастью происходит крайне редко.
Цитата
kroki написал: Кстати, а зачем вызываются ползовательские callbacks с limit_kind < 0? Какие осмысленные действия он бы мог сделать (хотя бы в теории)?
Лимиты с limit_kind < 0 являются техническими и действительно для конечного пользователя не несут смысла. Но тем не менее они есть и по этому колбеки срабатывают.
electron, Здравствуйте, В одной сделке всегда два участника. Судя по тому что номера заявок разные, Вы видите одну сделку между двумя участниками. Каждый участник видит сделку со своим номером заявки.
Другой вопрос в том, почему Вы их видите. Возможно это Ваши заявки? Те. Вы купили сами у себя (кросс сделка). Посмотрите от какого код клиента были зарегистрированы заявки.
Алексей написал: По-моему - никак. Значит ошибка возникла после последнего старта скрипта, но не прервала его работу.
По идее да, никак. Однако ранее у нас были обращения от клиентов с тем что сообщение оставалось и это чинилось. И как уже было сказано и еще раз повторим:
Цитата
Sergey Gorokhov написал: Если требуется анализ, приведите полный код скрипта на котором возникает проблема и сообщите версию терминала QUIK
колбеки выполняются в том порядке как они поступили в терминал QUIK. Если один колбек затормозит, то накопится очередь, которая потом исполнится в том порядке в каком они поступили.
Алексей написал: Вы, по ошибке, заглянули в "Интерпретатор языка Lua.pdf", а я ссылался на стр. 6 "Использование Lua в Рабочем месте QUIK.pdf".
Да верно.
Цитата
Алексей написал: Приведенная там схема и натолкнула меня на мысль, что в Quik реализован первый способ работы lua скрипта.
Приведенная там схема явно говорит о том что после OnInit() параллельно работают Main и колбеки. Параллельно означает что никакой очередности между ними нет.
Цитата
Алексей написал: Вообще-то, по моему, после перезапуска скрипта содержание ошибки от прошлого сеанса его работы должно стираться из окна "Доступные скрипты" раздел "Ошибки выполнения скрипта". Разве не так?
А Вы проверили, действительно ли сообщение от предыдущего запуска? Или это сообщение появилось после?
Цитата
Алексей написал: 2. Ошибки интерпретатора, возникающие между окончанием OnInit, но до организации выделенного для main потока, не вырубают скрипт.
Кажется на это уже был дан вполне понятный ответ.
Цитата
Sergey Gorokhov написал: ЦитатаАлексей написал: 2. Ошибки интерпретатора, возникающие между окончанием OnInit, но до старта main, не вырубают скрипт. Так не должно быть.
Алексей написал: Только вопрос о том, могут или нет колбеки начать выполняться до main, возник потому, что это определяется не какими-то вселенскими правилами реализации многопоточности, а конкретным решением разработчика конкретного программного продукта.
Какими правилами, Вы вообще о чем? Колбеки выполняются по событию. Событие произошло до main вот и колбек сработал до main. В чем вопрос, не понятно.
Цитата
Алексей написал: И глядя на стр. 6 "Использование Lua в Рабочем месте QUIK.pdf"
На стр 6, данного документа рассказано как запустить скрипт Lua. Что не так?
Цитата
Алексей написал: Весь код - более 8 тысяч строк, заставлять Вас его изучать в поисках ошибок мне совесть не позволяет :)
И что мешает создать более компактную версию, чисто для воспроизведения описанной проблемы? И потом, большой код никого из поддержки не пугает. Если Вы считаете его не публичным, всегда можно отправить на quiksupport@arqatech.com
Цитата
Алексей написал: Код же, исполнение которого вызывает ошибку, приведен в посте #3.
Это не код, а пара строк. Что такое код, это проект со своей рабочей логикой. Проследив которую можно понять при каких обстоятельствах в указанных строках возможна ошибка. Указав конкретную строку, где возникла логическая ошибка, Вы сами же не сможете разобраться, верно? x= y\z
А вот если указать полный код z=0 y=1 x= y\z
тогда шансы разобраться заметно возрастают.
Цитата
Алексей написал: Переменной TEname присваивается строковое значение в самом начале main.
Вот еще одна причина ко которой нужен полный код, а не пара строк. Как по Вашему до этой информации нам можно было бы разобраться?
Цитата
Алексей написал: (Теперь то я перенес это в OnInit, но на исходное решение были свои соображения).
вообще, использовать заранее не инициализированные переменные является плохим тоном. даже в документации об этом сказано (см описание OnInit)
Цитата
В данной функции пользователь имеет возможность инициализировать все необходимые переменные и библиотеки перед запуском основного потока main().
Цитата
Алексей написал: Однако я столкнулся с необъяснимой ситуацией: в "Ошибки выполнения скрипта" светилось: "bad argument #1 to 'find' (string expected, got nil)", а скрипт прекрасно продолжал свою кипучую деятельность.
А может все проще и сообщение осталось от предыдущего запуска, до исправления ошибки?
Цитата
Алексей написал: Из этого я и сделал предположение №2.
где из всего поста предположение №2? а то Вы их не нумеруете.
финамовец, Здравствуйте, Это брокер решает дать ему доступ к своему серверу или нет. Никакого супер секретного доступа ко всем серверам всех брокеров у нас нет.
На счет торговли, среди ряда наших сотрудников, есть те кто торговал, а есть те кто не торговал, какое это имеет значение к описанной проблеме совершенно не понятно.
torque написал: Но ведь выше в начале цикла есть присвоение переменной i номера текущего бара.
ну да, а если будет когда появится второй бар?
_ARG_0_ = 2 ...
if _ARG_0_ > 1 then if _ARG_0_ > i then i = _ARG_0_ kalman[i] = value if kalman[i-1] < kalman[i-2] and kalman[i-2] >= kalman[i-3] then
чему будет равно kalman[i-2]? а kalman[i-3]?
Цитата
torque написал: По поводу >=4 попробовал, ничего не изменилось
Надо не "пробовать", а исправлять и если не помогло смотреть дальше. Что попадает в kalman и что в i, перед возникновением ошибки. И действительно ли на предыдущих итерациях заполнялись нужные параметры kalman[i-1], kalman[i-2], kalman[i-3]
Добавьте логирование этих данных, например через message.
Как минимум, уже ошибка в том что Вы берете значения kalman[i-1], kalman[i-2], kalman[i-3] тогда когда их может не быть. раз i это номер свечки, следует добавить условие if i>4 then и только после этого продолжать код.
Артем написал: Т.е. алгоритм не будет знать какую пар свечей он сравнивает:
Давайте еще раз. Сравнить текущий номер свечки и номер предыдущей свечки Вы можете, так? Так. Что мешает использовать это для проверки новая свечка или нет?
oldIndex=0 .... if (oldIndex~=index) then --случилась новая свеча oldIndex==index else --старая свеча end
Алексей написал: 1. Колбеки начинают вызываться после окончания OnInit, но могут выполняться до старта потока main.
Колбеки могут начать выполняться до старта main и в этом нет ничего удивительного. main выполняется после OnInit, остальные колбеки никакого значения не имеют.
Цитата
Алексей написал: 2. Ошибки интерпретатора, возникающие между окончанием OnInit, но до старта main, не вырубают скрипт.
Так не должно быть. Если требуется анализ, приведите полный код скрипта на котором возникает проблема и сообщите версию терминала QUIK