Блог им. autotrade

Доработал индикатор 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


всем удачи!
  • обсудить на форуме:
  • Quik Lua
★38
42 комментария
Нормалайзер!)
avatar
Mike Dewar, 
любители критиковать.
вместо критики выложили б что то стоящее...
не можете?
тогда и критика неуместна)
Это что грааль ? 
avatar
И каковы результаты тестирования на истории котировок за последние 10 лет ММВБ И ФОРТСа?
avatar
Rostislav Kudryashov, тестов нет и не будет )) это обычный временной ряд не учитывающий нестационарность цены, по сути разновидность МА RSI и т.п.
гляньте на формулу расчета усреднения
avatar
Константин, тестирование должно не доказать (что невозможно), но показать хоть какой-то шанс полезного эффекта. Независимость от особенностей одного или нескольких лет обеспечивается охватом большего периода.
Если нет результатов тестирования, нельзя говорить о полезности.
Так что остаётся выразить автору соболезнование за его бесполезный труд.
avatar
Константин, если нет гэпов
avatar
autotrade.ru, при чем фильтр запаздывающий и чаще идущий в противофазе к движениям
avatar
autotrade.ru, конечно бесполезно, посмотрите на свой счет и станет ясно, стоит торговать используя данный фильтр или нет )))
Привалов в свое время на практике показал как все эти усреднялки запаздывают и идут в противофазе к движениям, в интернете полно инфы на этот счет, даже пписали несколько лет назад кучу индикаторов, которые не запаздывают, но результат один — все в корзине
avatar
kiki, да нормальное место
avatar
kiki, тогда нужно гуглить — программирование для чайников и алготрейдинг для чайников, а таких ресурсов нет на LUA
avatar
autotrade.ru, ))) вы это серьезно про второй цикл? тогда открывайте книжки и читайте )))
о сколько нам открытий чудных, готовил просвящения дух…
avatar
autotrade.ru, ))) 
avatar
autotrade.ru, я же дал фамилию автора, найдите в интернете, инфы полно, загляните на форумы других языков программирования, связанных с алготрейдингом, кстати у Привалова есть свой ресурс в интернете, там даже код выложен для проверок
avatar
autotrade.ru, вы сами не тявкайте, а обратите внимание на другое, например на то, что выкладываете для обсуждения, может тогда дойдет до ваших высокорейтиновых мозгов )))
кстати прежде чем хамить не знакомым людям, оглянитесь, т.к. член незнакомца уже может находиться возле вашей… ы
avatar
autotrade.ru, думаю со временем к вам придет осознание того, что все эти МА и т.п. белеберда ТА ломается враз, когда в рынок входит смарт
avatar
Для какого таймфрейма работает?
avatar
Laukar, таймфрейм определяет пользователь взависимости от того как рабоатете
тут надо про период говорить который так же нужно самому подбирать
avatar
А зачем в каждом баре вычислять фиксированную сумму ряда? Да ещё дважды
avatar
визуально на KDJ похоже
avatar
Коменты конечно впечатляют :) по сути вопроса ни слова
А насчет сглаживания — так это обычная 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)
Сергей, спс
avatar
Сергей, Спасибо!

 Переделал в стратегию на 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))

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

 

 Да и под if строка с отступом. 2 таких строчки
 

//@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))

))) 
Переделал. А кавычки такие все-равно для скрипта не подойдут. В ручную только переделывать на "" вот такие.

теги блога autotrade

....все тэги



UPDONW