Избранное трейдера billy
Подвел итоги по своему специальному облигационному счету. Год назад я положил на отдельный брокерский счет 800 000 рублей, где решил торговать только облигациями.
Через год баланс счета стал ровно 1 000 000. Т.е. за год я заработал 25% годовых. Дополнительные средства на счет не вносил, но всю прибыль реинвестировал.
Основные факторы:
1. Заходил в первичных размещениях, продавал на вторичке выше номинала.
2. Несколько раз рисковал, покупая просевшие в цене бумаги (СилМаш лучший из всех)
3. Реинвестирование купонов (появилось много бумаг с ежемесячным купоном, и это очень круто, реально повышает доходность).
В 2018 году появилось реально большое количество малых облигационных займов и если вначале я еще пытался анализировать отчетность, выбирать стоит участвовать или нет, то сейчас у меня сложились другие правила, больше математического, технического характера.
Итак,
1. Участие в первичных размещениях.
Тут обязательно надо смотреть и отчетность эмитента и организаторов (их другие выпуски), т.е. проводить большую ручную работу.
Каждому приходится зарабатывать деньги на жизнь и откладывать на будущее. Чтобы не остаться без накоплений, нужно знать о возможностях и рисках финансовых рынков.
Изучить их можно во многих российских и зарубежных университетах. Но это требует времени и денег. Для тех, кто не готов тратить много ресурсов, есть онлайн-курсы. Подготовили подборку курсов, которые помогут разобраться в основах финансов и инвестиций.
Получить высшее финансовое образование в мировых вузах тоже можно онлайн. Поиск вариантов на DistanceLearningPortal
Будет интересен тем, кто ищет вводный курс по финансовым рынкам.
Автор курса: Высшая школа экономики.
Планируемая продолжительность: 9 сессий (каждая — около двух—трех часов).
Стоимость: бесплатно, если не нужен сертификат. С сертификатом — 1836 рублей за курс.
Проблема: На текущий момент наиболее удобным и полноценным программным обеспечением (далее ПО) для автоматизации торговли на российском биржевом рынке является небезызвестный ТСЛАБ. Несмотря на несомненные плюсы в виде удобного визуального редактора для написания торговых скриптов, который позволяет писать роботов даже без знания языков программирования, есть ряд недостатков, которые делают использование данного ПО для меня крайне не практичным. И думаю не только для меня, учитывая, что средний размер счёта на Мосбирже как правило не превышает 500 тыс.р… Читать полностью по ссылке...Теперь у данного проекта появился отдельный сайт, где можно скачать актуальную версию программы, ознакомиться с инструкциями по настройке программы и запуске своего первого робота.
На выходных заполнял декларацию и решил заодно написать инструкцию как подавать 3-НДФЛ по зарубежному счету.
В отличие от российских счетов, где брокеры выступают налоговыми агентами, по зарубежному счету инвестор обязан подавать налог самостоятельно, заполняя 3-НДФЛ и подавая ее в налоговую до 30 апреля.
В дополнение к инструкции написал немного про то, как следует выбирать зарубежного брокера и привел несколько лайфхаков/своих файлов, которые помогут вам сэкономить на подаче декларации.
1) Смотрите на комиссии и покрытие зарубежных рынков (в идеале не только США, но и LSE/Азию, где обращаются некоторые российские компании). Помните про комиссию вашего банка за перевод за рубеж.
2) Обязательно — наличие лицензии SIPC. (это вещь как российское АСВ, я бы не понес деньги в банк, который не участвует в системе страхование вкладов)
3) Обратите внимание чтобы у брокера не было «банковского функционала», тогда вам не надо уведомлять об открытии такого счета налоговую и отчитываться особым образом.
По секрету скажу что хотя я активный участник стороны лонга по S&P 500, но я тоже шорчу его, но вот только это делаю не на S&P 500, и это даже не шорт.
Обо всем по порядку.
И так мы шортим америку по разным причинам, например
1. Не любим америку или завидуем
2. Считаем америку перекупленным
3. Хотим охотиться на черных лебедев
4. Хеджируемся
5. По ТВ сказали что америке хана
6. Следим за Василием
7. И другие причины
Почти во всех случаях мы хотим заработать деньги.
Посмотрим график индекса S&P 500.

Мы видим что хотя там бывают редкие периоды когда он падал на 50% или больше, но в основном и в долгосрок он прет вверх. Если мы не будем в шорте, то можем упустить момент падения, а если в шорте, то периодически будем ловить стопы, статистически не зарабатывая, а потеря деньги. Тут даже Put опционы сильно не помогут, они очень часто будут обесцениваться, при падении S&P 500 он может и не дойти до страйков наших Put опционов. То есть затраты будут больше и не известно когда рынок будет падать следующий раз, а если и будет падать то будет ли это достаточным чтобы хотя бы закрыт затраты.
Описание и тестирование в программе Wealth-Lab первых двух роботов я уже приводил. Вот соответствующие ссылки:
Тестирование рабочей свечной модели на исторических данных
Тестирование модели CandleMax в программе Wealth-Lab
Индикатор PVV (price/volume/volatility)
Тестирование робота PVVI в программе Wealth-Lab
Сейчас настало время дать краткое описание и привести тестирование в программе Wealth-Lab третьей торговой системы, которая у меня сейчас в работе.
Торговая система AVP (average volume/price) не является свечной моделью, как CandleMax, и не основана на красивой математической формуле, как система PVVI. Из трех моих спекулятивных роботов, робот AVP выдает сигналы реже всех. Тем не менее, результативность этого робота практически совпадает с результативностью робота PVVI, лишь совсем немного ей уступая.

Settings=
{
Name = "Zigzag5", -- название индикатора
delta=2, -- параметр индикатора
deltaY=1, -- параметр индикатора
linedeltaY=0.75, -- параметр индикатора
line=
{
{
Name = "zigzagline3",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,255, 0)
},
{
Name = "upline",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "lowline",
Type =TYPE_LINE,
Width = 2,
Color = RGB(0,0, 255)
},
{
Name = "declineline",
Type =TYPE_LINE,
Width = 2,
Color = RGB(255,0, 0)
},
{
Name = "upline2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(255,0, 0)
},
{
Name = "lowline2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(0,0, 255)
},
{
Name = "declineline2",
Type =TYPE_LINE,
Width = 1,
Color = RGB(255,0, 0)
}
}
}
function getradius(x, y)
return math.sqrt(Settings.deltaY*y*y+x*x)
end
function koef(val)
return 1 - 1/(1-1/val)
end
function Init()
vMin = 0
vMax = 0
vMinindex = 0
vMaxindex = 0
voldMinindex = 0
voldMaxindex = 0
upval = 0
lowval = 0
upindex = 1
lowindex = 1
veu = nil
vel = nil
curfrom = 1
curto = 1
return 7
end
function OnCalculate(index)
local printz = 0
vsize = Size()
ve = nil
veu = nil
vel = nil
curv = nil
veu2 = nil
vel2 = nil
curv2 = nil
if index == 1 then
vMin = C(index)
vMax = C(index)
vMinindex = index
vMaxindex = index
voldMinindex = index
voldMaxindex = index
ve = C(index)
else
if voldMaxindex >= voldMinindex then
if C(index) > (1 + Settings.delta/100)*vMin then
vMin = C(index)
vMax = C(index)
vMaxindex = index
voldMinindex = vMinindex
vFrom = voldMaxindex
vTo = vMinindex
printz = 1
if (C(vMinindex) > C(vsize)) and (upval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
upval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
upindex = vMinindex
end
if (C(vMinindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
lowval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
lowindex = vMinindex
end
curfrom = voldMaxindex
curto = voldMinindex
else
if vMin > C(index) then
vMin = C(index)
vMinindex = index
vFrom = voldMaxindex
vTo = index
printz = 0
curto = index
else
vFrom = vMinindex
vTo = index
printz = 0
end
curfrom = voldMaxindex
end
else
if voldMaxindex <= voldMinindex then
if C(index) < (1 - Settings.delta/100)*vMax then
vMax = C(index)
vMin = C(index)
vMinindex = index
voldMaxindex = vMaxindex
vFrom = voldMinindex
vTo = vMaxindex
printz = 1
if (C(vMaxindex) > C(vsize)) and (upval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
upval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
upindex = vMaxindex
end
if (C(vMaxindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
lowval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
lowindex = vMaxindex
end
curfrom = voldMinindex
curto = voldMaxindex
else
if vMax < C(index) then
vMax = C(index)
vMaxindex = index
vFrom = voldMinindex
vTo = index
printz = 0
curto = index
else
vFrom = vMaxindex
vTo = index
printz = 0
end
curfrom = voldMinindex
end
end
end
if (printz == 1) or (Size() == index) then
for i = vFrom, vTo do
k = (C(vTo)- C(vFrom))/(vTo- vFrom)
v = i*k + C(vTo) - vTo*k
SetValue(i, 1, v)
ve = v
end
if (Size() == index) then
ve = C(index)
if voldMaxindex >= voldMinindex then
vFrom = voldMaxindex
vTo = vMinindex
end
if voldMaxindex <= voldMinindex then
vFrom = voldMinindex
vTo = vMaxindex
end
for i = vFrom, vTo do
k = (C(vTo)- C(vFrom))/(vTo- vFrom)
v = i*k + C(vTo) - vTo*k
SetValue(i, 1, v)
end
-- up level line
if upindex ~= nil then
if C(upindex) > C(index) then
for i = upindex, index do
SetValue(i, 2, C(upindex))
SetValue(i, 5, C(upindex)-Settings.linedeltaY*C(vsize)/100)
end
veu = C(upindex)
end
end
-- low level line
if lowindex ~= nil then
if C(lowindex) < C(index) then
for i = lowindex, index do
SetValue(i, 3, C(lowindex))
SetValue(i, 6, C(lowindex)+Settings.linedeltaY*C(vsize)/100)
end
vel = C(lowindex)
end
end
if voldMaxindex >= voldMinindex then
vsign = -1
if curfrom == voldMinindex then
vsign = -1
end
if curfrom == voldMaxindex then
vsign = 1
end
-- inclined line
if curto- curfrom > 0 then
maxcurv = 0
k = (C(curto)- C(curfrom))/(curto- curfrom)
for i = curfrom, curto do
curv = i*k + C(curto) - curto*k
if vsign == -1 then
if L(i) < curv then
if maxcurv < curv - L(i) then
maxcurv = curv - L(i)
end
end
else
if H(i) > curv then
if maxcurv < H(i) - curv then
maxcurv = H(i) - curv
end
end
end
end
for i = curfrom, index do
curv = i*k + C(curto) - curto*k + vsign*maxcurv
SetValue(i, 4,curv)
curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
SetValue(i, 7,curv2)
end
end
curv = nil
end
if voldMaxindex <= voldMinindex then
vsign = -1
if curfrom == voldMaxindex then
vsign = 1
end
if curfrom == voldMinindex then
vsign = -1
end
-- inclined line
if curto- curfrom > 0 then
maxcurv = 0
k = (C(curto)- C(curfrom))/(curto- curfrom)
for i = curfrom, curto do
curv = i*k + C(curto) - curto*k
if vsign == -1 then
if L(i) < curv then
if maxcurv < curv - L(i) then
maxcurv = curv - L(i)
end
end
else
if H(i) > curv then
if maxcurv < H(i) - curv then
maxcurv = H(i) - curv
end
end
end
end
for i = curfrom, index do
k = (C(curto)- C(curfrom))/(curto- curfrom)
curv = i*k + C(curto) - curto*k + vsign*maxcurv
SetValue(i, 4,curv)
curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
SetValue(i, 7,curv2)
end
end
curv = nil
end
end
end
end
return ve, veu, vel, curv, veu2, vel2, curv2
end
В воскресенье 7 апреля я перебирал полки в шкафах, просматривая старые бумаги и выбрасывая те, которые уже не пригодятся. За долгое время накопилось много бесполезного хлама, который надо было выбросить. Какие-то старые чеки, квитанции, ненужные распечатки. Так я перебирал бумаги одну за другой, сортируя, что пойдет на выброс, а что еще может когда-то пригодиться, и вдруг на пол упала до боли знакомая старая затертая картонка. Боже мой! Как давно это было! Вроде бы не так уж давно, но на самом деле целую трейдерскую жизнь назад! Воспоминания нахлынули на меня…
Затертая замусоленная старая табличка, обычный кусок картонки и неаккуратно приклеенная скотчем распечатка. Но сколько денег она мне помогла заработать, а сколько денег благодаря ей я не потерял!

Табличка NineNot (9 “не”).
Был такой дядька. Киёси Ито. Работал в статистическом управлении и писал книжки. Интернета тогда не было, поэтому он, как и Тимофей Мартынов, делал книжки из бумаги и писал в них ручками. Писал он о теории вероятности и стохастике, то есть про кроликов, и внимание. За эти работы он получил степень доктора философии. То есть, тут не столько вопрос в математике, сколько в философии.
Дифур это такой способ записи философской мысли. Когда вы рисуете каналы по лоу на графике, вы даже не задумываетесь, что это касательная, а значит производная функции цены от времени. Для записи мысли или идеи мы воспользуемся дифурами, а потом переведем их. В общем, их особо ни кто не решает. Берут справочник производных и вуаля. dx/dt = α x => x(t) = x0 e^αt. Уравнение разряда конденсатора dx/dt. У каждого уважающего опционщика такой справочник есть. Это греки опционов. Там дифур и его значение в обычной формуле, куда можно уже цифры подставить. И все.
Из предыдущего материала мы помним. dx = µ x dt + σ x δW. Мгновенное изменение цены=среднему изменению+размеру изменения*случайное изменение. Давайте этим философским языком пообщаемся. И легче всего это понять методом Кирилла Ильинского.
В первой части мы рассмотрели «теорему о средней волатильности» где, обозначили такое свойство:волатильности могут на разных таймфреймах значительно отличаться друг от друга. Но они всегда будут со временем сходится к одному значению.
Вот, на этом свойстве и будет построен индикатор. Для индикатора нам нужны волатильности на различных таймфреймах. В качестве индикатора волатильности берутся два стандартных индикатора, но которые по сущности показывают одно и тоже.
Price Channel (PC) или ценовой канал. Индикатор представляет из себя две линии, которые ограничивают канал колебаний цены. Верхняя граница канала обозначает уровень локального максимума за прошедшие N периодов, а нижняя граница – уровень локального минимума за тот же промежуток времени. Таким образом, цена ограничивается максимальными точками колебаний – экстремумами за N периодов.
