Избранное трейдера Маркин Павел
Начнем, как водится, с приятного. Наш конкурс вызвал необыкновенный ажиотаж. 122 человека согласились рискнуть своими $1,5 тыс., чтобы попробовать выиграть BMW. Как мы уже говорили, победил Аркадий Рачков из Москвы под псевдонимом Напористый. За три месяца конкурса он увеличил стоимость своего пакета более чем втрое — на 207%, что соответствует доходности 860% годовых. Чтобы добиться этого, Напористый заключил 942 сделки, то есть в среднем он совершал около 15 сделок в день. Как и было обещано, победитель получил автомобиль BMW.
В интервью нашему корреспонденту Напористый отметил, что активно работает на рынке с 1995 года. Чем занимался до кризиса, господин Рачков сказать отказался.Напористый заявил, что всегда с пренебрежением относился к адептам как технического, так и фундаментального анализа. Более того, он даже не читает касающихся рынка новостей — если они, конечно, не попадут случайно ему на глаза: считает, что это не нужно, а все необходимые сведения уже содержатся в динамике котировок и объемах торгов. В общем, налицо не раз описанный в американской литературе «телетайпный гений»...
https://www.kommersant.ru/doc/356925


Дискуссии о правильных и неправильных методах вычисления дельты опциона. Дошел до темы «Липкая денежность» против «липкого страйка».
Больше всего смущает то, что в работе Блэка и Шолеса, на которую постоянно ссылаются оппоненты, нет вообще никаких упоминаний о «кривой волатильности», волатильность у БШ есть константа. Чем «кривее» кривая IV для конкретного рынка, тем меньше модель БШ подходит для его описания, это вся информация, которую кривая IV в себе содержит.
Спор о том, следует ли учитывать ее наклон при вычислении дельты, подобен спору о количестве чертей, способных уместиться на острие иголки. Мне кажется, правильнее изменить модель БШ, чем стараться подогнать ее неверные результаты под реальные рынки.
Напомню об одном из возможных подходов к такой модификации.
1. Собираем статистику — набор исторических пар {d(Fut),d(ImpVol)};
Где d(Fut) – дневное приращение БА
d(ImpVol) – приращение волатильности опционов на центральном страйке за тот же день.
Добрый.
В одном из видео автор рассказывал об уровнях и использовал индикатор фрактал. Но для того чтобы потенциальные точки находились быстрее, он использовал ассиметричный показатель, например, 4 слева и 3 справа.
Такой индикатор можно построить с помощью Lua.
Параметры: количество свечей слева и справа
Отображение в виде треугольников. Один треугольник было плохо видно, я добавил несколько )
Второй раз пошло легче. Работаем дальше
Исходник (версия «лесенкой»)
скачать
Версия, реализующая логику схожую с типовым индикатором

В своей торговле применяю комбинации рыночных и лимитированных заявок, (методику описывал ранее, "Настоящая торговая стратегия." и "US500: Объемы больше, спреды уже!" ). Временами количество одновременно работающих стратегий зашкаливало за сотню и на некоторые из них не хватало денег под выставление заявок, они отключались, иногда ломая логику работы связанных с ней стратегий. В QUIK в таблице «Состояние счета» считается цифра — «Свободно» — свободные средства под заявки, но сходу вытащить ее из Lua у меня не получилось. И пришлось вписать расчет этой величины в робота.
Сегодня предлагаю вашему вниманию доработанный скрипт Fn044.lua (https://yadi.sk/d/O-6JzZdXkOxyow)

в котором реализован расчет свободных средств для заявок на ФОРТС с учетом имеющихся контрактов и заявок.
Один в один вывести не получилось, как смог.
As is, и все такое!

--переменные
keyRateCB = 7.5
classCode = "TQOB"
function CreateTable()
t_id = AllocTable()
AddColumn(t_id, 0, "Бумага", true, QTABLE_STRING_TYPE, 15)
AddColumn(t_id, 1, "Цена", true, QTABLE_DOUBLE_TYPE, 15)
AddColumn(t_id, 2, "Доходность, %", true, QTABLE_DOUBLE_TYPE, 15)
AddColumn(t_id, 3, "Дюрация, лет", true, QTABLE_DOUBLE_TYPE, 15)
AddColumn(t_id, 4, "Купон, %", true, QTABLE_DOUBLE_TYPE, 15)
AddColumn(t_id, 5, "Премия к ЦБ, бп", true, QTABLE_INT_TYPE, 15)
AddColumn(t_id, 6, "Погашение", true, QTABLE_STRING_TYPE, 15)
t = CreateWindow(t_id)
SetWindowCaption(t_id, "ОФЗ")
end
function string.split(str, sep)
local fields = {}
str:gsub(string.format("([^%s]+)", sep), function(f_c) fields[#fields + 1] = f_c end)
return fields
end
function getParamNumber(code, param)
return tonumber(getParamEx(classCode, code, param).param_value)
end
function formatData(prm)
return string.format("%02d.%02d.%04d", prm%100, (prm%10000)/100, prm/10000)
end
CreateTable()
arr = {}
sec_list = getClassSecurities(classCode)
sec_listTable = string.split(sec_list, ',')
j = 0
for i = 1, #sec_listTable do
secCode = sec_listTable[i]
securityInfo = getSecurityInfo(classCode, secCode)
short_name = securityInfo.short_name
if short_name:find("ОФЗ 26") ~= nil then
j = j + 1
r = {}
r["short_name"] = short_name
r["price"] = getParamNumber(securityInfo.code, "PREVPRICE")
r["yield"] = getParamNumber(securityInfo.code, "YIELD")
r["duration"] = getParamNumber(securityInfo.code, "DURATION")/365
couponvalue = getParamNumber(securityInfo.code, "COUPONVALUE")
couponperiod = getParamNumber(securityInfo.code, "COUPONPERIOD")
r["coupon"] = ((365/couponperiod) * couponvalue)/10
r["bonus"] = (r["yield"] - keyRateCB)*100
r["mat_date"] = getParamNumber(securityInfo.code, "MAT_DATE")
table.insert(arr, j, r)
end
end
table.sort(arr, function(a,b) return a["duration"] < b["duration"] end)
for j = 1, #arr do
row = InsertRow(t_id, -1)
SetCell(t_id, row, 0, arr[j]["short_name"])
price = arr[j]["price"]
SetCell(t_id, row, 1, string.format("%.2f", price), price)
yield = arr[j]["yield"]
SetCell(t_id, row, 2, string.format("%.2f", yield), yield)
duration = arr[j]["duration"]
SetCell(t_id, row, 3, string.format("%.2f", duration), duration)
coupon = arr[j]["coupon"]
SetCell(t_id, row, 4, string.format("%.2f", coupon), coupon)
bonus = arr[j]["bonus"]
SetCell(t_id, row, 5, string.format("%.0f", bonus), bonus)
mat_date = arr[j]["mat_date"]
SetCell(t_id, row, 6, formatData(mat_date), mat_date)
end