Suntor написал: А внутренняя таблица «all_trades» будет содержать сделки для обоих этих инструментов вперемешку.
У меня в коде нет фильтра по инструменту, но есть в "Заказ данных/ Поток котировок", и код выдает индекс аккурат на 1 меньше номера последней строки в QUIK. Т.е. если ничего не делать с полученной через "Создать окно" таблицей, связь всё-таки есть...
Порядковый номер строки, который мы видим в таблице Рабочего месте QUIK, не совпадает с индексом этой строки, да? (Замучилась искать ошибку в
Код
for n=getNumberOf("all_trades")-1,0,-1 do
local trade = getItem("all_trades", n)
if trade then
last = last or n
end
end
message("№ последней сделки: "..last)
В большинстве выложенных на форуме примеров для проверки флага используется bit.band, а не bit.test. Причем не для проверки нескольких флагов одной формулой (тогда предпочтение bit.band было бы понятно), а по одному. С чем это связано?
Игорь Б написал: Если в скобках ложь. "and" вернет ложь. "or" будет сравнивать ложь и stop_order вернет stop_order . Если в скобках истина . "and" вернет min_stop_order . "or" будет сравнивать min_stop_order и stop_order. Вернет min_stop_order (т.к.min_stop_order - истина).
Да, да, всё верно излагаете. Я так и читала, только с личным глюком. Респект за терпение!
Ну и глюк у меня случился!!! Конечно, знак не перепутан, это у меня глаза min_stop_order.condition_price и stop_order.condition_price местами перепутали! Мозг-то на больничном. Извините! Игорь Б, спасибо за попытки объяснить!
Игорь Б написал: Т.е. первую строку нельзя сравнивать с куском второй.
Вы на другой мой чайниковский вопрос отвечали... Но всё равно непонятно. Не надо первую строку ни с чем сравнивать. Её надо убрать. Само сравнение есть во второй.
Игорь Б, При первом проходе присваивается значение stop_order (т.к. min_stop_order = nil). При втором, если в stop_order нужное нам меньшее значение, оставляется первое min_stop_order.condition_price (неравенство в скобках - истина, min_stop_order - истина, соответственно, "and" берет min_stop_order, а "or" на нем же и останавливается). Где я ошибаюсь?
min_stop_order = min_stop_order or stop_order
min_stop_order = (min_stop_order.condition_price <= stop_order.condition_price) and min_stop_order or stop_order
Логическая операция первой строки полностью присутствует во второй. Зачем она, первая строка?
Suntor написал: Да и вообще, то что вы описали можно сделать без всяких сортировок в одном цикле прохода по таблице стоп-заявок. Ну типа такого:
Здорово! Для моих целей - за глаза! Спасибо большое!
Вот тут
Код
min_stop_order = min_stop_order or stop_order
min_stop_order = (min_stop_order.condition_price <= stop_order.condition_price) and min_stop_order or stop_order
зациклился мой мозг минут на 15 на первой итерации, а на второй ушел на больничный... Если знак не перепутан (ищем мы минимум), поясните, пожалуйста.
Таблицу min_stop_order Вы не объявляете фигурными скобками, потому как она автоматом перенимает тип stop_order или это с nil связано?
Из спортивного интереса, SearchItems тут сэкономит миллисекунду? Вроде того:
Код
function fn(par)
if par==4 then
return true
else
return false
end
end
local i = SearchItems("stop_orders", 0, getNumberOf("stop_orders")-1, fn, "condition")
local min_stop_order = nil
for i=0, #i-1 do
local stop_order = getItem("stop_orders", i)
min_stop_order = min_stop_order or stop_order
min_stop_order = (min_stop_order.condition_price <= stop_order.condition_price) and min_stop_order or stop_order
end
Задача: выудить из таблицы стоп-заявок активную стоп-заявку определенной направленности и вида с минимальной стоп-ценой. Вопрос: Можно ли командами из скрипта отфильтровать таблицу, чтобы исключить заявки с посторонними флагами, видами и др. параметрами, и отсортировать, чтобы интересующая заявка получила заведомо известный индекс 0 или getNumberOf-1 ?
Suntor, спасибо за объяснения, помогаете сориентироваться.
Код только начинаю писать, поэтому показать нечего. Пришла к следующему алгоритму: При первом запуске скрипта,он перебирает последние тики/цены сделок до нахождения значений "текущая цена"+ х пунктов и "текущая цена"- х пунктов. Проверяет какое из значений было последним и присваивает соответственно 0 и 1 переменным "тренд вверх" и "тренд вниз", перебирает тики после значения "текущая цена" +/- х пунктов, находит и присваивает переменным "минимум", "максимум" значение или nil. Это только при запуске. Дальнейшее определение "тренда" и экстремума получается сравнением цены с его предыдущим значением. С учетом упорядоченности цен в таблице и растущей индексации от старого к новому тику, получается, что при получении каждого изменения, перебирать вообще не нужно. Или рациональнее для загрузки получать новые данные порциями и перебирать, зато реже обращаться к терминалу? При наступлении события "текущая цена" -/+ х пунктов >/< мин./макс. меняется тренд и скрипт перетряхивает заявки, стоп-заявки. Они находятся на удалении от текущей цены, сильные движения редки (и вообще скрипт пишу в помощь рукам), поэтому опоздать с сигналом нестрашно. Но опять же вопрос, а нужна ли эта жертва или получение каждого тика/сделки не больше грузит терминал, процесс? Ещё скрипт снимает лимитки по ходу движения, ориентируясь на цену. В остальном, т.е. при работе с заявками оперирует таблицами заявок и стоп-заявок. Вот. И с
Suntor, спасибо большое за хитрое решение - наверняка пригодится. Но мне да, нужны последние экстремумы, причем период переборки неопределенный (типа трала). Думала, просто запоминать последний максимум/минимум и сравнивать с текущей ценой. А тут вон засада с пропущенными значениями. Придется перебирать. Теперь думаю что "легче" по загрузке, таблица обезличенных сделок что ли? Или всё-таки прибегнуть к колбэкам для меньшего кол-ва итераций. Боюсь я их - повесят квик.
Борис Гудылин написал: Много вариантов есть: можно "монтекарлить" по срезам таблицы текущих торгов (OnParam - last) с риском пропустить экстремум, можно привязаться к графику по идентификатору, можно пропускать через себя все сделки (OnAllTrade), про варианты с CreateDataSource Вы уже знаете. У них у всех есть свои достоинства и недостатки, иногда даже опасности, свои временные характеристики.
Что посоветуете для отслеживания экстремума с минимальной загрузкой скрипта и терминала (скорость не нужна - заявки выставляются ранее, а вот само значение минимума/максимума принципиально для расчетов)? Думала пользоваться именно таблицей текущих торгов, и тут ваше сообщение... Все тики перелопачивать не хотелось бы, а большая свеча может захватить оба экстремума... Эх. Мозг заболел.
Существует ли такой и если есть, где можно его увидеть? (Хочу дополнить его открытием нескольких разнонаправленных заявок и зациклить - получу вполне себе робота, сеточно-тралового).
(Кстати, что такое "максимум или минимум цены последней сделки"? У сделки одна цена.)
Ну т.е. от абсолютной цены инструмента устанавливается, ага? Объясните, пожалуйста, практический смысл этого, например для si.
Треш какой-то!!! Выше предложение зарегистрировано, одобрено 2 года назад!!! Где исполнение?! Тут в какую ветку не сунься, "зарегистрировано и признано целесообразным", а в квике по сей день только лимитку выставить можно. Слов нет! На госбюджете вы сидите что ли? Откуда такое нежелание развивать продукт?! Что ваще меняется в квике в этих бесконечных обновлениях, оформление что ли? Просто треш, треш, треш (а уместнее тут мат)...
Zoya Skvorcova написал: Ирина,добрый день. То что пожелание было зарегистрировано, не значит что оно в будет реализовано в следующей версии. На текущий момент пожелание находится на рассмотрении. В связи с этим возникли вопросы: какую проблему либо задачу Вы планируете решить добавлением знака в тейк профит.
Обычно сообщают о ходе рассмотрения, а тут тишина, вот я и напомнила.
Поясняю, зачем нужен выбор знака. Тейк профит с противоположным знаком - это по сути стоп лосс с трейлингом, т.е. использоваться может для гибкой фиксации убытка с минимальными потерями и от определенного уровня, а не сразу от уровня сделки, как это происходит, если использовать тейк профит. Конкретно в моем случае такая заявка нужна для поэтапной фиксации прибыли. Я выставляю 10 тейк профитов на покупку через каждые 50 пунктов. Допустим, цена резко полетела вниз, собрала все мои заявки и исполнились они по одной цене. Тут я выставляю тейк профит на продажу всех фьючей по цене на 50 пунктов выше закупки. И вот в момент, когда тейк профит на продажу зазеленеет (начнет отсчет максимума), нужно, чтобы выставился тейк профит на покупку 4 фьючей, но никак не раньше, чтобы не произошло дополнительной покупки без продажи уже имеющихся фьючей. При этом стоп лимит использовать не хочу, т.к. если цена развернется, зачем покупать дороже. Вот.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Zoya Skvorcova, добрый день. Стоп цена по другой бумаге не то же самое, что обычный стоп-лимит в данном случае получится? Нужно, чтобы min/max рассчитывались, как в тейк-профите. Если такого нет, предлагаю добавить в тейк-профит выбор знака >=/<=, как в стопе по другой бумаге.
Ну что там с трейлинг стопом? Мне вот понадобилась заявка на покупку по цене выше текущей, но с трейлинг стопом, т.е. тейк-профит, но активизирующийся не сразу, а как стоп-лимит. Подскажите, может можно такую соорудить через комбинацию заявок. Никак не соображу как...
Если доступ к логину U0114628 невозможно восстановить, сделайте, пожалуйста, так:
Цитата
Alexey Ivannikov написал: Или, как вариант, если аккаунт уже есть, нужно будет просто раз в два месяца заново регистрироваться и сообщать нам о своём желании оставить за собой ранее присвоенный торговый счёт и код клиента, мы также, конечно, пойдём Вам навстречу.
Новый логин: U0116336. А нужен U0114628 со счетом SPBFUT00524. Заранее спасибо.
Zoya Skvorcova написал: Ирина ,Добрый день. Нет, до конца года не получиться продлить. Права продлили на месяц, до 13.11.2017,но это уже второе продление и может случиться так, что в ближайшее время логин станет недоступен. В таком случае Вам придёт пройти регистрацию ещё раз
Ну вот появилась ошибка "Crypto error: Соединение установить не удалось. Возможно, Вы используете ключи, которые не зарегистрированы на сервере. Сообщение об ошибке: "Connection was closed by peer: Can't get message size from net"". Это из-за продления? Можно реабилитировать счет?
Вы можете зарегистрироваться еще раз, вам придет письмо со вторым торговый счетом, потом нам сообщите ваш логин и оба торговый счета. Мы сделаем настройки.
Благодарю! Вот счета: SPBFUT00524 с логином U0114628 и SPBFUT00577 с U0114688.