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

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

Страницы: 1 2 След.
Как вы определяете ликвидность инстумента?
 
Народ, закладываете ли вы в свои скрипты проверку на то, насколько инструмент ликвидный, прежде чем им торговать?
Если да, то как вы это делаете? Каким способом вы определяете, достаточно ли ликвиден инструмент для торговли?
1. Вы запрашиваете значения оборота по инструменту? Если да, то при превышении какого порога вы считаете инструмент ликвидным?2. Вы вычисляете спред между лучшей ценой продажи и покупки? Если да, то насколько мал должен быть спред, чтобы считать инструмент достаточно ликвидным?
Сколько у меня денег в данный момент времени?
 
Цитата
Alexey Ivannikov написал:
GET_CLIENT_MARGINAL_PORTFOLIO_INFO
Это на языке QPILE, а в QLua как?
Сколько у меня денег в данный момент времени?
 
Цитата
Alexey Ivannikov написал:
Цитата
Сергей Че написал:
Как мне узнать то же самое, но для фондового рынка?
Сумма всех свободных денег + стоимость всех моих купленных ценных бумаг?
Добрый день.

В целом да, также можно ориентироваться на параметр "Стоимость портфеля" в таблице "Клиентский портфель".
Функцию напишите пожалуйста, в качестве примера.
Сколько у меня денег в данный момент времени?
 
Как мне узнать то же самое, но для фондового рынка?
Сумма всех свободных денег + стоимость всех моих купленных ценных бумаг?
Получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?
 
Цитата
Oleg Kuzembaev написал:
Сергей Че, здравствуйте.

Если в день совершения сделки скрипт не работал, то получить информацию в другой день уже не получится. QUIK - интрадейная система, сервер не хранит исторических данных изменений сделок.

Вы можете запросить данные о сделках у вашего брокера, как вам рекомендовали пользователи выше.
Спасибо за совет. Я уже понял.
Короче, QUIK сохраняет только данные за текущий торговый день, со следующего дня у него полная амнезия, и он начинает всё запоминать по-новой.
Получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?
 
Цитата
nikolz написал:
Сергей Че,
Вы удивитесь, но покупает не QUIK и не Вы, а брокер, по вашему поручению, которое Вы в данном случае подаете через QUIK.
Все иное Вам только кажется.
А через Lua-скрипт?
Получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?
 
Можно ли получить данные о сделках при срабатывании стоп-ордера, когда скрипт не работает?

Пример. Цена растёт, я открыл лонг, поставил стоп-ордер под точку входа. Потом закрыл квик, выключил компьтер, и включил его через неделю.
Как узнать, по какой цене произошла сделка (сделки), когда на следующий день после открытия позиции сработал стоп-ордер и закрыл мою позицию?
Можно ли узнать данные о произошедшей сделке (сделках), когда я снова включу компьютер и открою квик?
CreateDataSource
 
Цитата
nikolz написал:
Сергей Че ,
Рекомендую почитать про потоки и не только:
Спасибо за рекомандацию, но всё-таки, что произойдёт с ИД второго скрипта, если в первом выполнить data_source:Сlose(), учитывая, как было сказано выше, что хранилище свечей одно.
CreateDataSource
 
Цитата
nikolz написал:
Сергей Че, Вы что-то путаете
Функция reateDataSource()? никакие потоки не открывает. Я вам это уже давно сказал. Вы опять пошли по кругу.
Ну окей, не "поток данных", а "источник данных", ведь именно так и переводится "CreateDataSource" - "Создать Источник Данных".
Это что-то изменило для вас?
CreateDataSource
 
Цитата
TGB написал:
Цитата
Сергей Че написал:
Сколько потоков создаст функция CreateDataSource()?
     Вы, наверное, хотели спросить: сколько хранилищ свечей создаст функция CreateDataSource()?
Ответ: одно.
И что будет, если в одном из скриптов вызвать data_source:Close()?
Другой скрипт обломается?
CreateDataSource
 
Цитата
nikolz написал:
Цитата
Сергей Че написал:
 
Цитата
nikolz  написал:
запуск каждого скрипта добавляет ровно один поток - функция main.
 То есть сколько скриптов запрашивают поток, столько же потоков запрашивает КВИК? Даже на один и тот же инстумент?
нет. Когда запускается скрипт, то функция main запускается в отдельном потоке.
Это делается  для функции main, даже если в скрипте лишь эта функция пустая.
так реализован механизм запуска скрипта.
Я не об этом.
Есть 2 скрипта. У каждого своя функция main. Каждый скрипт запрашивает данные по одноиу и тому же инструменту на одном и том же таймфрейме.
Сколько потоков создаст функция CreateDataSource()?
CreateDataSource
 
Цитата
nikolz написал:
запуск каждого скрипта добавляет ровно один поток - функция main.
То есть сколько скриптов запрашивают поток, столько же потоков запрашивает КВИК? Даже на один и тот же инстумент?
CreateDataSource
 
Цитата
nikolz написал:
В рамках одного скрипта (торгового робота) понятно, что поток будет один.
Хоть я 10 раз выполню CreateDataSource() с одними и теми же параметрами.
А если разные скрипты (торговые роботы) решили поторговать одним и тем же инструментом?
CreateDataSource
 
Цитата
Nikolay написал:
Если закрыть поток, который в кеше и используется, то будет ошибка обращения.
А разве может быть ошибка при вызове Close() для непустого data_source?
Конечный пользователь, опирающийся на руководство QLua, вообще не должен быть в курсе о внутренней кухне (кешируется там что-то или нет).
Есть функция Close(), значит она должна всё корректно закрыть.
CreateDataSource
 
Цитата
Nikolay написал:
Здесь вопрос более тонкий. Кеш сделали и ладно. Я бы не стал полагаться на GC, все же запомнить уже заказанные потоки не сложно.
А вот закрытие оных уже вопрос. Я меня есть счетчик использования потоков. Т.к. один и тот же может использоваться много раз. И по мере того, как он перестает быть необходимым счетчик уменьшается, и если он 0, то вызывается Close. Дабы закрыть поток.

Но т.к. скрипт может быть остановлен принудительно, что закрыть все открытие потоки уже не всегда будет возможно. Как себя ведет терминал при таком закрытии скрипта - не ясно. Надеюсь, что есть внутренний кеш.. В древних версиях терминала (на ранней 7-ой, кажется) при заказе потоков без закрытия или вызова GC - терминал начинал есть память.
Я думаю сделать так

Код
if sec.data_source then  -- sec - торгуемый инструмент
    sec.data_source:Close()
end
sec.data_source = _G[ 'CreateDataSource' ]( sec.class, sec.code, _G[ 'INTERVAL_M1' ] )
if not sec.data_source then
    log.error( '...' )
end
CreateDataSource
 
Цитата
nikolz написал:
Указатель на колбек записывается в таблицу. Если таблицу уничтожили, то и указатель уничтожен.
А вот и нет! Функция будет жить самостоятельно, если создана до таблицы, а в таблице только ссылка на таблицу.
Код
$ lua
Lua 5.4.8  Copyright (C) 1994-2025 Lua.org, PUC-Rio
> f = function(x) return x*x end
> f(6)
36
> t = {aaa = f}
> t.aaa(8)
64
> t = nil
> t.aaa(3)
stdin:1: attempt to index a nil value (global 't')
stack traceback:
   stdin:1: in main chunk
   [C]: in ?
> f(4)
16
CreateDataSource
 
Цитата
nikolz написал:
Эта таблица ничего не триггереет. Она просто содержит указатели на функции.
Все затертые таблицы вообще становятся недоступными и их сборщик соберет.
Так значит предыдущая функция-колббек будет по-прежнему вызываться квиком?
CreateDataSource
 
Цитата
nikolz написал:
если вызывать так:
local x=CreateDataSource(class, sec,1);
то новая таблица будет просто удалять старую.
--------------------
При повторном вызове создается новая таблица:
Код
  table: 0000027F53E0C620
table: 0000027F53E0C2A0
table: 0000027F53E0C3A0
table: 0000027F53E0C820
table: 0000027F53E0C460  
А предыдущие таблицы будут автоматически уничтожаться сборщиком мусора? Или они по-прежнему будут триггерить функцию-коллбек?
CreateDataSource
 
Что если вызвать функцию CreateDataSource для создания источника данных (ИД) несколько раз?
Функция вернёт ту же таблицу, что в предыдущий раз?
Или каждый раз будет генерировать новую таблицу с новым ИД, где снова в коллбеке будут последовательно переданы все свечи, начиная с 1-й и до текущей?
Комментарий в поле brokerref
 
Цитата
В скриптах на lua - brokerref - это поле таблиц, в которое записывается  строка формата <код клиента>/<комментарий>, которая была  подана с транзакцией в поле CLIENT_CODE.
Что-то я не понял. При подаче транзакции в поле CLIENT_CODE надо записывать именно код клиента. Причём тут комментарий?
Комментарий в поле brokerref
 
1) в скрипте в поле brokerref я могу записать любую строку, какую захочу, или эта строка должна быть вида <код клиента>/<номер поручения>, или какая-то комбинация из кода клиента + что-то своё.2) какова длина этого поля? где-то читал, что можно записать всего 20 символов, иначе транзакция отклоняется.
О торговле фьючерсами и ГО
 
Почему ГО для покупки и ГО для продажи различаются? В чём смысл?  
О торговле фьючерсами и ГО
 
Цитата
Ziveleos написал:
Цитата
Сергей Че написал:
Я прав?
Всё верно.
В этом примере на депозите должно хватать  свободных  средств на ГО под два контракта на продажу.
По-хорошему, кнопочка "R" должна была бы проверять депозит, и если денег достаточно, делать переворот одной заявкой, а если нет - то в два шага.
Но это QUIK.
Большое спасибо!
О торговле фьючерсами и ГО
 
Ответьте пожалуйста на мой вопрос
О торговле фьючерсами и ГО
 
Цитата
Ziveleos написал:
Если денег хватает, то можно и сразу перевернуть, а если нет, то в два шага.Почитайте про кнопочку "R", она тупо выставляет заявку, приводящую к перевороту позиции (-6), не дожидаясь, пока позиция закроется и ГО вернется.
Для закреплления материала.
Если у меня позиция, скажем, +3 и я продаю сразу 5 фьючерсов, то у меня заморозятся деньги в размере только 2-х ГО, потому что 3 проданных фьючерса пойдут на закрытие 3-х купленных фьючерсов (за которые я уже заплатил три ГО) и, соответственно, на закрытие позиции, и ещё 2 фьючерса — на открытие короткой позиции 2 .
Я прав?
О торговле фьючерсами и ГО
 
Цитата
Ziveleos написал:
Под -6.
То есть переворот позиции лучше осуществлять в 2 шага
1) закрытие текущей позиции
2) открытие противоположной позиции
так?
О торговле фьючерсами и ГО
 
Цитата
Ziveleos написал:
Сергей Че, когда Вы закрыли позицию +3, ГО вернулось, и Вы смогли использовать эти деньги на ГО под -3.
А если сразу открывать -6, когда ГО еще не вернулось, депозита может не хватить.
Заявка - это ещё не сделка.
Объясните механизм, пожалуйста.
-6 = -3 (закрываю позицию) + (-3) (открываю шорт)

Почему требования по деньгам в двух случаях, когда
  1. сразу продаю 6 фьючерсов
  2. два раза продаю по 3 фьючерса
О торговле фьючерсами и ГО
 
Цитата
nikolz написал:
Если Вы продаете то что уже купили то платите лишь комиссию
Если Вы покупаете то что уже продали то аналогично  
Раньше я тогровал через QUIK, и я cталкивался с такой ситуацией, когда у меня, скажем, позиция +3, и я хотел перевернуться (нажимал кнопку "R" в стакане), и QUIK не позволял мне это сделать, выдавая окно с ошибкой, где говорилось, что мне не хватает денежных средств для переворота.
Однако, когда я разбивал переворот на 2 последовательные операции (сначала закрывал текущую позицию кнопкой "C", а потом открывал пртивоположную позицию такого же объёма), то никакого сообщения об ошибке не было, а я успешно "переворачился" до позиции -3.

Почему так? Ведь если для продажи трёх уже купленных фьючерсов никакие деньги не замораживаются, а наоборот размораживается, то эти два способа должны быть эквивалентными, однако я не мог просто "перевернуться" нажатием кнопки "R".
О торговле фьючерсами и ГО
 
Цитата
nikolz написал:
Цитата
Сергей Че написал:
Допустим, я купил 2 фьючерса с ГО = 10 000 руб. Для их покупки у меня должно быть свободно минимум 2 * 10 000 руб = 20 000 руб, которые будут заморожены при покупке.
Спустся время я хочу закрыть позицию. Для этого мне надо продать два фьючерса. И для этого у меня так же должны быть свободны 20 000 руб или нет?
Получается, чтобы торговать фьючерсом с плечом Х, мне надо иметь 2 * Х * ГО руб свободных денег? Я прав? Или я где-то что-то недопонимаю?
Прикольно, Вы хотите платить и когда покупаете что-то и когда продаете что-то?  
---------------------------
Может лучше начать с чтения учебников, а не с реальной торговли?  
А можно без ёрничания?
Я в своих размышлениях отталкивался от того, что для любой торговой операции замораживаться часть денег в виде ГО.
О торговле фьючерсами и ГО
 
Допустим, я купил 2 фьючерса с ГО = 10 000 руб. Для их покупки у меня должно быть свободно минимум 2 * 10 000 руб = 20 000 руб, которые будут заморожены при покупке.
Спустся время я хочу закрыть позицию. Для этого мне надо продать два фьючерса. И для этого у меня так же должны быть свободны 20 000 руб или нет?
Получается, чтобы торговать фьючерсом с плечом Х, мне надо иметь 2 * Х * ГО руб свободных денег? Я прав? Или я где-то что-то недопонимаю?
Торговый счёт и код клиента
 
Объясните пожалуйста простым языком, что такое торговый счёт и что такое код клиента, и почему они разные при торговле разными инструментами?
Какие таблицы QUIK автоматически очищаются после окончания торгового дня или после клиринга?
 
Цитата
Dmitry Mishin написал:
Сергей Че, Если стоп-заявка GTC к концу торгового дня не исполняется и остаётся активной, на следующий день она будет получена с сервера и отобразится в соответствующей таблице.
Ну хоть стоп-ордера не пропадают.
Спасибо.
Какие таблицы QUIK автоматически очищаются после окончания торгового дня или после клиринга?
 
Цитата
Dmitry Mishin написал:
Сергей Че, добрый день.

Система QUIK - интрадейная, и все данные, полученные с сервера, обнуляются при старте нового торгового дня.

Исключением являются таблицы "Таблица истории", "Таблица изменений значений параметров", и графики. За сохранение данных из этих окон отвечает настройка "Основные настройки..." - "Программа" - "Сохранение данных" - "Сохранять для получаемых инструментов и параметров" - "Данные, отражающие текущее состояние и всю историю изменений". При включении этой настройки информация, отображаемая в данных окнах, при смене дня очищаться не будет.
А как быть с таблицей стоп-ордеров?
Она тоже очищается с наступлением нового торгового дня?
Даже когда я создал стоп-ордер "до отмены" (GTC)?
Ведь если таблица пустая, как тогда я узнаю параметры установленного мной стоп-ордера на следующий день?
Ведь я даже не буду знать есть ли стоп-ордер, активен ли он или уже по-тихому исполнится и соответственно исчез.
И я ни о том, ни о другом не буду знать, если таблица "stop_orders" пустая.
Какие таблицы QUIK автоматически очищаются после окончания торгового дня или после клиринга?
 
Какие таблицы QUIK автоматически очищаются после окончания торгового дня или после клиринга?

Например, таблица trades очищается. И если ты не успел сохранить какие-то данные в файле, то из таблицы ты уже ничего не получишь.

Какие ещё таблицы самоочищаются?
Что возвращает getScriptPath()
 
Функция getScriptPath() возвращает путь, по которому находится главный запускаемый скрипт.
А если эта функция будет вызвана в модуле, который затем импортируется (require) в главный скрипт, или в другой модуль, который в свою очередь импортируется (require) в главный скрипт, то значение этой функции всегда будет одним и тем же? Это всегда путь главного скрипта?
varmargin vs real_varmargin vs total_varmargin
 
Цитата
Izotova Liliya написал:
Сергей Че, здравствуйте.
Если вам необходима вариационная маржа по конкретной позиции, то можете использовать параметр "varmargin". Для получения суммарного значения вариационной маржи по всем позициям используйте параметр "total_varmargin".
а real_margin тогда что такое?
varmargin vs real_varmargin vs total_varmargin
 
Цитата
Izotova Liliya написал:
Сергей Че, здравствуйте.
varmargin - вариационная маржа, рассчитанная с учетом       установленных границ изменения цены;
      real_varmargin - реально начисленная в ходе клиринга вариационная       маржа. Отображается с точностью до 2 двух знаков;
      total_varmargin - суммарная вариационная маржа по итогам основного       клиринга, начисленная по всем позициям. Отображается с точностью       до 2 двух знаков.
Можно поподробнее пожалуйста.
Не вижу разницы.
Просто скажите, какое поле таблицы мне запрашивать, чтобы узнать конкретную прибыль/убыток по конкретному фьючерсу.
Спасибо.
varmargin vs real_varmargin vs total_varmargin
 
varmargin vs real_varmargin vs total_varmargin
В чём отличия этих полей в твблице getFuturesHolding ?
Сколько у меня денег в данный момент времени?
 
Цитата
BlaZed написал:
Я думаю, регистрировать коллбек, который будет вызываться при на каждом чихе (при любом измнении таблицы, например, при изменении вариационной маржи, которая изменяется постоянно) -- это не совсем правильно.
Я думаю, вручную вызвать метод getFuturesLimit в тот момент, когда я закрываю позицию (выхожу из рынка), чтобы посмотреть, сколько я заработал, сравнив полученные деньги с предыдущим знанчением.
Сколько у меня денег в данный момент времени?
 
Цитата
BlaZed написал:
Спасибо
Т.е. вызов должен быть такой?
(добавил проверку на nil, если произошла ошибка при вызове функции)
Код
function get_money()
    local t = getFuturesLimit( firmid, account, 0, "" )
    return t and ( t.cbplused + t.cbplplanned + t.varmargin + t.accruedint - t.ts_comission )
    -- ну или ...
    -- return t and ( t.cbplimit + t.varmargin + t.accruedint - t.ts_comission )
end
Цитата
Если необходимо получить информацию по фьючерсному лимиту без валюты, то в качестве curr_code задается пустая строка.
Что за фьючерсный лимит без валюты?
Я же торгую и фьючами с валютной привязкой, например индекс RTS и чисто рублёвыми фьячами, например, индекс МосБиржи.
Сколько у меня денег в данный момент времени?
 
Сколько у меня всего денег в данный момент времени (на срочном рынке)?

Это "Текущие чистые позиции" + "Плановые чистые позиции" + "Вариационная маржа" + "Накопленный доход" "Биржевые сборы" ?

Т.е. в коде это
Код
local t = getFuturesLimit( ... )
return t.cbplused + t.cbplplanned + t.varmargin + t.accruedint - t.ts_comission
Я прав? Или нет?

И какие параметры у функции getFuturesLimit()
  • firmid     - ID брокера (понятно)
  • trdaccid   - торговый счёт / аккаунт (понятно)
  • limit_type - непонятно
  • currcode   - непонятно
Объясните пожалуйста  
Рыночная заявка для торговли фьючерсами
 
Цитата
Nikolay написал:
Вы определитесь уже - хотите исполнения ордера, сдвигаете цену и платите комиссию.
Я определился уже - мне нужна активная покупка, а не пассивное ожидание.
Я разрабатываю торговый робот. Поэтому мне надо именно купить/продать, а не ждать у моря погоды.
Допустим, мои индикаторы сигналят, что будет рост, а я выставляю цену в спред, в надежде, что цена до неё дойдёт и тогда я куплю без комиссии.
Так можно профукать вход в позицию.
Рыночная заявка для торговли фьючерсами
 
Из официальной документации

Рыночная заявка для торговли фьючерсами
 
Цитата
nikolz написал:
Цитата
Сергей Че написал:
 
Цитата
Nikolay  написал:
На срочной секции нет рыночных ордеров. Можно только устанавливать ордера внутри ценовых границы последнего клиринга. Причина проста - сумма ГО зависит от цены.
Поэтому устанавливая ордер далеко от цены клиринга, ГО возрастает и существенно.
 И какую цену ставить? Текущая + сколько? (для покупки)
Может быть,  текущая + (текущая + максимум)/2  ?
Лучшая цена предложения/ спроса.  
То есть ты предлагаешь перед подачей заявки сканировать стакан?
Рыночная заявка для торговли фьючерсами
 
Ой, я немного ошибся. Я хотел предложить
(текущая + максимум) / 2  для покупки
(текущая + минимум) / 2  для продажи
Подойдёт такой вариант?
Рыночная заявка для торговли фьючерсами
 
Цитата
Nikolay написал:
На срочной секции нет рыночных ордеров. Можно только устанавливать ордера внутри ценовых границы последнего клиринга. Причина проста - сумма ГО зависит от цены.
Поэтому устанавливая ордер далеко от цены клиринга, ГО возрастает и существенно.
И какую цену ставить? Текущая + сколько? (для покупки)
Может быть, текущая + (текущая + максимум)/2 ?
Рыночная заявка для торговли фьючерсами
 
Цитата
funduk написал:
0 для срочки для рыночной сделки нельзя ставить, на сколько я помню.
А разве квику не должно быть пофиг на выставленную цену, если выставлен type="M"?
Рыночная заявка для торговли фьючерсами
 
Цитата
funduk написал:
Я использую   type="M"   и завышенную цену одновременно
А может быть можно не париться с завышенной/заниженной ценой?
А то ведь не всякую цену можно указать, она должна быть в диапазоне минимуму до максимума, заданных биржей на текущий день.
Рыночная заявка для торговли фьючерсами
 
Можно ли использовать поля type="M" и price="0" в таблице, которая передаётся в функцию sendTransaction для купли/продажи фьючерсов по рыночной цене?
Или надо использовать лимитную заявки (type="L") со специально завышенной ценой для покупки и специально заниженной ценой для продажи?
Технологические времена работы биржи
 
Цитата
Nikolay написал:
Проверять на 0 цены - это плохая затея, т.к. во-первых, есть инструменты с допустимой ценой = 0, а во-вторых, для срочного рынка во время клиринга, для фондовой между сессиями цена может "бегать" от 0 до последней.
Собственно в период, когда торги не идут, данные с сервера могут приходить какие угодно. Так что уже лучше время проверять, обеспечив точность своих часов.
У меня сделано через несколько проверок, время, статус, сделки. И если один из них не проходит, то данные не считываются, т.к. получить цену 0 как рабочую - это проблема для алгоритмов.

Вы же сами выше написали, что полагаться на время - так себе затея.
Цитата
Времена часто изменяются. Они на сайте биржи в разделе расписание торгов  есть. У Валютной секции совсем другие времена, для примера.
Страницы: 1 2 След.
Наверх