Избранное трейдера protorus
Представляю свою новую программу Утилита для QUIK «Супер таблица».
Утилита предназначена для создания различных таблиц в торговом терминале QUIK. Пользователь может самостоятельно получать различные значения таблиц QUIK, проводить расчёты и выводить результат в Супер таблицу (аналог MS EXCEL). В комплекте готовый пример «Спреды акций»:
Как можно использовать спреды фьючерс-акция?
✅ Зарабатываем процентную ставку (синтетическая облигация).
Находим наибольший годовой процент. Покупаем акции, продаём фьючерсы равного объёма. К экспирации разница нивелируется. Например, на момент написания «iСофтлайн» показывает хороший результат 26.11% годовых.
Все часто спрашивают — как работает фонд денежного рынка. Давайте разберемся в механизме и в понятиях РЕПО, КСУ, Центральный контрагент. Картинка к посту:
Начнем из далека.
Вкладчики несут деньги в банк, банк выдает кредиты, деньги каждого вкладчика не лежат мертвым грузом, а работают для прибыли банка. Разница процентных ставок по кредитами и депозитами — прибыль банка. При этом банк обязан соблюдать нормативы ликвидности для безопасной работы. Например, решат вкладчики изъять деньги, а денег нет у банка, так как выдал лишних кредитов. Иногда банку не хватает ликвидности и поэтому на межбанковском рынке популярно межбанковское кредитование, так называемые кредиты овернайт (на ночь).
Банк для поддержания ликвидности может брать короткие деньги у другого банка, у ЦБ и у фонда ликвидности. Конечно, за процент (плату).
Простыми словами как работает фонд денежного рынка: фонд берет деньги инвесторов (когда мы купили паи фонда) и под процент дает эти деньги (ту самую ликвидность) банку, когда банку ее не хватает, на срок от 1день до 3х мес.
Создание на Lua своего индикатора в графике Quik: Часть 2. Пример работы нестандартных индикаторов: спред между инструментами, прогноз Highи Lowследующего интервала; ценовых уровней по объемам
В первой части (https://smart-lab.ru/blog/930907.php) были изложены основы принципа создания своего индикатора и некоторые нюансы работы с кодом индикатора графика в Qiuk (подразумевается использование языка программирования Lua).
В данной статье немного продолжу тему нюансов кодирования индикатора и для иллюстрации приведу простой код индикатора спреда. В конце текста прикреплю видео с демонстрацией работы индикатора спреда и моих собственных индикаторов.
Небольшое лирическое отступление. Суть данных статей — показать, что делать подобные индикаторы вполне реально и не столь сложно, как может показаться на первый взгляд. Но, безусловно, требует определенных знаний в программировании. Создавать индикаторы из стандартного набора торговой системы Qiuk смысла нет – ведь они уже реализованы.
Кратко расскажу принципы и некоторые нюансы работы с графиком в Qiuk в плане создания своего индикатора (здесь и далее – подразумевается использование языка программирования Lua). В конце текста изначально хотел прикрепить видео с демонстрацией и краткими пояснениями работы моих индикаторов, но решил сделать это во второй части статьи, чтобы совместить просто иллюстрацию с небольшим анализом фьючерсов и акций.
На полноту изложения вопроса по работе с индикаторами на графике Quik не претендую. Информация будет полезна интересующимся данной темой, не рассчитана на профессионалов (которые и так все знают, умеют и реализовали – свято в это верю), но все же предполагает наличие определенного уровня знаний Lua.
Зачем мучиться со своими индикаторами? Конечно, в этом нет смысла, если вас устраивают стандартные индикаторы или отсутствуют самостоятельные подходы (методы) торговли, либо визуализация вам в принципе не требуется (не интересна).
В моем случае мне банально захотелось сделать визуализацию своего метода прогнозирования экстремумов цены следующего интервала.
Вот тут я подъяснялся у сообщества, как ИИС закрывается. Сейчас могу сказать, как он закрылся.
Сразу скажу, ситуация у меня рафинированная. ИИСу больше 3-х лет, от брокера уходить не собираюсь, на ИИСе только российские бумаги. Планировал закрыть и тут же открыть новый просто чтоб высвободить ресурсы. Сейчас планы изменились, но задача «закрыть» осталась. Так вот, решается она до неприличия просто.
Потребовался один звонок на «900». Опять думал (я всегда так думаю), что придется прорываться через автоответчики, слушать музыку, орать человеку код с кодовой карты, а то и ехать куда-нить что-нибудь подписывать. Ни хрена. Николай, Илья, Харитон, Ульяна, Яков. Послушал блаблабла от автомата секунд, наверное, 30. На «Чего вам надо?», прорычал «оператор». Ждал, что придется это повторить еще сколько-то раз (такое бывало), но нет. Соединили сразу. Изложил. Девочка переключила на другую девочку, которая задала штук 5 вопросов, типа, осведомлен ли я о том и о сем. Я тоже задал пару вопросов, убедился, что бумаги отправляются на брокерский, свободные средства — куда обычно (в моем случае, на карту). И что крайний срок обработки — 5 рабочих дней. Девочка попросила внятно подтвердить, что я хочу закрыть ИИС. Подтвердил, отправила СМС, повисела, сверились и вуаля! ИИС закрыт.
-- --СКРИПТ Niki для smart-lab.ru 260321 ревизия --------------------------------------- -- Флаг для поддержания работы функции main is_run=true fut_limit_old =0 fut_limit_max =0 kgo_old =0.5 function main( ... ) -- чудотворная функция внутри которой все работает --"r": режим чтения (по умолчанию); --"w": режим записи; --"a": режим добавления; --"r+": режим обновления, все предыдущие данные сохраняются; --"w+": режим обновления, все предыдущие данные стираются; --"a+": режим добавления и обновления, предыдущие данные сохраняются, запись разрешена только в конец файла. b бинарные файлы -- Пытается открыть файл в режиме "чтения/записи" f = io.open(getScriptPath().."\\Limits.txt","a"); -- Если файл не существует if f == nil then -- Создает файл в режиме "записи" f = io.open(getScriptPath().."\\Limits.txt","w"); -- Закрывает файл f:close(); -- Открывает уже существующий файл в режиме "чтения/записи" f = io.open(getScriptPath().."\\Limits.txt","a"); end; while is_run do sleep(1000) -- 1000 = 1 секунда --волшебная пауза в работе скрипта if getFuturesLimit("A111", "A111111", 0, "SUR") ~= nil then -- защита от пустых таблиц -- впишите ваши данные из Квика -- %c - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11) -- %x - дата (пример, 09/16/98) -- %X - время (пример, 23:48:10) seconds = os.time(); -- в seconds будет значение 1427052491 date1 = os.date("%x",seconds); -- %c - дата (по-умолчанию) (пример, 03/22/15 22:28:11) time1 = os.date("%X",seconds); -- %c - время (по-умолчанию) (пример, 03/22/15 22:28:11) --[[ liquidity_coef --NUMBER Коэффициент ликвидности cbp_prev_limit --NUMBER Предыдущий лимит открытых позиций на спот-рынке» cbplimit --NUMBER Лимит открытых позиций cbplused --NUMBER Текущие чистые позиции cbplplanned --NUMBER Плановые чистые позиции varmargin --NUMBER Вариационная маржа accruedint --NUMBER Накопленный доход cbplused_for_orders --NUMBER Текущие чистые позиции (под заявки) cbplused_for_positions --NUMBER Текущие чистые позиции (под открытые позиции) options_premium --NUMBER Премия по опционам ts_comission --NUMBER Биржевые сборы kgo --NUMBER Коэффициент клиентского гарантийного обеспечения currcode --STRING Валюта, в которой транслируется ограничение real_varmargin --NUMBER Реально начисленная в ходе клиринга вариационная маржа. Отображается с точностью до 2 двух знаков. При этом в поле «varmargin» транслируется вариационная маржа, рассчитанная с учетом установленных границ изменения цены --]] fut_limit = getFuturesLimit("A111", "A111111", 0, "SUR").cbplused_for_positions -- NUMBER Текущие чистые позиции (под открытые позиции) -- впишите ваши данные из Квика varmargin = getFuturesLimit("A111", "A111111", 0, "SUR").varmargin -- впишите ваши данные из Квика accruedint = getFuturesLimit("A111", "A111111", 0, "SUR").accruedint -- впишите ваши данные из Квика ts_comission = getFuturesLimit("A111", "A111111", 0, "SUR").ts_comission -- впишите ваши данные из Квика kgo = getFuturesLimit("A111", "A111111", 0, "SUR").kgo -- впишите ваши данные из Квика profit = varmargin + accruedint; --if math.abs(fut_limit-fut_limit_old) > 10000 then -- каждые 10000 рублей изменения ГО, слишком частый файл печати if math.abs(fut_limit-fut_limit_old) > 100000 then -- каждые 100000 рублей изменения ГО, настраиваем под себя. open_lim = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit --NUMBER Лимит открытых позиций f:write( tostring(date1).." "..tostring(time1).." ".."ГО: "..tostring(fut_limit).." ".."Профит: "..tostring(profit).." ".."Комис: "..tostring(ts_comission).." ".. "КГО: "..tostring(kgo).." Lim: "..tostring(open_lim).. "\n"); -- "\n" признак конца строки --f:write( tostring(date1).. " " ..tostring(time1).. " " .. "BID: " .. tostring(res_trans) .. " " .. "ASK: " .. tostring(MXU8ask_vol) .. "\n"); -- "\n" признак конца строки -- Сохраняет изменения в файле на диск f:flush(); fut_limit_old = fut_limit; end if fut_limit_max == 0 then fut_limit_max = fut_limit; end if ( math.abs(fut_limit-fut_limit_max) > 1000000 and fut_limit>0 ) then -- настраиваем под себя message( tostring(fut_limit) ) ----сообщение в Квик-- --message( tostring(time1) ) ---------------------------------------- отправляем сообщение в Телеграмм-- pos_free = getFuturesLimit("A111", "A111111", 0, "SUR").cbplplanned --NUMBER ГО свободных денег от позы без пониженного ГО open_lim = getFuturesLimit("A111", "A111111", 0, "SUR").cbplimit --NUMBER Лимит открытых позиций tg_message = tostring(open_lim).." ГО:"..tostring(fut_limit).." Поза:"..tostring(open_lim-pos_free) os.execute('curl "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ') -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм ---------------------------------------- -- Пример строки https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text= + Привет Квик! ---------------------------------------- fut_limit_max = fut_limit; end if math.abs(kgo-kgo_old) > 0 then ---------------------------------------- отправляем сообщение в телеграмм tg_message = tostring(kgo).." Внимание! Изменился коэффициент КГО" os.execute('curl "https://api.telegram.org/botВашиДанныеИзТелеграмм&text= + '..tg_message..' " ') -- отправляем в телегу, через винду. Вписать ваши данные из Телеграмм ---------------------------------------- -- Пример строки https://api.telegram.org/bot365877050:AAE232342348HIqifnyGSsw89U_4TK3Y/sendMessage?chat_id=202560128&text= + Привет Квик! ---------------------------------------- kgo_old = kgo; end end end f:close(); -- закрываем файл печати. end -- Остановка скрипта из Квика function OnStop(stop_flag) is_run=false end