Избранное трейдера SergP

по

Machine Learning для .Net постепенно оживает.

Machine Learning для .Net постепенно оживает.

https://habr.com/ru/company/microsoft/blog/447414/

ML.NET — это кроссплатформенная среда машинного обучения с открытым исходным кодом (Windows, Linux, macOS) для разработчиков .NET. Работая с ML.NET, разработчики могут использовать существующие инструменты и навыки для разработки и внедрения AI в свои приложения, создавая пользовательские модели машинного обучения для распространенных сценариев, таких как Sentiment Analysis, Recommendation, Image Classification и многого другого!

  • Ключевые слова:
  • Mach

Чего почитать алготрейдеру

Классика:
John C. Hull «Options, Futures, and Other Derivatives»
Перевод (8-е издание): Джон К. Халл «Опционы, фьючерсы и другие производные финансовые инструменты»
Основные модели оценивания финансовых инструментов:
Tomas Bjork «Arbitrage Theory in Continuous Time»
Перевод: Томас Бьорк «Теория арбитража в непрерывном времени»
Тоже в основном про оценивание финансовых инструментов. Имхо, читается попроще, чем Bjork:
Paul Wilmott «Paul Wilmott on Quantitative Finance» (трёхтомник)

Легкое чтиво про HFT для начинающих:
Irene Aldridge «High-Frequency Trading: A Practical Guide to Algorithmic Strategies and Trading Systems»
Нестареющая классика; рекомендуется к прочтению перед следующей книгой:
Maureen O'Hara «Market Microstructure Theory»

( Читать дальше )

Сравнительный анализ в российском нефтегазовом секторе. Часть 1.

Российские нефтегазовые компании, разумеется за исключением вечно опаздывающего и некогда народного достояния Газпрома, дружно отчитались по МСФО за 2018 год, а значит самое время обратиться к их сравнительному анализу и актуализировать перспективность инвестиционных идей по каждой из них.

Все финансовые отчеты вы можете найти на financemarker.ru

Хороший год для нефтегазовых компаний

В качестве предисловия я спешу вам ещё раз напомнить, что минувший год для российских нефтегазовых компаний оказался крайне удачным, отметившись крайне редким сочетанием в нашей стране, когда цены на нефть демонстрируют уверенный рост, а курс отечественной валюты к американскому доллару умудряется даже снижаться. Понятное дело, что этот своеобразный феномен легко объясняется витающими в воздухе рисками жёстких антироссийских санкций со стороны европейских стран и, в первую очередь, США, что оказывает серьёзное давление на рубль. Но для нас, инвесторов, эта математика в минувшем году принесла исторически высокие цены на рублебочку (предлагаю именно так упрощённо называть котировки цен на нефть, представленные в рублёвом эквиваленте), а потому финансовые показатели российских нефтяных компаний в 2018 году получили внушительную поддержку, а дивидендная доходность стала ещё более аппетитной.



( Читать дальше )

Такие разные ВДО (высокодоходные облигации). Инфографика годовых отчетностей. Иметь или не иметь?

В выборке — 6 компаний, отражающих многоликость сектора ВДО (высокодоходных рублевых облигаций). Компаний, конечно, больше. Но предлагаем то, что успели разобрать. 

Выводы сразу:
  • Не нравится Ред Софт
  • Тревожит Софтлайн
  • Надеемся на продолжение бурного роста ДирекЛизинга, чтобы облигационный долг был полностью оправдан
  • Роделен, Легенда, Goldman Group, несмотря на разницу масштабов и бизнесов, вызывают уважение и, как минимум, для нас попадают в лист положительных рекомендаций. 
Далее — таблицы, гистограммы и краткие замечания.
Такие разные ВДО (высокодоходные облигации). Инфографика годовых отчетностей. Иметь или не иметь?

Выручка. Гиганты и не только.
Такие разные ВДО (высокодоходные облигации). Инфографика годовых отчетностей. Иметь или не иметь?

( Читать дальше )

Основы самоконтроля 5. Сила воли, ч. 2

В предыдущей статье мы рассмотрели основные характеристики силы воли и главные факторы, определяющие её восстановление. Теперь необходимо разобраться, как грамотно распоряжаться данной силой.

Часто думают, что при обычном течении дел сила воли не используется, что это сила, к которой прибегают исключительно в чрезвычайных ситуациях. Однако это не так. Как показал Баумейстер, для человека испытывать желание – это норма, а не исключение. И около четверти времени бодрствования — по меньшей мере, 4 часа в день — люди тратят на сопротивление своим желаниям (обычно это желания поесть, поспать, отвлечься от работы, заняться сексом, посидеть в интернете). Причем, только этим случаи использования силы воли, конечно же, не ограничиваются. Она также задействуется, например, при принятии решений [3]. Сила воли нужна нам очень часто, поэтому необходимо ответственно подходить к её использованию, иначе при заключении сделок мы можем оказаться в состоянии истощенного эго.



( Читать дальше )

STATDIVVOL индикатор статистического отклонения с учетом объема

индикатор статистического отклонения с учетом объема
STATDIVVOL индикатор статистического отклонения с учетом объема

Settings={
Name="STATDIVVOL",
period=10,
  line=
  {
    {
      Name="curve",
      Color=RGB(0,0,255),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="line",
      Color=RGB(255,0,0),
      Type=TYPE_LINE,
      Width=1
    }
  } 
}

function Init()
  return 2
end

function OnCalculate(index)
  local sum1=0
  local sum2=0  
  if index < Settings.period then
    return nil, nil
  else   	
    for i=index-Settings.period+1, index do  
      if C(i) > O(i) then
        sum1 = sum1 + (C(i) - O(i))*V(i)
        sum2 = sum2 + (C(i) - O(i))*V(i)
      else
        sum2 = sum2 + (O(i) - C(i))*V(i)
      end  
    end 
    sum1 = sum1/sum2    
  end
  
  return sum1, 0.5

end

с весовыми коэффициентами
STATDIVVOL индикатор статистического отклонения с учетом объема

( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

zigzag с уровнями на lua под quik

индикатор:
https://dropmefiles.com/yZqHe
Модифицировал zigzag в плане добавления ближайших уровней к текущей цене:
zigzag с уровнями на lua под quik
код индикатора:
Settings=              
        {                          
            Name = "Zigzag3",   -- название индикатора
            delta=2,                  -- параметр индикатора                          
            line=                                     
                {                               
                    {  
                        Name = "zigzagline3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(120,90, 140)
                    },
                    {  
                        Name = "upline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "lowline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    }					
                }
       }


function Init()

  vMin = 0
  vMax = 0
  vMinindex = 0
  vMaxindex = 0
  voldMinindex = 0
  voldMaxindex = 0
  upval = 9999999
  lowval = 9999999  
  upindex = 1
  lowindex = 1  
  veu = nil
  vel = nil

  return 3
end


function OnCalculate(index)
  local printz = 0
  vsize = Size()	  
  
  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 > C(vMinindex) - C(vsize)) then
		  upval = C(vMinindex) - C(vsize)
		  upindex = vMinindex
		end
        if (C(vMinindex) < C(vsize)) and (lowval > C(vsize)- C(vMinindex)) then
		  lowval = C(vsize) - C(vMinindex)
		  lowindex = vMinindex
		end		
		
		
      else     
        if vMin > C(index) then
          vMin = C(index)
          vMinindex = index
          vFrom = voldMaxindex      
          vTo = index
          printz = 0
        else
          vFrom = vMinindex 
          vTo = index
          printz = 0
        end 
      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 > C(vMaxindex) - C(vsize)) then
		  upval = C(vMaxindex) - C(vsize)
		  upindex = vMaxindex
		end
        if (C(vMaxindex) < C(vsize)) and (lowval > C(vsize)- C(vMaxindex)) then
		  lowval = C(vsize) - C(vMaxindex)
		  lowindex = vMaxindex
		end			
      else 
        if vMax < C(index) then
          vMax = C(index)
          vMaxindex = index
          vFrom = voldMinindex    
          vTo = index
          printz = 0
        else  
          vFrom = vMaxindex  
          vTo = index        
          printz = 0
        end
      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  

		if upindex ~= nil then
		  if C(upindex) > C(index) then		
            for i = upindex, index do
              SetValue(i, 2, C(upindex))
            end  	
            veu = C(upindex)	
          end 		  
		end
		if lowindex ~= nil then
		  if C(lowindex) < C(index) then
            for i = lowindex, index do
              SetValue(i, 3, C(lowindex))
            end  			
		    vel = C(lowindex)
		  end
		end		



      end
    end

  end   
  return ve, veu, vel
end
  • обсудить на форуме:
  • Quik Lua

Сложности в алгоритмизации боковика

Приветствую!


В предыдущей статье писал, о целях поиска локального боковика с помощью алгоритма. Расскажу с какими сложностями при этом приходится сталкиваться.

1 Что есть боковик? почему в одном случае мы считаем что это боковик, а в другом похожем случае это не является боковиком?
2 Размер боковика! Локальный боковик может быть как 0.1% от цены так и несколько процентов от цены. 
Так же можно описать множество пунктов, но они все смежные будут с выделенными двумя пунктами. 

Как определить, что рынок возле той или иной цены остановится и пойдет обратно? только не постфактум, а именно онлайн. Да, мы рисуем уровни руками, или же смотрим на объемы и тд, но изначально никто не знает где и почему цена остановилась. Мы всегда наблюдаем уже постфактум, либо это синусоида цены, либо  накопление объемов на уровне и тд. А значит мы с определением боковика всегда будем опаздывать от реального рынка. 
Второй же пункт, это границы бокового движения. Пример сбера, последние две три недели он гулял в большом диапазоне от 20300 до 21000 грубо говоря, но при этом были и локальные уровни остановки цены в пределах 100-200р канала. В таком ракурсе получается, что при движении от нижнего канала к верхнему с учетом остановок, можно получать 300-400р с движения если отталкиваться от того, что цена вышла из маленького боковика и движется к большому. 
Именно эти сложности приходится преодолевать при алгоритмизации. Ведь алгоритм должен сам определить боковое это движение или вялотекущее направленное. 
Пока что не придумал ничего толкового. Есть идея, которую наполовину реализовал
1 проверяю выше закрытие предыдущего или нет, и строю верхний канал по большему значению
2 аналогично для нижнего канала, проверяю ниже мы предыдущего закрытия или нет. 
3 слежу за ситуациями при которых верхнее значение канала как и нижнее значение не менялось более 60минут (это уже параметр, можно и без него конечно, через счетчик получив просто силу канала, например что мы 5 часов не вышли за границы, или же например сколько раз «кололи» канал но вернулись в его границы и тд)
4 канал считается не действительным при резком закреплении цены выше его границ, допустим большой минутной свечой закрылись выше/ниже границ
5 границы канала должны меняться после направленного движения и новой остановки
6 размах от верхнего к нижнему значению, не должен превышать Х% от цены 

Какие минусы
1 Процент размаха дает возможность смотреть маленький ли канал в данный момент или большой, но это является параметром, а значит может привести к «лудоманству». Каких либо других возможностей поиска локального боковика пока что, не видится возможным, потому остановился на этом
2 Я всегда опаздываю за ценой. Если действовать сразу и брать с первых же баров определение боковика, то будет очень большое количество ложных определений, и соответственно, множество не правильных входов
3 Любые остановы движения цены, ломают логику и идет поиск очередного боковика, обычно это преждевременно получается. 
4 Ложное расширение боковика, которое можно определить только постфактумом и нужно перерисовывать границы. 
Ниже примеры в картинках
 Сложности в алгоритмизации боковика
Ложный выход из боковика



( Читать дальше )

Основы самоконтроля 2. Управление тревогой

Обсуждая философию трейдинга, мы отмечали неизбежность убыточных сделок. Возможность потери является неотъемлемой характеристикой торговли. Обычная же реакция на потенциальную потерю – это тревога, эмоциональное переживание, в основе которого лежит страх [2].

Страх способен оказывать очень сильное влияние на человека. Основное влияние страха на мышление заключается в сужении внимания и его концентрации на опасности. Чем сильнее страх, тем существеннее ограничение восприятия и мышления, тем больше человек движим одним лишь стремлением устранить угрозу, избежать опасности [2]. Ограничения мышления, вызванные страхом, создают идеальные условия для возникновения у трейдера иррациональных стремлений (напр., выйти из сделки раньше цели; пропустить сделку, чтобы не рисковать дневной прибылью и т.д.). По замечанию Дугласа, страх является источником 95% ошибок на рынке [8].

В связи с этим трейдеру важно серьезно подойти к вопросу управления своей тревогой. Для начала необходимо четко понять её причины: детально определить все риски, и понять, какие из них являются наиболее значимыми. Определив причины тревоги, нужно предпринять действия, направленные на её уменьшение.



( Читать дальше )

....все тэги
UPDONW