Избранное трейдера Denis Lisin
Давненько что-то я не писал о результатах выбранной стратегии и вот повод нашелся, сегодня подбил прогнозируемые дивиденды по портфелю акций, чем и хочу поделиться
Вкратце: стратегия простая – купил дивидендные акции и держи, активное наполнение портфеля началось с 2016 года с суммы менее 50тыс. руб., основные характеристики и параметры портфеля можно найти в предыдущих записях
В прогнозируемых дивидендах ориентировался как на smart-lab.ru, так и еще на один сайт, в топе поисковика по запросу о прогнозируемых дивидендах на 2019 год. Если были разночтения между прогнозируемыми дивидендами, ориентировался на сторонний сайт (не в обиду smart-lab.ru), там информация полнее, включает не только ближайшие, но и прогноз всех дивидендов на 2019 год. Дивиденды учитывал только те, которые планируют выплатить в течение 2019 года, т.к. по моему учету они у меня попадут в текущий год, если отсечка будет в 2019 году, а выплата в 2020 году, это уже на следующий год пойдет
Таким образом, таблица прогнозируемых дивидендов на 2019 год у меня получилась следующая:
Описание и тестирование в программе Wealth-Lab первых двух роботов я уже приводил. Вот соответствующие ссылки:
Тестирование рабочей свечной модели на исторических данных
Тестирование модели CandleMax в программе Wealth-Lab
Индикатор PVV (price/volume/volatility)
Тестирование робота PVVI в программе Wealth-Lab
Сейчас настало время дать краткое описание и привести тестирование в программе Wealth-Lab третьей торговой системы, которая у меня сейчас в работе.
Торговая система AVP (average volume/price) не является свечной моделью, как CandleMax, и не основана на красивой математической формуле, как система PVVI. Из трех моих спекулятивных роботов, робот AVP выдает сигналы реже всех. Тем не менее, результативность этого робота практически совпадает с результативностью робота PVVI, лишь совсем немного ей уступая.
Вчера прямо после выхода статистики зашортил нефть… Словил короткий стоп и наблюдая как она улетает на север, очень задумался.
Как после почти 10 лет торговли я могу делать такую глупость?!
И тут же вчерашнее обсуждение на Смартлабе Василия Олейника. Упорно борется с долгосрочным сильным трендом в нефти. Всем весело, но
от такой торговли же рехнутся можно! Не может быть чтобы она сам верил что так делать правильно. Не идиот же! Тогда в чём дело? Это
болезнь! Настоящая лудомания! Дай бог у него хватит здоровья, нервов и денег на такую борьбу, но хорошо это кончиться никак не
может.
Все знают что тренд — фрэнд! А вы ему? Кто умеет высиживать тренды?
Все боятся тренда. Даже Ливермор. Известная история с пшеницей. Забрал прибыль потому что было уже много в долларах и страх потери
заставил выскочить из сильного движения.
Плавный тренд кажется слабым и сидеть в нём долго и трудно… Вот-вот же сломается.
Сильный тренд с ускорением — развернётся же резко… Надо успеть соскочить… И перевернуться поскорее. Какая возможность
заработать! Ведь теперь он так же может ломануться обратно… ну хотя бы отскок! Короче шортим все дружно Сбер, хотя бы до 220.)))
Совсем недавно я написал рецензию на книгу Стива Акелиса “Технический анализ от А до Я”. Вот эта рецензия:
Лучшая книга по техническому анализу
Книга Стива Акелиса хороша, но я бы, скорее всего, не стал о ней писать и не назвал бы ее лучшей, если бы не одна история, которая приключилась со мной в далеком 2015 году. Итак, шел 2015 год, рынок то рос, то падал, и я все больше стал смотреть в сторону относительно коротких инвестиций и даже спекуляций, ибо сильные колебания курса рубля и неустойчивая доходность лишали долгосрочные инвестиции большей части былой привлекательности.
Будучи программистом, я все больше и больше начинал смотреть в сторону технического анализа и различных паттернов. Правда, технический анализ не спешил дарить мне рабочие торговые системы. Что я только не тестировал и какие только параметры не перебирал! Казалось бы, вот она идея, но стоило ее протестировать на истории и меня в очередной раз ожидало сильное разочарование. В некотором роде мне повезло, я знал хотя бы где и куда копать. Еще в самом начале своего торгового пути я понял, что лучшие бумаги, как правило, остаются лучшими, а аутсайдеры, так и остаются аутсайдерами. Т.е. я не тратил время, нервы и деньги на ловлю падающих ножей и на усреднение убыточных позиций. Но как выжать максимум из тех бумаг, что растут и растут хорошо? Как из нескольких десятков лидеров определить ту одну-две бумаги, которые дадут максимальную прибыль?
Автор — известный в трейдерской среде 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