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

по

Прикладная широта рынка (объяснение категорий акций под капотом индексов - много картинок)

Этот большой пост предназначен как справочный для работы с таблицами в постах серии «S&P500 под капотом», крайне рекомендуется для углублённого понимания концепций. Не пропустите следующий большой исследовательский пост, он будет посвящён анализу двух последних вершин рынка и курвфиттингу созданию правил маркет-тайминга на основе подкапотных категорий.

Традиционное измерение широты

Анализ широты рынка нужен для определения участия масс в движении. В общем случае для этого используются счётчики Advances/Declines и линия A/D на их основе.

 

2019-06-07
New Highs / Lows   Adv   Dec  Unch  AdvVol  DecVol UnchVol  A/D   A/DV
 ----------------------------------------------------------------------
   NYSE  187   51  1377   570    64  2059.3  1023.9    92.2  2.42  2.01
 NASDAQ  105  133  1563   952   146  1389.9   461.0    68.0  1.64  3.01
   AMEX    7   10   129    78    33   251.1    20.7    17.6  1.65 12.11
  Total ---------------------------------------------------------------
   4912  299  194  3069  1600   243  3700.3  1505.6   177.8  1.92  2.46



Модифицированное измерение широты

Недостаток стандартных A/D-счётчиков в том, что любой незначительный подъём на $0.01 считается, как advance, и любое незначительное падение считается как decline. Поэтому целесообразно применять фильтр по росту/падению цены, например, считать за advance/decline только если цена поднялась/опустилась на $0.03 и более:

2019-06-07
New Highs / Lows   Adv   Dec  Unch  AdvVol  DecVol UnchVol  A/D   A/DV
 ----------------------------------------------------------------------
   NYSE  187   51  1260   475   276  1860.9   853.1   461.4  2.65  2.18
 NASDAQ  105  133  1344   754   563  1336.5   370.4   212.0  1.78  3.61
   AMEX    7   10    93    42   105   239.7    10.3    39.4  2.21 23.16
  Total ---------------------------------------------------------------
   4912  299  194  2697  1271   944  3437.1  1233.9   712.7  2.12  2.79


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

Backtrader - первые шаги

Продолжаю учить язык программирования Питон.
Начал разбираться с фреймворком backtrader.
https://www.backtrader.com/
Он позволяет качать котировки с YahooFinance и анализировать их. Можно гонять разные стратегии, считать сколько заработал или потерял. По себе знаю, что самое трудное — сделать первые шаги. Потом всё идёт гораздо легче. Так вот, описываю первые шаги, чтобы получить вот такую картинку. Это код из базового примера с их заглавной страницы, я сам ничего не писал. 
Backtrader - первые шаги
Это стратегия по пересечению скользяшек. На графике видно, что все сделки убыточные (вверху красные кружочки). При удачных сделках они были бы синие. Но дело не в убыточности отдельной стратегии, а в том, чтобы освоить фреймворк.
1. Качаем питон и устанавливаем https://www.python.org/
2. Запускаем чёрное окошко — cmd.exe
3. В командной строке пишем:
pip install backtrader
это установит фреймворк, а потом

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

Судак-Тудак (робот)

Алгоритм данной торговли был описан уважаемым Гном  (https://smart-lab.ru/blog/499606.php) и, поскольку я являюсь любителем различных теорий Мартингейла и усреднения, написал робота по этой стратегии.

Подробно на алгоритме останавливаться не буду — читайте по ссылке у Гнома, там очень хорошо всё расписано.

Здесь — немного измененная реализация. Отличие в том, что позиции открываются не через равные промежутки цены, а чуть шире: еще должно прийти хотя бы минимальное подтверждение, что дальше не полетит (в данном случае использован вход обратно в канал Боллинджера, но это несложно поменять на что угодно).

Если полетит против нас вертикально, мы хотя бы не будет бессмысленно открывать кучу сделок на мгновенной длинной вертикальной палке.

Итак, представляю: «Судак-Тудак» Универсальный (одновременно для акций и фьючерсов).

Судак-Тудак (робот)

Если хотите добавить инструменты (а они добавляются в массив aTickerList), не забудьте вписать их данные в массивы:



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

Тестирование робота PVVI в программе Wealth-Lab

    • 11 апреля 2019, 22:11
    • |
    • AlexChi
  • Еще

 

Введение


Торговая система PVVI основана на индикаторе PVV (price/volume/volatility). Данный индикатор связывает в единую формулу цену, объем и волатильность. Краткое и очень эмоциональное описание истории появления этой формулы я привел в своей предыдущей статье:

Индикатор PVV (price/volume/volatility)

Т.к. по образованию я математик, а по профессии программист, то первым делом сразу же после формализации торговой системы PVVI я закодировал одноименного робота, который и служит мне верой и правдой уже более 3 лет.

В этой статье приведены результаты тестирования робота PVVI в программе Wealth-Lab.

Краткое описание робота PVVI

Разумеется, я не раскрою секрет полученной формулы, но краткое описание основных особенностей этой торговой системы, разумеется, приведу. Итак, вот основные характеристики робота PVVI:

  1. Это краткосрочная спекулятивная стратегия, среднее время удержания позиции составляет 3 дня.
  2. Торговля осуществляется на дневном таймфрейме.
  3. Сделки совершаются только в лонг.
  4. Покупка осуществляется за несколько минут до закрытия торгов.
  5. Стоп-лосс и тэйк-профит равны одной среднедневной волатильности по бумаге за 10 последних торговых дней (2 недели).


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

Индикатор ожидаемого движения для опционной торговли (Часть 2 устройство индикатора)

    • 05 апреля 2019, 11:25
    • |
    • FZF
  • Еще

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

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

Price Channel (PC) или ценовой канал. Индикатор представляет из себя две линии, которые ограничивают канал колебаний цены. Верхняя граница канала обозначает уровень локального максимума за прошедшие N периодов, а нижняя граница – уровень локального минимума за тот же промежуток времени. Таким образом, цена ограничивается максимальными точками колебаний – экстремумами за N периодов.
Индикатор ожидаемого движения для опционной торговли (Часть 2 устройство индикатора)



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

Робот "Два Боллинджера" с исходниками

Хорош философствовать. Давайте писать более полезные посты.
Итак, робот на двух графиках Боллинджера.
Общий принцип:
1) На цену накладываются два графика Боллинджера: с периодами 20 и 120 (назовем их local и global).
2) В зависимости от параметра внутри робота, входим либо когда цена входит внутрь local-Боллинджера (ContrTrendFlag=1), либо выходит из него (ContrTrendFlag=0).
3) Дополнительный фильтр: Лонг только когда когда мы в верхней половине global-Боллинджера, шорт — если в нижней.
Данные робот берет из графиков, так что график должен быть открыт, и прописаны идентификаторы.

График с двумя Боллинджерами выглядит примерно так:

Робот "Два Боллинджера" с исходниками

Настройки на цене и индикаторах не забудьте:

Робот "Два Боллинджера" с исходниками

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

STATDIV3 доработанный индикатор для quik на языке lua

если индикатор больше 0, то покупаем, если ниже то продаем

скачать можно здесь:dropmefiles.com/09FCu
как устанавливать смотрите предыдущие статьи: https://smart-lab.ru/blog/528424.php
название STATDIV3 это доработанный STATDIV


поведение индикатора на графике:
STATDIV3 доработанный индикатор для quik на языке lua


сам код индикатора:
Settings={
Name="STATDIV3",
period=50,
  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
    },
    {
      Name="MA",
      Color=RGB(0,0,255),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="MA2",
      Color=RGB(0,128,128),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="line2",
      Color=RGB(0,0,255),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name="line3",
      Color=RGB(0,128,128),
      Type=TYPE_LINE,
      Width=1
    }
  } 
}

function Init()
  cache_ind={}
  cache_ind2={}
  cache_ind3={}
  return 2
end

function OnCalculate(index)
  if index < Settings.period then
    return nil
  else
    local sum1=0
    local sum2=0
    local sum0=0
    local sum02=0
    local sum03=0
    for i=index-Settings.period+1, index do  
    do
      if C(i) > O(i) then
        sum1 = sum1 + C(i) - O(i)
        sum2 = sum2 + C(i) - O(i)
      else
        sum2 = sum2 + O(i) - C(i)
      end  
    end 
    cache_ind[index] = sum1/sum2    
    if index > Settings.period+12 then 
--[[
      sum0 = 1*cache_ind[index]+
            (1)*cache_ind[index-1]+
            (1)*cache_ind[index-2]+
            (1)*cache_ind[index-3]+
            (1)*cache_ind[index-4]+
            (1)*cache_ind[index-5]+
            (1)*cache_ind[index-6]+
            (1)*cache_ind[index-7]+
            (1)*cache_ind[index-8]+
            (1/2)*cache_ind[index-9]+
            (1/3)*cache_ind[index-10]+
            (1/4)*cache_ind[index-11]+
            (1/5)*cache_ind[index-12]
--]]
      sum0 = 1*cache_ind[index]+
            (1/2)*cache_ind[index-1]+
            (1/3)*cache_ind[index-2]+
            (1/4)*cache_ind[index-3]+
            (1/5)*cache_ind[index-4]+
            (1/6)*cache_ind[index-5]+
            (1/7)*cache_ind[index-6]+
            (1/8)*cache_ind[index-7]+
            (1/9)*cache_ind[index-8]+
            (1/10)*cache_ind[index-9]+
            (1/11)*cache_ind[index-10]+
            (1/12)*cache_ind[index-11]+
            (1/13)*cache_ind[index-12]

    end
--[[
    sum0 = sum0/(1+1+1+1+1+1+1+1+1+1/2+1/3+1/4+1/5)
--]]
    sum0 = sum0/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13)

       
    cache_ind2[index] = sum0
    if index > Settings.period+50 then   
      sum02 = 1*cache_ind2[index]+
            (1)*cache_ind2[index-1]+
            (1)*cache_ind2[index-2]+
            (1)*cache_ind2[index-3]+
            (1)*cache_ind2[index-4]+
            (1)*cache_ind2[index-5]+
            (1)*cache_ind2[index-6]+
            (1)*cache_ind2[index-7]+
            (1/2)*cache_ind2[index-8]+
            (1/3)*cache_ind2[index-9]+
            (1/4)*cache_ind2[index-10]+
            (1/5)*cache_ind2[index-11]+
            (1/6)*cache_ind2[index-12]
--[[
      sum02 = 1*cache_ind2[index]+
            (1/2)*cache_ind2[index-1]+
            (1/3)*cache_ind2[index-2]+
            (1/4)*cache_ind2[index-3]+
            (1/5)*cache_ind2[index-4]+
            (1/6)*cache_ind2[index-5]+
            (1/7)*cache_ind2[index-6]+
            (1/8)*cache_ind2[index-7]+
            (1/9)*cache_ind2[index-8]+
            (1/10)*cache_ind2[index-9]+
            (1/11)*cache_ind2[index-10]+
            (1/12)*cache_ind2[index-11]+
            (1/13)*cache_ind2[index-12]
--]]
    end
    sum02 = sum02/(1+1+1+1+1+1+1+1+1/2+1/3+1/4+1/5+1/6)
--[[
    sum02 = sum02/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13)
--]]
    cache_ind3[index] = sum0 - sum02
    if index > Settings.period+50 then   
      sum03 = 1*cache_ind3[index]+
            (1/2)*cache_ind3[index-1]+
            (1/3)*cache_ind3[index-2]+
            (1/4)*cache_ind3[index-3]+
            (1/5)*cache_ind3[index-4]+
            (1/6)*cache_ind3[index-5]+
            (1/7)*cache_ind3[index-6]+
            (1/8)*cache_ind3[index-7]+
            (1/9)*cache_ind3[index-8]+
            (1/10)*cache_ind3[index-9]+
            (1/11)*cache_ind3[index-10]+
            (1/12)*cache_ind3[index-11]+
            (1/13)*cache_ind3[index-12]
    end
    sum03 = sum03/(1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13)

  end  

  if sum1/sum2 > 0.5 and sum03 > 0 then
    sum1 = sum03
  else
    if sum1/sum2 < 0.5 and sum03 < 0 then
      sum1 = sum03 
    else 
      sum1 = 0
    end
  end

  return sum1, 0
end

end
 всем удачи!
  • обсудить на форуме:
  • Quik Lua

Доработал индикатор STATDIV на lua для quik

пользоваться можно так:
если касная кривая выше 0,5 и синяя выше зеленой то логуем
если красная ниже 0,5 и синяя ниже зеленой то шортим
принимаю пожелания по изменению кода индикатора
Доработал индикатор STATDIV на lua для quik


скачать можно здесь:
dropmefiles.com/y4kpv

как установить:
в папке quik создаете папку LuaIndicators туда кидаете текстовый файл с раcширением .lua и содержанием приведенного индикатора, потом запускаете quik и добавляете как обычный индикатор к графику с именем STATDIV

продолжение темы: smart-lab.ru/blog/528145.php

код:

Settings={
Name=«STATDIV»,
period=25,
  line=
  {
    {
      Name=«curve»,
      Color=RGB(255,0,0),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name=«line»,
      Color=RGB(255,0,0),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name=«MA»,
      Color=RGB(0,0,255),

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

....все тэги
UPDONW
Новый дизайн