Избранное трейдера Denis Lisin
Совсем недавно я написал рецензию на книгу Стива Акелиса “Технический анализ от А до Я”. Вот эта рецензия:
Лучшая книга по техническому анализу
Книга Стива Акелиса хороша, но я бы, скорее всего, не стал о ней писать и не назвал бы ее лучшей, если бы не одна история, которая приключилась со мной в далеком 2015 году. Итак, шел 2015 год, рынок то рос, то падал, и я все больше стал смотреть в сторону относительно коротких инвестиций и даже спекуляций, ибо сильные колебания курса рубля и неустойчивая доходность лишали долгосрочные инвестиции большей части былой привлекательности.
Будучи программистом, я все больше и больше начинал смотреть в сторону технического анализа и различных паттернов. Правда, технический анализ не спешил дарить мне рабочие торговые системы. Что я только не тестировал и какие только параметры не перебирал! Казалось бы, вот она идея, но стоило ее протестировать на истории и меня в очередной раз ожидало сильное разочарование. В некотором роде мне повезло, я знал хотя бы где и куда копать. Еще в самом начале своего торгового пути я понял, что лучшие бумаги, как правило, остаются лучшими, а аутсайдеры, так и остаются аутсайдерами. Т.е. я не тратил время, нервы и деньги на ловлю падающих ножей и на усреднение убыточных позиций. Но как выжать максимум из тех бумаг, что растут и растут хорошо? Как из нескольких десятков лидеров определить ту одну-две бумаги, которые дадут максимальную прибыль?
Из этого следует, что, скорее всего, чёрное золото находится в 3) (трёшке в нескольких размерностях), цели которой по фибо 67-68. Импульс, прошедший с октябрьского максимума является скорее волной С в плоской коррекции, чем заходным или (разметка здесь). То есть ещё раз подтверждена высочайшаю вероятность приведённой здесь разметки.Автор — известный в трейдерской среде mehanizator. Создатель сайта для алгоритмических трейдеров long-short.pro
Книга является квинтэссенцией многолетнего опыта автора в области исследований свойств рынка и разработки механических торговых систем.
Являясь практическим руководством к действию, книга глава за главой проводит читателя в мир систематизированной торговли, правил, алгоритма принятия решений и проверки тех или иных гипотез.
Состоит из 4 последовательно связанных глав. Внимание следует уделить всем главам, даже несмотря на то, что кажется что в начале книги автор льет воду. На самом деле воды в книги нет, описательные разделы поведения рыночных участников и свойств рынка необходимы в начале книги, чтобы в последующем читатель смог формировать рабочие гипотезы и, проверив их затем на тестах, выйти на устойчивую алгоримическую (системную) торговлю.
Рекомендую к прочтению всем, кто хочет отойти от импровизации и перейти на системный трейдинг — позволит сэкономить кучу времени и избежать иллюзий простоты этого вида деятельности.


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. Мгновенное изменение цены=среднему изменению+размеру изменения*случайное изменение. Давайте этим философским языком пообщаемся. И легче всего это понять методом Кирилла Ильинского.





