Избранное трейдера dusheska
IsRun = true class_code="TQBR" function main() -- Получает доступный id для создания t_id = AllocTable() -- добавить столбцы AddColumn(t_id, 1, "Бумага", true, QTABLE_STRING_TYPE, 20) AddColumn(t_id, 2, "Кол-во", true, QTABLE_INT_TYPE, 7) AddColumn(t_id, 3, "Цена покупки", true, QTABLE_DOUBLE_TYPE, 14) AddColumn(t_id, 4, "Цена текущая", true, QTABLE_DOUBLE_TYPE, 14) AddColumn(t_id, 5, "Прибыль, р", true, QTABLE_DOUBLE_TYPE, 14) AddColumn(t_id, 6, "Прибыль, %", true, QTABLE_DOUBLE_TYPE, 14) t = CreateWindow(t_id) for iRow=1, getNumberOf("depo_limits")-1, 1 do rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам" qtyBoughtLots = tonumber(rowInPortfolioTable.currentbal) limitKind = rowInPortfolioTable.limit_kind if qtyBoughtLots>0 and limitKind<1 then InsertRow(t_id, iRow)-- добавить новую строку вниз таблицы end end local rows, columns = GetTableSize (t_id) InsertRow(t_id, rows+1) -- добавить новую строку вниз таблицы для "Итого" SetWindowCaption(t_id, "Портфель: прибыли и убытки © ramirzaev@mail.ru") -- исполнять цикл, пока пользователь не остановит скрипт или не закроет окно таблицы while IsRun do if IsWindowClosed(t_id)==true then IsRun=false end local currentPrice=0 local qtyBoughtLots=0 local profitAbs = 0 local profitPerc = 0 local currentSecCode= "" local fullNameOfInstrument = "" local limitKind = 0 local rowInPortfolioTable = {} -- строка из таблицы "Лимиты по бумагам" local tableInstrument = {} -- данные "Таблицы текущих торгов" local iRowInOutTable = 1 local totalInvest = 0 local totalPortfolio = 0 local totalProfit = 0 local totalPercent = 0 for iRow=0, getNumberOf("depo_limits")-1, 1 do rowInPortfolioTable = getItem("depo_limits", iRow) -- получить текущую строку из таблицы "Лимиты по бумагам" qtyBoughtLots = tonumber(rowInPortfolioTable.currentbal) limitKind = rowInPortfolioTable.limit_kind if qtyBoughtLots>0 and limitKind<1 then -- если кол-во лотов >0 и тип лимита T0 currentSecCode = rowInPortfolioTable.sec_code fullNameOfInstrument = tostring(getParamEx(class_code, currentSecCode, "SHORTNAME").param_image or "0") --"LONGNAME" avgPrice = tonumber(rowInPortfolioTable.awg_position_price) currentPrice = GetAskPrice(currentSecCode) profitAbs = (currentPrice-avgPrice)*qtyBoughtLots profitPerc = 100*currentPrice/avgPrice - 100 totalInvest = totalInvest + avgPrice*qtyBoughtLots totalPortfolio = totalPortfolio + currentPrice*qtyBoughtLots SetCell(t_id, iRowInOutTable, 1, fullNameOfInstrument) -- "Бумага" SetCell(t_id, iRowInOutTable, 2, tostring(qtyBoughtLots)) -- "Кол-во"RemoveZero(tostring(qtyBoughtLots))) SetCell(t_id, iRowInOutTable, 3, tostring( math_round(avgPrice, 3) )) -- tostring(avgPrice)) -- "Цена покупки" SetCell(t_id, iRowInOutTable, 4, RemoveZero(tostring(currentPrice))) -- "Цена текущая" SetCell(t_id, iRowInOutTable, 5, tostring( math_round( profitAbs, 0)) ) -- "Прибыль, р" SetCell(t_id, iRowInOutTable, 6, tostring(math_round(profitPerc, 1)) .."%") -- "Прибыль, %" if profitPerc >5 then -- окрашиваем ColourRowInGreen(iRowInOutTable) elseif profitPerc<-5 then ColourRowInRed(iRowInOutTable) else ColourRowInYellow(iRowInOutTable) end iRowInOutTable = iRowInOutTable+1 end end totalProfit = totalPortfolio - totalInvest totalPercent = 100*totalProfit/totalInvest SetCell(t_id, iRowInOutTable, 1, "Итого") SetCell(t_id, iRowInOutTable, 3, tostring( math_round(totalInvest, 0) )) SetCell(t_id, iRowInOutTable, 4, tostring( math_round(totalPortfolio, 0))) SetCell(t_id, iRowInOutTable, 5, tostring( math_round( totalProfit, 0)) ) SetCell(t_id, iRowInOutTable, 6, tostring(math_round(totalPercent, 1)) .."%") if profitPerc >5 then -- окрашиваем ColourRowInGreen(iRowInOutTable) elseif profitPerc<-5 then ColourRowInRed(iRowInOutTable) else ColourRowInYellow(iRowInOutTable) end iRowInOutTable = iRowInOutTable+1 sleep(5000) -- пауза 5 сек. end --message("script table portfolio finished") end function ColourRowInRed(num_row) SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,150,150), RGB(0,0,0), RGB(255,150,150), RGB(0,0,0)) end function ColourRowInYellow(num_row) SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,255,200), RGB(0,0,0), RGB(255,255,200), RGB(0,0,0)) end function ColourRowInGreen(num_row) SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(150,255,150), RGB(0,0,0), RGB(150,255,150), RGB(0,0,0)) end function GetAskPrice(inp_Sec_Code ) local ask = tostring(getParamEx(class_code, inp_Sec_Code, "OFFER").param_value or 0) return ask end -- Округляет число до указанной точности function math_round (num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end -- удаление точки и нулей после нее function RemoveZero(str) while (string.sub(str,-1) == "0" and str ~= "0") do str = string.sub(str,1,-2) end if (string.sub(str,-1) == ".") then str = string.sub(str,1,-2) end return str end function OnStop() DestroyTable(t_id) IsRun = false end
Пост немного не по теме трейдинга, скорее его надо задавать программистам, но среди трейдеров таких полно, может поделитесь опытом.
Многолетнее использование Lua в QUIK`е подтолкнуло к идее использовать скриптовый язык в других приложениях.
Из всего немногочисленного набора того, что есть для C# удалось найти:
— NLua — 18K скачиваний в NuGet
— LuaInterface -?
— NeoLua – 50k скачиваний в NuGet
— LuBox – 1k скачиваний в NuGet
Автор проекта LuaInterface давно не поддерживает проект и прямо говорит, что NLua успешно продолжает его дело.
NeoLua – наиболее популярен среди программистов в NuGet.
LuBox показался удобным и наиболее «молодым» проектом.
Кто-нибудь из смартлабовцев использовал какую-то из этих библиотек для встраивания Lua-скриптов? Поделитесь опытом использования: плюсы, минусы, баги.
В прошлом месяце я подробно изучил вопрос о том, что происходит с накопительной частью моей пенсии. И отдал свою накопительную часть в загребущие руки частной компании. Почему? Сейчас я все объясню.
Очень короткое погружение в пенсионную систему
Непродолжительную часть времени официально работающим посетителям смартлаба родившимся после 1967 года начислялась накопительная часть пенсии. С 2014 начисления на эту часть были заморожены, и разморозка не планируется.
То, что есть, по умолчанию находится под управлением ВЭБа. Но также накопления можно передать под управление НПФ или УК. Запомните – если накопления у вас есть, значит их можно перевести, даже если вы никогда ничего никуда не писали и находитесь в дружной категории «молчунов».
Если вы когда-то переводили свои накопления в НПФ или УК, то нужно подождать 5 лет с момента перевода. Иначе весь накопленный доход исчезнет. Этого лучше избежать.
Ситуация с доходностью накоплений
Что то велосипедно-похожее иногда происходит и в нашем «опционном» мире. Я собираюсь сейчас прокомментировать несколько опционных
мнений-фокусов, вполне безобидных в текущей ситуации, но опасных при наступлении катастрофически-волатильных событий по типу «чучхэ понад усе».
Предварительные условия — обсуждается исключительно опционный рынок forts, ставки ноль.
Фокус первый.
Бытует мнение: распределение цен БА на момент экспирации, порождаемое ценами опционов, предполагает одинаковые вероятности смещения цен БА вверх или вниз.
Источник: интернеты, комментарии в них, и, увы((, Стас Бржозовский тут: https://smart-lab.ru/blog/411878.php
Факт: это полная ерунда. На самом деле, если допустить справедливость формулы Блэка для опционных цен (при условии постоянной волатильности на всех страйках), мы получим, что вероятность снижения цен на момент экспирации всегда выше, чем вероятность их роста.
Доказательство: берем и считаем в лоб. Например, при волатильности 50 и сроке до экспирации 1 год, вероятность снижения цены на момент экспирации составит 0,6. При волатильности 200, допустимой при катастрофах, ситуация будет еще интереснее. Правда в том, что матожидание распределения, порождаемого ценами опционов, совпадает с ценой БА в каждый момент. Но мало кто замечает подмену понятий и задумывается об этом.
Фокус второй.
Бытует мнение: дельта опциона колл на центральном страйке по модулю обязана совпадать с дельтой опциона пут и равняться 0,5.
Источник: многочисленные русскоязычные сайты, отдельные персонажи Смартлаба, тупые переводчики с английского на русский язык.
Факт — это вранье. Многие «канонические» авторы (Конноли, Натенберг, Мак-Миллан) действительно пишут, что дельта центрального колла ПРИМЕРНО совпадает по модулю с дельтой пута. И это правда, при низкой волатильности и малом времени до экспирации. Однако, при росте любого из этих двух показателей ситуация меняется кардинально.
Доказательство: все очень просто. Дельта центрального опциона колл (модель БШ) равна N(d1), d1>0, следовательно дельта центрального опциона колл в мире БШ всегда больше 0,5 и возрастает как с ростом iv, так и с ростом времени до экспирации. В предельном случае при бесконечной волатильности и/или времени до экспирации дельта центрального опциона колл — единица. Где живут риски неправильной оценки дельты? Сегодня — в Тихом океане. И если неистовый Ким попробует бабахнуть по душке-Дональду, то дельты опционов центральных страйков удивят многих. Пример: дельта центрального опцина колл при волатильности 50 и сроке до экспирации 1 год составляет 0,6. Каждый может в этом убедиться при помощи любого опционного калькулятора, живущего в интернетах.
Фокус третий.
Бытует мнение: вероятность выхода в деньги опциона колл совпадает с его дельтой.
Источник: интернеты и прочие сомнительные места.
Факт — это вранье дважды.
Доказательство: см первые два фокуса. Пример: вероятность выхода центрального опциона колл «в деньги» при сроке до экспирации 1 год и влатильности 50 составляет 0,4. Дельта 0,6.
Можно еще, наверное, пофокусничать с общепринятыми мнениями, но пора откланяться
PS
/М.А. Булгаков/:
«А может быть, не было никаких этих слов, а были другие на эту же музыку, какие-то неприличные крайне. Важно не это, а важно то, что в Варьете после всего этого началось что-то вроде столпотворения вавилонского.»
Мы сидели на уже знакомой террасе офиса Седого, только на этот раз в бокалах был не сок, а кое что покрепче. Пятница. Это обязывает. Седой никогда не упускал повода.
— Хочешь я открою тебе истину? — вдруг спросил он меня
— Про банки?
— Да какие нахер банки, — отмахнулся он, — настоящую ИСТИНУ.
В прошлый раз мы проверили трендовую природу индикатора RSI. Нами были получены интересные результаты, особенно при торговле основными секторами. В этот раз мы продолжим двигаться в направлении изменения индикатора RSI, но будем использовать сигнал разворота тенденции.
Рассмотрим пересечение индикаторов RSI разных периодов. Алгоритмы пишем в Quantopian на Python.
В этот раз: