Roman Azarov написал: В виду данного нами ранее ответа
Цитата
Egor Zaytsev написал: Технически может, но таких случаев в бою мы не встречали. Возможно и существует такая конфигурация, но надо у брокера выяснять и смотреть его настройки.
Однозначно сказать нельзя.
Другими словами в квике в общем случае нет однозначного соответствия торговый счет -> фирма? Но в форме ввода заявки нет идентификатора фирмы. Как же квик определяет, по какой фирме совершать сделку?
Будет ли корректно работать функция получения фьючерсных позиций без указания фирмы?
Код
function getFuturesHoldingEx(ACCOUNT, SEC_CODE, TYPE)
if TYPE == nil then TYPE = 0 end
local n = getNumberOf("futures_client_holding")
if n == 0 then return nil end
local index = SearchItems("futures_client_holding", 0, n-1, function (trdaccid, sec_code, type)
if sec_code == SEC_CODE and trdaccid == ACCOUNT and type == TYPE then
return nil
else return false end
end, "trdaccid,sec_code,type")
if index then
return getItem("futures_client_holding", index[1])
else return nil end
end
Roman Azarov написал: Состояние сессии - TRADINGSTATUS
Странно, в описании шлюза:
state Состояние сессии Поле state может принимать следующие значения: 0 Сессия назначена. Нельзя ставить заявки, но можно удалять.
А в QUIK TRADINGSTATUS: 0.000000 = "закрыта"
Цитата
Roman Azarov написал: Формальные заголовки всех прочих транслируемых (в ваш терминал) параметров ТТП можно посмотреть используя вывод по DDE.
А как можно вывести по DDE параметры с биржевыми именами
Цитата
Незнайка написал: inter_cl_begin Время начала промежуточного клиринга inter_cl_end Время окончания промежуточного клиринга inter_cl_state Состояние промежуточного клиринга
В таблицах после обновления не видны первые буквы тикеров в первой колонке, как исправить и есть ли формат таблиц?, В таблицах после обновления не видны первые буквы тикеров в первой колонке, как исправить и есть ли формат таблиц?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB написал: очередь реализована таким образом, что запись (из основного потока QUIK) и чтение (из потока main) в ней выполняется без синхронизации (никаких лишних переключений возможных при синхронизации)
Что имеется ввиду? Пока объект помещается в очередь (буквально - записывается значение в таблицу Lua) или читается из очереди, другой поток стоит. От переключений не ушли ))
Я - пользователь ПО, на форуме которого вы пишите. И высказываю своё мнение, что если кому-то одному не нравится существующая функциональность, то обычно пишут "добавить опциональную настройку".
Цитата
Евгений написал: при создании других (стандартных) таблиц Quik логика отображения строк с вашей логикой не совпадает
Это не моя логика. Стандартные таблицы Quik заполняются сверху вниз (Раздел 3. Просмотр информации).
Цитата
Евгений написал: самыми актуальными строками считаются верхние
Кем считаются? Пример такой стандартной таблицы?
Цитата
Евгений написал: Под созданием таблицы и добавлением строк я имею в виду создание таблицы при помощи Lua
Из первого сообщения это не очевидно. SetSelectedRow(id, 1) в помощь.
Владимир написал: Вы решительно надоели своей назойливой тупостью. С Вами разговаривать не о чем, Ваша "квалификация" многократно подтверждена здесь Вами же.
Кто бы говорил. Есличё, в этом споре я ни за кого. Но афтару этих слов хочется ответить этими же словами в каждой ветке форума
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB написал: Дело в том, что цикл вида: = .. при большом количестве повторений (а я предполагаю что это может быть) в Lua заметно нагружает управление памятью.
Ваши слова заставили задуматься. Что такое "нагружает управление памятью" я не понял. Но убедился, что при большом количестве склеиваемых строк (от нескольких десятков и выше) выгоднее (в плане скорости) все строки загнать в таблицу, а затем склеить в одну с помощью table.concat. При огромном количестве строк (более 100) скорость склейки в цикле существенно падает (нелинейно). Правда, не знаю, для каких практических задач может потребоваться склейка огромного количества строк. Например, для сделок используется ~73 параметров, и запись в одну строку из массива строк с помощью table.concat всего лишь процентов на 10% быстрее, чем в цикле.
На выходе вместо Lua-таблицы получается какая-то нечитаемая "каша". Странный выбор... или у нас разное понимание понятия "сереализация". Чем обусловлен выбор такого формата? Он ведь труден для восприятия.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Артем написал: Колбек указывает только на порядковый номер обновлённой свечки в источнике данных, но не указывает к какому источнику данных она принадлежит.
Цитата
Артем написал: Гораздо лучше когда можно объявить колбек и отправлять его в датасорс, и при вызове он сам объявит к какому датасорсу он принадлежит.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Владимир написал: дайте юзеру возможность САМОМУ определять тип данных
Это в Lua есть.
Цитата
Владимир написал: Добрая половина проблем тут же снимется.
Только не в вашем случае. Ещё Крылов написал басню, про таких:
Код
К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.
Артем написал: есть определённый список таблиц, без данных из которых невозможно начать автоматическую торговлю. Вот их и ждём.
или
Цитата
swerg написал: экспериментально установить, что через 5 минут после подключения и/или через 5 минут после начала торговой сессии - данные в терминале на нашем компьютере и нашем интернете - точно актуальные
ненадёжные. Есть множество факторов, от которых зависит продолжительность загрузки данных, о многих мы и не подозреваем даже. Ну получили вы 100500 строк в таблице спустя 5 мин. И что? Это все или еще не все?
Артем написал: не ждать заполнения таблиц которые однозначно будут пустыми
Как это в коде заранее запрограммировать? Тут подразумевается, что пользователь пишет скрипт для автоматизированной торговли, не с тем, чтобы потом подсказывать ему: "тут ждать, тут не ждать".
Сделок нет, потому что ждем, когда таблицы заполнятся. А таблица сделок не заполняется, потому что мы не торгуем, спим. Нормально чё, курим бамбук, Артем сказал спать: "пока спишь, данные с сервера сами приходят".
Артем, подсказка: чтобы в таблице появилась сделка, надо ее совершить. По другому она ну никак не появится, хоть ты год жди.
Готов за скромную плату модерировать ваш форум. А то он превратился в какую-то помойку. Вроде, уважаемая организация... в сфере IT даже, а форум, как в школьной локалке. В каждой второй теме визги, какой язык лучший, и старпёры "уважаемые" программисты меряются пись, кто здесь "эксперт в Lua".
Артем написал: Можно проверять объём строк в таблицах и спать пока он равен нулевому.
Так во многих таблицах количество строк и будет нулевым, пока вы спите. Откуда, например, взяться заявкам, сделкам, позициям по фьючерсам etc., если вы спите?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Сидят в песочнице зверята и хвастаютя: "Я дальше всех умею прыгать", - говорит Зайчонок. "А я быстрее всех бегаю в колесе", - говорит Бельчонок. Медвежонок слушал-слушал и говорит: "А я…, а у меня… А я вам щас всем пи[цензура] дам!"
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB написал: Дело в том, что цикл вида: <строка1> = <строка1> .. <добавляемая строка> при большом количестве повторений (а я предполагаю что это может быть) в Lua заметно нагружает управление памятью.
В чём это выражается?
Цитата
TGB написал: Вы же можете получать свою строку следующим образом: local str = "" for k,v in next, dump_tbl (<Параметры>) do str = str .. v end или модифицировать код функции dump_tbl.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
TGB написал: Комментариев обсуждения функции cоздания последовательности ключей я насчитал более двадцати. Это одна из самых простых функций из списка API OS_Quesha
Ставить дополнительную библиотеку только лишь для создания уникальных ключей - не лучшее решение.
Цитата
TGB написал: 1. Запрос последовательности ключей (number): Cl_LuaGL () Результат функции: number - глобальный ключ системы формата: <Номер запус- ка/перезапуска системы >(старшие, оставшиеся разряды, начиная с 6-го )<Счетчик запросов ключей после запуска/перезапуска системы>(6 десятичных разрядов)
<Номер запуска/перезапуска системы > сохраняется в каком-то файле на диске? Тогда такой вариант можно и без библиотеки сделать. Прочитать из файла последнее значение, увеличить на 1:
Код
local LaunchNumber = (file:read("*n") or 0) + 1
Сохранить новое значение в файл. И далее использовать, например:
TGB написал: Примером простой (классическая задача на рекурсию), но, наверное, полезной функции из раздела 10 является универсальная функция печати переменных dump_str.
Преобразование одной таблицы в другую... Сомнительная польза.
Цитата
TGB написал: функцию dump_str можно вызвать в любой момент для любой глобальной переменной скрипта с тем, чтобы распечатать ее с выдачей в журнал отладки.
Может, лучше сразу распечатать таблицу в виде строки, без конвертации в другую таблицу?
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
local trans_id_start = os.time () - 1546290000
local trans_id = trans_id_start + getUniqTransID()
Вот так ID должны быть уникальны, независимо от количества запущенных роботов.
Наврал. Надо доработать алгоритм.
Цитата
Игорь Б написал: Я уникальность обеспечиваю фиксированием момента времени включения скрипта, а не совершения транзакции. А уже дальше, если в скрипте есть сделка, то как обычно, к полученному случайному числу +1.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
BlaZed написал: Расчет на 10 одновременно работающих роботов, у каждого робота свой robot_id от 0 до 9
Есть идеи, как сделать уникальный trans_id в разных роботах без необходимости задавать свой диапазон (robot_id) внутри каждого робота (или их копий)? Вместо trans_id_count можно использовать миллисекунды из os.sysdate(). Но
Цитата
Nikolay написал: вероятность отправки транзакции двумя скриптами одновременно есть.
Средства разработки многопоточных скриптов в QUIK., OS_Quesha, свидетельство регистрации в Роспатенте № RU 2020612905. Бесплатная для некоммерческого использования.
Anton написал: По задумке подтягиваться за ценой , когда та растет, и стоять на месте, когда не растет. Исполнится, когда цена откатится от очередного пика.
Это трейл-стоп-лимит так должен работать.
Я не верно написал. Стоп-лимит также не может быть трейл. Еесли мы говорим о лимитной заявке, которая сразу выставляется на биржу, иначе, при чём здесь штраф за бесполезное выставление заявок?
Или я чего-то не понимаю.
Цитата
Anton написал: Исполнится, когда цена откатится от очередного пика.
Объясните мне, как заявка исполнится, если цена пойдёт в обратную от заявки сторону?
Anton написал: По задумке подтягиваться за ценой, когда та растет, и стоять на месте, когда не растет. Исполнится, когда цена откатится от очередного пика.
Это трейл-стоп-лимит так должен работать. Тейк-профит же исполняется против рынка.
shr540i написал: да хоть просто сделай новый тип заявки и назови его трэйл-профит и сделай его как выставляемую по условию достижения профит цены обычную лимитку у которой потом при движении рынка в нужную сторону динамически меняется лимит. и все проблемы будут решены
Есть штраф за бесполезное выставление заявок . Юзер выставит такой трейл с большим отступом, через пару часов после активации брокер влетает на штраф, кто его оплачивать будет?
А в чём смысл заявки? Постоянно убегать от текущей цены? А исполниться она когда должна?