Здравствуйте, onOrder срабатывает при каждом изменении заявки В данном случае, скорее всего изменением было установка UID на заявке. Это только предположение не более.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Николая, Проблема в логике. При первом срабатывании futures.sec_code ничего не содержит и условие while futures.sec_code ~= stroka do нормально срабатывает, когда у Вас 0.
Но при повторном срабатывании функции, в futures.sec_code уже есть запись "SiM5" так как она туда записалась при первом обращении к функции. Поэтому при повторном вызове условие "while futures.sec_code ~= stroka do" уже нарушено и цикл не выполняется. Для решения проблемы, Вам нужно обнулять futures при каждом вызове функции pos. Перепишите так:
Код
is_run = 1
fuc = "SiM5"
function OnStop()
is_run = 0
end
function pos(stroka)
local i = 0
local futures = {}
while futures.sec_code ~= stroka do
futures = getItem("futures_client_holding", i)
i = i+1
end
return futures.totalnet
end
function main()
while is_run == 1 do
j = pos(fuc)
message(tostring(j),1)
sleep(1000)
end
end
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Указанный код у нас работает. Единственное изменение, определили переменные futures={}, is_run=1 и fuc='RIM5' Уточните что Вы задаете в переменной fuc? Также, уточните какое значение Вы видите в таблице "Позиции по клиентским счетам" в колонке "Тек.Чист. Поз" и какое в итоге значение попадает в переменную j?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
Серж пишет: Имеется ввиду хронология среди однотипных колбеков? Разнотипные колбеки придут в произвольном порядке, и не обязательно в том, в каком они бы пришли, не будь этой задержки, верно?
Правильно я понимаю, что получить только с getItem позицию по фьючу не получится?, Предварительно нужно будет пройтись по количеству срок в "Позиции по клиентским счетам" с getNumberOf?
sam063rus пишет: как ей пользоваться и все возможные к ней параметры
К сожалению, не представляется возможным, описать все возможные варианты, всех транзакций, всех бирж с которыми работает QUIK, ввиду непреодолимо гигантского их количества. Поэтому, частный случай, лучше смотреть в документаци той конкретной биржи, о которой идет речь.
sam063rus пишет: а также, вы, таким образом, нам гарантируете, что ни один колбек не пропадёт/будет добавлен в очередь и когда-нибудь обработан?
если один колбек занял терминал, то он не получает данных с сервера. как только отвиснет, получит пропущенные данные. таким образом, хронология восстановится.
latrop1 пишет: Спасибо за ответ, стало чуть понятнее. А почему тогда в Квике случай с "параметр не задан" не отрабатывает аналогично "P2 роутер", а требуется обязательно?
dimka пишет: SetTableNotificationCallback() - я так понимаю устанавливает тоже колбэк на события в таблице ? Значит получается отрабатывая колбэк нажатия кнопки мыши - kill_all_order()... OnOrder() не сработает или я неправильно понял?
SetTableNotificationCallback тоже работает в основном потоке Соответственно пока работает цикл в kill_all_order остальные колбеки не придут. Соответственно, как уже было сказано, мы не рекомендуем выполнять в колбеках какие-либо тяжелые манипуляции.
dimka пишет: 1) Во время работы kill_all_order() будут срабатывать OnOrder(),OnTrade() ?
OnOrder сработает столько раз сколько изменится статусы заявок которые Вы снимаете OnTrade вообще не сработает, так как Вы работаете с заявками а не со сделками.
Цитата
dimka пишет: 2) Если выполняется OnOrder() остальные On...()
Колбеки в LUA работают в одном потоке. пока один колбек занят остальные ждут. Именно поэтому мы не рекомендуем выполнять в колбеках какие-либо тяжелый манипуляции.
Цитата
dimka пишет: 3) Нельзя ли это осветить в документации ?
Здравствуйте, Вырезка из документации на P2 роутер: Если параметр code (в Quik это ACCOUNT) не задан или его значение равно ‘%%%’, то производится удаление заявок для всех клиентских счетов.
Если параметр code_vcb (в Quik это BASE_CONTRACT) не задан или его значение равно ‘%’, то производится удаление заявок для всех контрактов.
Sergey Gorokhov пишет: Вам нужно попросить брокера предоставить историю графиков по волатильности.
Значит, у брокера есть возможность накапливать и затем передавать клиентам историю за предыдущие дни не только цен сделок и объемов, но и любых других параметров из ТТП?
Объясняю. Конечный пользователь это лицо творческое, он может указать время срабатывания в произвольном формате. Может так "20:00:00" а может и так "200000" Или еще как-то. В общем как ему вздумается.
В примере показана функция FixTime которая из произвольного формата времени, делает таблицу формата функции os.time Которая в свою очередь переводит эту таблицу в количество секунд начиная с 1970 года.
Лучшим способом сравнить время является перевод его в секунды. Поэтому именно этот способ и был выбран. Ели подход не нравится, пожалуйста можете сравнивать часы и минуты отдельно, это Ваше право.
Роман пишет: Проблема в том что он отражает данные только в пределах одной торговой сессии!
Здравствуйте, Это не проблема терминала QUIK. Это значит что Ваш брокер не предоставляет своим клиентам такую услугу. Вам нужно попросить брокера предоставить историю графиков по волатильности.
Дмитрий Минеев пишет: Как это поможет решению моего вопроса?
переписать пример так, чтобы он генерировал функции, кажется сложнее, чем переписать так, чтобы была глобальная таблица, в которой хранились бы нужные данные о предыдущих значениях. Для каждого периода своя ячейка в таблице.
Здравствуйте, График Волатильности можно построить так же как и любой другой график по параметру из Таблицы Текущих Параметров (ТТП). Первый вариант, в ТТП найти нужный опцион, найти колонку Волатильность, нажать на значении в этой колонке правой кнопкой мыши и выбрать График "Волатильность" Второй вариант. меню "Экспорт данных" - "Графики". Выбрать "Добавить график (индикатор)" Нажать там "Новый источник" в левой части окна, выбрать нужный опцион. В правой выбрать "Таблица истории значений параметров", и выделить значение "Волатильность", после чего нажать Да. Точно также можно построить график открытого интереса по фьючерсам, только параметр называется Количество открытых позиций
Дмитрий Минеев пишет: То, что вы описали - понятно. Но предложенный вами вариант не подходит. Пользователь в параметрах указывает интервал, за который будут считаться средние. Т.е. я заранее не знаю, сколько функций создавать. Есть ли другой выход? Или возможно как то создать динамический массив из функций?
Все зависит от Вашего воображения. Перепишите пример так чтобы он запоминал последнее значение индикатора в переменной.
Здравствуйте, Сейчас Вы написали только пару строк обращения к элементу таблицы, чего явно не достаточно для понимания того как работает Ваш код. Если хотите получить 5 свечек, то для этого сделайте так чтобы в таблице self.PriceSeries были эти самые 5 свечек
Здравствуйте, Особенность индикатора EMA в том что для его расчета требуется знать свое предыдущее значение. В нашем примере для этого используется механизм замыканий. Так как для разных периодов Вы используете одну функцию, то происходит пересечения, когда функция с одним периодом берет предыдущее значение из функции с другим периодом. Для решения проблемы, используйте две разные функции EMA if index == 1 then EMA3 = _EMA() EMA4 = _EMA() line = {} end
и далее по коду, для разных периодов используйте разные функции
Роман пишет: Скажите поддерживает ли система QPILE асинхронная обработка портфеля? Просто у меня работает два портфеля и судя по времени второй запускается после того как обработается первый.
Здравствуйте, Нет не поддерживает. И да QPILE портфели работают по очереди
START_TIME = "20:00:00"
WORK_DONE = false
function FixTime(V)
V=tostring(V)
local Out = os.date("!*t",os.time())
local len = string.len(V)
if len>6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)%p(%d%d)%p(%d%d)")
elseif len==6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)(%d%d)(%d%d)")
elseif len==5 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d)(%d%d)(%d%d)")
end
return Out
end
function main()
START_TIME=FixTime(START_TIME)
while true do
if os.time()<os.time(START_TIME) then
WORK_DONE=false
elseif not WORK_DONE then
message('время работать',1)
WORK_DONE=true
end
sleep(1000)
end
end
aidan1387 пишет: Так, окей. Что вы подразумеваете под "после разрыва и установления связи, если отписать от заявок а потом подписаться и вызвать старт"? В вашем примере вы на старте приложения подписываетесь, на завершении - отписываетесь. Перезапуск приложения? Другого способа у вас там в примере нет. И, естественно, там без перезапуска ничего никуда не перезапрашивается.
Видимо мы говорим о разных примерах. Я говорю про пример который можно скачать по указанной ранее ссылке, который называется API_Tester_DLG Подписаться это кнопка "Subscribe" Отписаться это кнопка "Unsubscribe" Старт, это кнопка "Start" И на этом примере все прекрасно работает. Там же Вы найдете исходные коды.
Цитата
aidan1387 пишет: В какой момент он должен присылать мне историю?
В тот момент когда Вы ее запросите.
Еще раз повторю, посмотрите пример, потыкайте кнопки, воспроизведите разрыв связи. Потом посмотрите код у себя.
aidan1387 пишет: Если б там был рабочий пример касательно моего вопроса, я б тут не писал.
Вот именно на том примере, который там, очень легко проверить, что после разрыва и установления связи, если отписать от заявок а потом подписаться и вызвать старт, то увидите все заявки которые были до разрыва.
sam063rus пишет: ))))))))))))))))))))))а я нигде не сказал, что я его использую. это всё Ваши мысли )))))))))))))))))))))))
Я не в курсе обстоятельств озвученной проблемы. Поэтому если не затруднит, уточните тему письма которое писали или дайте ссылку где Вы описывали суть проблемы.
Sergey Gorokhov пишет: Но как только путь где-либо поменять (например открыть другой скрипт из другой папки), то первый теряет свою папку и после перезапуска уже не запускается.
включаю квик, никаких других путей/открытых файлов/скриптов - НЕТ. возникает ошибка. алгоритм действий - отправить файл для анализа в арку->получить ответ, что у них это не воспроизводится->технично похерить тему.
То что у нас проблема не воспроизводится, не значит что мы ее закрыли. Это значит что у нас не достаточно информации для определения причин сбоя. Это могут быть какие-либо нюансы, которые Вы не указали, но они приводят к проблеме (может использование любимого Вами IDA Pro?) А также просьба (пока еще) сдерживать эмоции и общаться культурно.
sam063rus пишет: Вопрос[ы]: 1. Для чего в главном файле квика info.exe секция экспорта? 2. значит ли это, что это сделано для того, что часть кода/плагинов писалась независимыми разработчиками и, соответственно, компания просто не стала раскрывать все исходники, а ограничилась лишь интерфейсом взаимодействия лишь с самыми необходимыми функциями? 3. значит ли это, что так сказать, IPluginContext - не совершенен?
Вы имеете в виду пункт меню Экспорт данных? Если так то он для экспорта данных. Но скорее всего имеется в виду что то другое, не так ли?
Andrey пишет: Эм почему-то ПК по вайфаю не подключается...))))точнее к сети подрубился, но без доступа к интернету, подвисает на идентификации и висит. При этом планшеты и телефоны, и ноут по вайфаю работают))))
Здравствуйте, Виноват ли Wifi или нет, проверить достаточно просто. Достаточно через кабель подключить ноутбук (на котором также наблюдается проблема) и протестировать некоторое время.
Раньше мы уже встречали ситуации когда именно при работе через WiFi возникали похожие проблемы (можно поискать на старом форуме) И качество WiFi связи тут абсолютно не причем. Скорее проблема в каких-либо специфичных настройках на стороне самого роутера.
Смотря чего Вы хотите добиться. Сейчас, в событии OnTransReply, Вы присваиваете значение table_order из переменной order, которая не существует. То что она есть в событии OnTrade не значит что ее можно использовать где попало.
function mycallbackforallstocks(index,class,security)
message(tostring(index).. " " ..class .. " " .. security,1)
end
function DataSource(class,security,interval)
local ds = CreateDataSource(class,security,interval)
ds:SetUpdateCallback(function(index) mycallbackforallstocks(index,class,security) end)
return ds
end
function main()
DataSource("TQBR","LKOH",INTERVAL_TICK)
while not_stopped do
sleep(1000)
end
end