autotrade
autotrade личный блог
18 марта 2019, 23:01

Доработал индикатор 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),
      Type=TYPE_LINE,
      Width=1
    },
    {
      Name=«MA2»,
      Color=RGB(0,128,128),
      Type=TYPE_LINE,
      Width=1
    }
  }
}

function Init()
  cache_ind={}
  cache_ind2={}
  return 4
end

function OnCalculate(index)
  if index < Settings.period then
    return nil
  else
    local sum1=0
    local sum2=0
    local sum0=0
    local sum02=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/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/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+24 then   
      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/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10+1/11+1/12+1/13)

  end  
  return sum1/sum2, 0.5, sum0, sum02
end

end


всем удачи!
42 Комментария
  • Mike Dewar
    18 марта 2019, 23:51
    Нормалайзер!)
  • Technotrade
    19 марта 2019, 00:02
    Это что грааль ? 
  • Rostislav Kudryashov
    19 марта 2019, 00:11
    И каковы результаты тестирования на истории котировок за последние 10 лет ММВБ И ФОРТСа?
    • Константин
      19 марта 2019, 00:27
      Rostislav Kudryashov, тестов нет и не будет )) это обычный временной ряд не учитывающий нестационарность цены, по сути разновидность МА RSI и т.п.
      гляньте на формулу расчета усреднения
      • Rostislav Kudryashov
        19 марта 2019, 00:33
        Константин, тестирование должно не доказать (что невозможно), но показать хоть какой-то шанс полезного эффекта. Независимость от особенностей одного или нескольких лет обеспечивается охватом большего периода.
        Если нет результатов тестирования, нельзя говорить о полезности.
        Так что остаётся выразить автору соболезнование за его бесполезный труд.
      • SergeyJu
        19 марта 2019, 09:54
        Константин, если нет гэпов
  • Laukar
    19 марта 2019, 02:23
    Для какого таймфрейма работает?
  • Uncle Fedor
    19 марта 2019, 08:34
    А зачем в каждом баре вычислять фиксированную сумму ряда? Да ещё дважды
  • Бобёр
    19 марта 2019, 10:52
    визуально на KDJ похоже
  • Коменты конечно впечатляют :) по сути вопроса ни слова
    А насчет сглаживания — так это обычная ema()
    Используйте функцию и весь код будет в несколько строчек
    Для tradingview вот так:
    //@version=2
    study(«STATDIV», overlay=false)
    length = input(title=«PeriodEMA»,type=integer,defval=13)
    d = close — open
    s1 = 0.0
    s2 = 0.0
    for i = 0 to length-1
        dd = close[i] — open[i]
        if  dd > 0
            s1 := s1 + dd
            s2 := s2 + dd
        else
            s2 := s2 — dd
            s1 := s1 + 0.0
    L1 = s1/s2       
    plot (L1,color=red)

    fEMA(p,len) =>
        sum=p
        nn=1
        for n = 1 to len-1
            sum := sum+p[n]/(n+1)
            nn  := nn + 1/(n+1)
        sum/nn


    L2 = fEMA(L1,length)
    plot (L2,color=blue)

    L3 = fEMA(L2,length)
    plot (L3,color=green)
    plot(0.5,color=black)
  • Игорь @BrentBuySell
    21 марта 2019, 23:46
     Переделал в стратегию на Tradingwiew — минусит)

    //@version=3
    strategy(«statdivstrategy», overlay=true)
    length = input(title=«PeriodEMA»,type=integer,defval=13)
    d = close — open
    s1 = 0.0
    s2 = 0.0
    for i = 0 to length-1
    dd = close[i] — open[i]
    if dd > 0
    s1 := s1 + dd
    s2 := s2 + dd
    else
    s2 := s2 — dd
    s1 := s1 + 0.0
    L1 = s1/s2
    //plot (L1,color=red)

    fEMA(p,len) =>
    sum=p
    nn=1
    for n = 1 to len-1
    sum := sum+p[n]/(n+1)
    nn := nn + 1/(n+1)
    sum/nn


    L2 = fEMA(L1,length)
    //plot (L2,color=blue)

    L3 = fEMA(L2,length)
    //plot (L3,color=green)
    //plot(0.5,color=black)

    longCondition = L1>0.5 and L2>L3
    if (longCondition)
    strategy.entry(«Long», strategy.long)
    strategy.close(«Long», when = (L1<0.5 or L2<L3))

    shortCondition = L1<0.5 and L3>L2
    if (shortCondition)
    strategy.entry(«Short», strategy.short)
    strategy.close(«Short», when = (L1>0.5 or L3<L2))

    • Александр Элс
      22 марта 2019, 11:31
      Игорь Аснин, отступы стёрлись, не робит
      • Игорь @BrentBuySell
        22 марта 2019, 17:18
        Александр Элс, почему то на этом сайте минус меняется на тире. И кавычки надо менять на "" вот такие. Сам в шоке!
        Короче  все такие кавычки<< надо поменять на такие "". А длинные — (тире) на обычные — (минусики). Тогда все запашет.

         

  • Игорь @BrentBuySell
    22 марта 2019, 17:20
     Да и под if строка с отступом. 2 таких строчки
  • Игорь @BrentBuySell
    22 марта 2019, 17:24
     

    //@version=3
    strategy(«statdivstrategy», overlay=true)
    length = input(title=«PeriodEMA»,type=integer,defval=13)
    d = close-open
    s1 = 0.0
    s2 = 0.0
    for i = 0 to length-1
    dd = close[i]-open[i]
    if dd > 0
    s1 := s1 + dd
    s2 := s2 + dd
    else
    s2 := s2-dd
    s1 := s1 + 0.0
    L1 = s1/s2 
    //plot (L1,color=red)

    fEMA(p,len) =>
    sum=p
    nn=1
    for n = 1 to len-1
    sum := sum+p[n]/(n+1)
    nn := nn + 1/(n+1)
    sum/nn


    L2 = fEMA(L1,length)
    //plot (L2,color=blue)

    L3 = fEMA(L2,length)
    //plot (L3,color=green)
    //plot(0.5,color=black)

    longCondition = L1>0.5 and L2>L3
    if (longCondition)
        strategy.entry(«Long», strategy.long)
    strategy.close(«Long», when = (L1<0.5 or L2<L3))

    shortCondition = L1<0.5 and L3>L2
    if (shortCondition)
        strategy.entry(«Short», strategy.short)
    strategy.close(«Short», when = (L1>0.5 or L3<L2))

  • Игорь @BrentBuySell
    22 марта 2019, 17:27
    ))) 
    Переделал. А кавычки такие все-равно для скрипта не подойдут. В ручную только переделывать на "" вот такие.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн