Старатель (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 33 След.
Доступные скрипты, Некорректное поведение в режиме "Показывать на всех вкладках"
 
Цитата
s_mike@rambler.ru написал:
прокси запущен один раз, в цикле проверяет изменение времени файла отлаживаемого скрипта и если оно изменилось - исполняет посредством dofile.
Я всё же перезапускаю скрипты реже, нежели сохраняю. Или наоборот. Короче, эти два события не связаны.


Цитата
Roman Azarov написал:
Речь идет о том, что именно так поведение окон реализовано на данный момент. Поэтому в данном случае оно корректно.
"Железная логика"!
Калькулятор считает не правильно, но так реализовано. Поэтому корректно.
Бред конечно, но главное самому верить в то, что пишешь, да?

Пожелание сейчас не готов сформулировать. Хрен с ним, мож кому-то так удобней.
Но BUG извольте зафиксировать:
Цитата
Более того, если переключиться с одной вкладки на другую, где окно со свойством "Показывать на всех", является активным, а потом вернуться обратно, просто переключить вкладку туда-сюда и больше ничего, то на всех вкладках это окно вылазит на передний план.
Такое поведение для  любого  окна является некорректным.
Положение окон не должно меняться при простом переключении вкладок.
И у меня какое-то чувство дежавю: по-моему уже писал об этом несколько лет назад.
Доступные скрипты, Некорректное поведение в режиме "Показывать на всех вкладках"
 
Более того, если переключиться с одной вкладки на другую, где окно со свойством "Показывать на всех", является активным, а потом вернуться обратно, просто переключить вкладку туда-сюда и больше ничего, то на всех вкладках это окно вылазит на передний план.
Такое поведение для любого окна является некорректным.
Доступные скрипты, Некорректное поведение в режиме "Показывать на всех вкладках"
 
Цитата
Roman Azarov написал:
Данное поведение является корректным и проявляется не только на окне "Доступные скрипты" (при наличии более 2х окон на вкладке).
Возможно, вы правы в отношении других окон.
Но, поскольку окно "Доступные скрипты" является дофига большим, то мне не удобно данное поведение именно этого окна.
Т.к. скрипт может создать таблицу только на той вкладке, на которой запущен, то приходится держать окно "Доступные скрипты" на всех вкладках, чтобы не городить таблицы от всех скриптов на одной вкладке.
И чтобы окно "Доступные скрипты" не занимало полезного пространства, его часть перекрываю другими окнами. Но когда на одной вкладке запускаешь скрипт, "Доступные скрипты" на всех вкладках вылазит на передний план.
Если бы у вас в команде был бы хоть один человек, работающий (в прямом смысле этого слова) с вашим продуктом под названием QUIK, то он бы объяснил вам насколько не удобно работать со скриптами.
А разработчику скриптов - это не один раз запустил и забыл. Приходится десятки раз на дню перезапускать их
Доступные скрипты, Некорректное поведение в режиме "Показывать на всех вкладках"
 
Видео
Описание:
Две вкладки, на каждой открыто по окну, в данном случае ТТТ, а также окно "Доступные скрипты", которое перекрывается первым окном. "Доступные скрипты" делаю "Показывать на всех вкладках".
Когда активирую окно "Доступные скрипты" на одной вкладке, то на другой положение (перекрывание) окон сохраняется. Но когда запускаю Lua скрипт с созданием окна, этот порядок нарушается.
На видео окна на Вкладке 1 расположил в следующем порядке (сверху вниз): Lua-окно, ТТТ, Доступные скрипты.
Далее переключился на вкладку 2 и активировал окно "Доступные скрипты". Возвращаюсь на вкладку 1, порядок поменялся: Lua-окно, Доступные скрипты, ТТТ.
На демо сервере junior quik не передается таблица firms при смене пользователя
 
Цитата
Andrey Bezrukov написал:
сказать какой брокер когда и как загружает позиции мы не можем
Напомните, утренние позиции на срочной секции ведь брокер загружает?
Функция getParamEx возвращает нули по параметрам максимальная, минимальная цена для акций, проблемы с переходом на новую версию qlua
 
Цитата
Anton написал:
пожелаем, чтоб нам дали функцию в луа типа STRING getClassParameters(STRING classcode).
Я другое хотел предложить: возвращать таблицу вида: {["Имя параметра"] = "Формальный заголовок", }
Но не знаю, насколько это юзабельно, поэтому не стал
На демо сервере junior quik не передается таблица firms при смене пользователя
 
Цитата
Andrey Bezrukov написал:
Скрипт может "узнать" о заявке / сделках / позициях благодаря функциям обратного вызова QLUA OnOrder, OnTrade и др. или в результате обращения к таблицам заявок, сделок, позициями, ограничениям с использованием функций getItem, getOrderByNumber, getNumberOf, SearchItems.
Я в курсе.
Но если getNumberOf возвращает 0, это не значит, что позиции не открыты. Это также может означать, что клиент ещё не получил ни одной записи о позициях.

Цитата
Andrey Bezrukov написал:
можем зарегистрировать пожелание на индикацию в скрипте о том, что необходимые для отображения таблиц данные были получены с сервера после очистки
Что имеется ввиду под "необходимые для отображения таблиц данные"?
На демо сервере junior quik не передается таблица firms при смене пользователя
 
Цитата
Александр написал:
Вы же знаете, открывали вы сделки или нет.
А скрипт знает?
На демо сервере junior quik не передается таблица firms при смене пользователя
 
Цитата
Andrey Bezrukov написал:
ожидать первого OnFuturesClientHolding - также может быть использовано
Великолепный ответ!
Только если позиции по фьючерсам не открыты, будете ждать вечно.
Открытие файла и память
 
Что интересно, если переменную удалить сразу после использования, то скрипт станет занимать больше памяти.
Код
local a = 0
print(collectgarbage("count"))  --> 23.4453125

Код
local a = 0
a = nil
print(collectgarbage("count"))  --> 23.453125
isConnected и пара неприятных моментов
 
Цитата
_sk_ написал:
По второму пункту хотелось бы понять, как избежать постоянных проверок, что информация отсутствует.
Можно в OnConnected проверить список доступных классов getClassesList() и, если нужный класс ещё не загружен, то не дёргать getSecurityInfo вообще.
Но конкретно с бумагой сложнее: информация по бумаге может загрузиться в любой момент без уведомления.

Цитата
_sk_ написал:
Возможно, что при перезагрузке данных в таблицах имеет смысл блокировать запросы к функциям типа getSecurityInfo(), пока они не могут вернуть данные. Пусть скрипты подождут на этой блокировке.
Вы и сами это можете сделать тупым зацикливанием с постоянной проверкой возвращаемого результата от функции. Но есть вероятность зависнуть тут навсегда.
Обезличенные сделки, Слетают настройки списков инструментов для заказа обезличенных сделок
 
Цитата
Evgeniy Karnaukhov написал:
по какому инструменту
Пусть будет SBER.
И думается мне, что чем больше времени прошло с начала торгов, тем дольше надо ждать. Поэтому проверять лучше ближе к концу торговой сессии.
Обезличенные сделки, Слетают настройки списков инструментов для заказа обезличенных сделок
 
QUIK 8.9.0
Если установлена галка "Получать информацию по обезличенным сделкам с текущего момента", то после подключения к серверу сделки начинают поступать только через несколько минут
Снятие/перемещение заявок в стакане
 
Evgeniy Karnaukhov, ?
Highlight с дробным timeout, не работает, но возвращает true
 
QUIK 8.9
Если задано дробное значение timeout, то Highlight не работает, но возвращает true
Снять активную заявку, Выставляется заявка и через 5 сек снимается
 
Цитата
Цитата
есть ли в trans_reply код исходной отменяемой заявки
Да, есть - "order_num".
trans_reply.order_num = 0 в отменяемой заявке
get candle
 
Цитата
s_mike@rambler.ru написал:
Возможна ли такая ситуация в принципе
Но как оно на самом деле, тоже бы послушал
get candle
 
В любом случае doesExist обязателен к использованию.
get candle
 
Цитата
s_mike@rambler.ru написал:
наверное это начало новой свечи в торговой системе
Выведите в лог индекс свечи и её содержимое, мож, что-то прояснится
Функции onInit, onStop, onClose
 
Владимир,
Код
a[i][1][1] ~= 2
SP[a[i][1][1]] ~= SP[2]
SP["2"] = nil
get candle
 
doesExist
Функции onInit, onStop, onClose
 
Цитата
Sergey Gorokhov написал:
я раньше успел))
Не вы, магический шар: #41, но Владимир не понял знаков шара  :lol:
Функции onInit, onStop, onClose
 
Владимир, мельком глянул
Код
a[N][1][1]=l:sub(i+1,i+1)
ничего не смущает?
get candle
 
Цитата
возможна ли ситуация с получением данных графика, когда свеча уже имеется (учтена в  getnumcandles), но ее значение не заполнено и по getCandlesByIndex возвращаются ohlcv 0?
На диаграмме несколько графиков?
Функции onInit, onStop, onClose
 
Магический шар подсказывает, что ТС путается в типах данных: положил в массив с ключом одного типа, а ищет в ячейке с ключом другого типа. Естественно, там nil
Функции onInit, onStop, onClose
 
Что-то мне подсказывает
Скрытый текст

Код
SP[2] ~= SP["2"]
Снятие/перемещение заявок в стакане
 
Транзакция называется "Удалить все заявки по условию"
Скрытый текст
Снятие/перемещение заявок в стакане
 
Цитата
Evgeniy Karnaukhov написал:
если для инструмента, на который создавался стакан, доступна транзакция "Удалить все заявки по условию", то при нажатии на панели торговли на кнопку "Снять все активные заявки из текущего окна котировок" происходит выполнение этой транзакции; а если такая транзакция недоступна, то происходит обычное снятие заявок, как есть сейчас
А также для кнопок "Снять все активные заявки на покупку..." и "Снять все активные заявки на продажу..."

Цитата
Evgeniy Karnaukhov написал:
должно появляться окно такой транзакции
Без окна, в автоматическом режиме. С учётом #7 и #8
Снятие/перемещение заявок в стакане
 
И ещё: это должна быть опциональная настройка, чтобы пользователь сам мог выбрать, хочет ли он использовать этот тип транзакций для снятия заявок.
Снятие/перемещение заявок в стакане
 
На самом деле, по второму пункту немного сложнее, поскольку транзакция "Удалить все заявки по условию" на FORTS снимает заявки по коду базового актива, т.е. могут быть сняты заявки не только из текущего стакана.
И алгоритм в этом случае примерно следующий:
1) Определяем код базового актива
2) Пробегаемся по таблице заявок и собираем в массив активные заявки с инструментами, базовым активом, для которых является код из п.1
3) а) если среди найденных нет заявок по тому инструменту, из стакана которого подавалась заявка, то ничего не делаем, иначе
    б) если среди найденных только заявки по нашему инструменту, то применяем транзакцию "Удалить все заявки по условию", иначе
    в) снимаем все заявки по одной (как сейчас)
Снятие/перемещение заявок в стакане
 
Evgeniy Karnaukhov,
Когда мы нажимаем одну из кнопок в панели снятия заявок по условию или горячие клавиши (Ctrl + F8, Ctrl + Z, Ctrl + X), то QUIK делает следующее:
пробегает по всем активным заявкам и отправляет на сервер по одной транзакции на снятие для каждой заявки, удовлетворяющей условию.
Я предлагаю при наличии хоть одной активной заявки, удовлетворяющей условию, отправлять всего одну транзакцию "Удалить все заявки по условию".
Если эта транзакция не доступна для данного инструмента, то выполнять снятие по прежнему алгоритму.

Цитата
Evgeniy Karnaukhov написал:
Может Вы имеете в виду функцию "Снятие заявок по условию" ("Сервисы" - "Снятие заявок по условию...")?
Для этого сервиса также можно применять транзакцию "Удалить все заявки по условию".
Снятие/перемещение заявок в стакане
 
Цитата
Evgeniy Karnaukhov написал:
подходят ли уже существующие кнопки, удаляющие заявки, которые расположены на панели торговли ("Снять выделенную заявку", "Снять все активные заявки на продажу...", "Снять все активные заявки на покупку...", "Снять все активные заявки...")?
Подходят, только
Цитата
Старатель написал:
2. снимать все заявки, удовлетворяющие условию, одной транзакцией вместо по_одной_транзакции_на_каждую_заявку.
Снятие/перемещение заявок в стакане
 
Evgeniy Karnaukhov, данный функционал уже существует, но использует несколько транзакций вместо одной.
Предлагаю:
1. перемещать заявки методом drag-and-drop с помощью одной транзакции вместо двух.
2. снимать все заявки, удовлетворяющие условию, одной транзакцией вместо по_одной_транзакции_на_каждую_заявку.
Снятие/перемещение заявок в стакане
 
Добрый день.

1. Перемещать мышкой заявку в стакане транзакцией "Переставить заявки" ("Изменение заявки"), если доступен данный тип транзакции для инструмента.
Если по одной цене стоят несколько заявок, то применять операцию для последней выставленной заявки (для двух последних на FORTS).

2. Снимать заявки (панель снятия заявок по условию в стакане) транзакцией "Удалить все заявки по условию", если доступна.
Адаптивный режим
 
Цитата
Роман написал:
а что мешает
Откройте вкладку с графиками и таблицами, в т.ч. стаканами. И нарисуйте схематично, как бы вы адаптировали при изменении размеров главного окна. Думаю, сами поймёте.
Адаптивный режим
 
Цитата
Роман написал:
окно квика и окна внутри него отображаются пропорционально окну квика
Вы же в курсе, что кроме графиков, в квике существуют таблицы, которые нифига не мастабируются?
Это и была неудачная попытка изменять размеры внутренних окон пропорционально внешнему.
Адаптивный режим
 
Уже был негативный опыт.
Функции onInit, onStop, onClose
 
Цитата
Anton написал:
Вы жмете кнопку остановить, главный поток квика посылает OnStop, скрипт оттуда возвращается, главный поток квика входит в WaitForSingleObject. В этот момент мейн вызывает SetCell, что под ковром приводит к отправке сообщения окну скрипта (живущему в главном потоке). Но главный поток сообщений не обрабатывает, он стоит на WaitForSingleObject. Ваш мейн зависает в ожидании ответа на сообщение. Через 5 секунд WaitForSingleObject возвращается по таймауту, квик видит таймаут и прибивает мейн принудительно.
Цитата
Anton написал:
проверять флаг f перед каждым вызовом SetCell.

На мой взгляд, это уже зона ответственности квика: при вызове SetCell проверить не было ли команды OnStop. И если была, то игнорировать все оконные команды (раз они всё равно не могут быть исполнены) и переходить к выполнению следующих инструкций.

Цитата
TGB написал:
Наверное, стоит "выкатить", обнаруженное Вами, поддержке QUIK.
Чип&Дейл уже "спешат" на помощь.
Зависание QUIK
 
Anton, так и у меня может до нескольких дней без зависаний работать.
Но всё же проблема есть, в т.ч. в 8.9

Попробуйте следующий скрипт, также зависает:
Код
local run = true

local z = {0, 0}
local ssort = table.ssort
function OnAllTrade(alltrade)
  ssort(z, function () return true end)
end
function OnParam(class, sec)
end
function OnStop()
  run = nil
end

function f1()
  for k, v in pairs(_G) do end
end
local function f2()
  f1()
end
local function f3()
  f2()
end
local function f4()
  f3()
end

function main()
  while run do
    for i = 1, 50 do
      f4()
    end
    sleep(1)
  end
end

Зачем вложенные функции? Дело в том, что если использовать pairs непосредственно в цикле main, то скрипт раньше остановится с ошибкой
Цитата
invalid key to 'next'

Что делал, чтобы не ждать неделю и быстрее воспроизвести: заказал обезличенные сделки по всем инструментам, запустил три скрипта и по очереди каждый останавливал и запускал. Занятие довольно нудное, но результат будет быстрее.
Как убрать нуль после точки?, .0
 
Как убрать нуль после точки?, .0
 
Владимир, у меня нет навыка чтения мыслей.
В той строчке кода, что вы привели нет tonumber.
Вы можете привести полный код скрипта или продолжить возмущаться, но лучше не на этом форуме, т.к. тут общаются взрослые дяди  :lol:
Как убрать нуль после точки?, .0
 
Владимир, мой скил не так высок, чтобы по приведённому кусочку кода дать ответ
Как убрать нуль после точки?, .0
 
Цитата
Anton написал:
все остальное там это кэш информации
Кешировать степень числа (pwr10) не имеет смысла, т.к. возведение в степень быстрее в два раза, чем вытащить значение из таблицы.
А вот операции со строками в Lua на порядок дольше, т.ч. strf будет полезно.
Как убрать нуль после точки?, .0
 
Цитата
Владимир написал:
а не хочу я узнать тип переменной - мне нужно, чтобы она не меняла свой тип,
В Lua, как и большинстве (или всех?) других языков, тип переменной произвольно не меняется. Тип может измениться только при определённых действиях над переменной. И опытный программист всегда знает, какой тип переменной будет при той или иной операции над переменной.
Зависание QUIK
 
Следующий тест: запустил скрипт 1 и три скрипта 3 (дабы быстрее получить результат) с вашей патченой длл. Сделал несколько тестов.
Ошибки не дождался, т.к. QUIK зависал по уже знакомой схеме: main одного скрипта прибит, остальные скрипты крутятся, основной поток остался в состоянии ожидания.

Сейчас вышла версия 8.9. Посмотрим насколько она стабильнее.
Как убрать нуль после точки?, .0
 
Цитата
Anton написал:
Код
if nil == price then price = 0 end
Плохая практика, имхо
неужели OnParam самый быстрый?
 
Понятней не стало )) Мож, ваша ошибка, мож, баг квика, мож, кривые ручки брокера...

Цитата
Nikolay написал:
Но все же, параметры TIME и LAST синхронизированы? Т.е. если мне брокер прислал в колбеке цену по времени пол часа назад, то параметр TIME укажет это?
Если ошибка не на вашей стороне, то какие тут могут быть гарантии?
неужели OnParam самый быстрый?
 
Цитата
Nikolay написал:
Сегодня брокер выдал в OnParam по фьючерсу RIZ0 цену последней сделки из прошлого.
В 17.37 цена была одна, а колбек выдал цену где-то на пол часа назад, очень далекую от текущей.
Можете подробней? Как это произошло?
Вы только запустили робота и получили старый результат? Или работал себе робот, получал актуальные данные, и тут раз и однократно проскакивает цена из прошлого?
Сам колбек OnParam возвращает только класс и код инструмента, в котором произошли изменения. Каким образом получаете котировку?
Зависание QUIK
 
Цитата
Anton написал:
для сбора статистики предлагаю заинтересованным коллегам повторить эксперименты у себя
Первый тест: заменил длл вашей, подключился к серверу, запустил оба скрипта и, и почти сразу ошибка:
Цитата
attempt to compare number with function
Зависание QUIK
 
Цитата
Anton написал:
вы тоже наблюдаете такой эффект: если много этих тестовых скриптов запущено, таблица всех сделок не успевает обновляться, перерисовывается изредка сразу с большим шагом.
У меня в таблицу обезличенных сделок добавлен только один инструмент: либо какой-нибудь старый уже истёкший фьючерс либо какой-то неторговый. Т.ч., по факту само окно пустое, а сделки заказываю через фильтры (либо скриптом).
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 33 След.
Наверх