Joomla 3.1 Templates by FatCow Coupon

SQL и биржевой график (Основные показатели фондового рынка)

Категория: Блог Опубликовано 24.05.2017

Основные показатели рынка, рыночные свойства
публикация третья


Исходные тексты, архив

Итак, у нас имеются история цен, по самым ликвидным акциям,
(где взять историю цен как, как заполнить таблицу истории из сервиса РБК я рассказал в предыдущей статье)
У финансовых рынков существует несколько очень интересных технических свойств , неэффективностей, которые позволяют инвестору рассчитывать на финансовый выигрыш.

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

Дело в том, что в экономике многие вещи взаимосвязаны между собой. И сбой в одной отрасти, циклически приводит с бою в других отраслях, и наоборот улучшение показателе одной отрасли экономики бумерангом отражается и на показателях других отраслей экономики.

Приведу пример.

Недостаток ликвидности приводит росту ставок по кредитам в финансово кредитных учреждениях
Предприятия вынуждены брать деньги под более высокие ставки, что приводит к недофинансированию структурных преобразований в компаний, и к снижению выпуска 

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

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


Поддержка сопротивление.
Поддержка сопротивление - это свойство цен достигать некоторых критических точек и начинать падение или рост именно с этих заданных точек.
Объясняется как память инвесторов, актив стоил столько-то год назад, значит дороже его брать нет никакого смысла.

Смена периодов волатильности
За спокойным рынком следует резкое движение цены.
Это свойство может объяснится наращиванием позиции во время спокойного рынка крупными игроками. 
После создания значительно позиции крупными игроками , возникает искусственный дефицит актива и цены действительно длительное время растут, привлекая к движению мелких и средних инвесторов, провоцируя их совершать покупки.

Реализация на языке SQL
Попробуем алгоритмизировать полученную информацию на языке SQL, то есть наша задача запрограммировать те особенности рынка, о которых я рассказал
Язык SQL обладает прекрасными возможностями для анализа и алгоритмизации подобных вещей. 
Для вычисления воспользуемся аналитическими функциями min, max, avg с конструкцией окна range preceding. 
Следует так же отметить , что принято расcчитывать рыночные показатели по цене закрытия - CLOSE

Поддержка - Сопротивление
Как правило это всего лишь минимум-максимум цены за заданный период, нас будет интересовать период за месяц, а так же за неделю. 
select ticker,
       dateprice,
       c,
       max(c) over(partition by ticker order by dateprice range 20 preceding) max20,
       min(c) over(partition by ticker order by dateprice range 20 preceding) min20,
       max(c) over(partition by ticker order by dateprice range 5 preceding) max5,
       min(c) over(partition by ticker order by dateprice range 5 preceding) min5
  from ohlcv


Волатильность рынка
Есть множество способов измерения волатильности рынка.
Волатильность можно например измерить если найти среднее значение разности между открытием и закрытием дня за заданный период.
Или же волатильностью можно назвать ширину разброса цен за заданный период .
-- волатильность
SELECT  ticker, dateprice, c , abs(o-c) vti,
(avg(c) over (partition by ticker order by dateprice range 200 preceding)-c) absATR
from ohlcv 


- Ширина канала min max
select ticker,
       dateprice,
       c,
       max(c) over(partition by ticker order by dateprice range 20 preceding) - min(c) over(partition by ticker order by dateprice range 20 preceding) vti20,
       max(c) over(partition by ticker order by dateprice range 5 preceding) - min(c) over(partition by ticker order by dateprice range 5 preceding) vti5
  from ohlcv



Равновесие
Для определения справедливой цены воспользуемся таким инструментом как среднее от цены закрытия на заданный период времени. Нас интересует усреднённый период за год (примерно 200 рабочих сессий)

select  ticker, dateprice, c , avg(c) over (partition by ticker order by dateprice range 200 preceding) avg200
from ohlcv


Трендовость 
Есть множество способов определения тенденции рынка, мы возьмем следующий способ
Будем определять существующую на рынке тенденцию по границе, ближайшего ценового канала, то есть текущая цена должна быть ниже предыдущего минимума-максимума ценового канала.
Цена выше предыдущего максимума , тенденция восходящая, ниже минимума нисходящая 
Возможно, такой способ не очень точный , однако для определения тенденции нам этого будет достаточно

Обьединим построенные запросы в одно общее представление View, в котором будут отражены рассчитанные выше рыночные показатели

create or replace view priceind
as
(
select 
  ohlcv.ticker ticker, 
  ohlcv.dateprice dateprice,
  ohlcv.o o,
  ohlcv.h h,
  ohlcv.l l,
  ohlcv.c c,
  ohlcv.v v,
  avg(c) over (partition by ticker order by dateprice range 200 preceding) avg200,
  max(c) over(partition by ticker order by dateprice range 20 preceding) max20,
  min(c) over(partition by ticker order by dateprice range 20 preceding) min20,
  max(c) over(partition by ticker order by dateprice range 5 preceding) max5,
  min(c) over(partition by ticker order by dateprice range 5 preceding) min5,
  avg(abs(o-c)) over (partition by ticker order by dateprice range 20 preceding) absATR,
  max(c) over(partition by ticker order by dateprice range 20 preceding) - min(c) over(partition by ticker order by dateprice range 20 preceding) vti20,
  max(c) over(partition by ticker order by dateprice range 5 preceding) - min(c) over(partition by ticker order by dateprice range 5 preceding) vti5
  from ohlcv
)


Чтобы проверить результат скопируем данные из указанного запроса в Ексель , построим по ним график, и посмотрим, что у нас получилось
select c,ticker,dateprice,c,avg200,max20,min20,max5,min5,absATR,vti5,vti20
from priceind where ticker = 'SBER'


все индикаторы рынка рассчитаны правильно и корректно отображаются на графике
Просмотров: 58