Блог им. 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
  • Ключевые слова:
  • STATDIV
★37 | ₽ 100
Нормалайзер!)
avatar

Mike Dewar

Mike Dewar, 
любители критиковать.
вместо критики выложили б что то стоящее...
не можете?
тогда и критика неуместна)
avatar

Legendario

Это что грааль ? 
avatar

Technotrade

И каковы результаты тестирования на истории котировок за последние 10 лет ММВБ И ФОРТСа?
avatar

Rostislav Kudryashov

Rostislav Kudryashov, тестов нет и не будет )) это обычный временной ряд не учитывающий нестационарность цены, по сути разновидность МА RSI и т.п.
гляньте на формулу расчета усреднения
Константин, тестирование должно не доказать (что невозможно), но показать хоть какой-то шанс полезного эффекта. Независимость от особенностей одного или нескольких лет обеспечивается охватом большего периода.
Если нет результатов тестирования, нельзя говорить о полезности.
Так что остаётся выразить автору соболезнование за его бесполезный труд.
Константин, если нет гэпов
avatar

SergeyJu

autotrade.ru, при чем фильтр запаздывающий и чаще идущий в противофазе к движениям
autotrade.ru, конечно бесполезно, посмотрите на свой счет и станет ясно, стоит торговать используя данный фильтр или нет )))
Привалов в свое время на практике показал как все эти усреднялки запаздывают и идут в противофазе к движениям, в интернете полно инфы на этот счет, даже пписали несколько лет назад кучу индикаторов, которые не запаздывают, но результат один — все в корзине
kiki, да нормальное место
kiki, тогда нужно гуглить — программирование для чайников и алготрейдинг для чайников, а таких ресурсов нет на LUA
autotrade.ru, ))) вы это серьезно про второй цикл? тогда открывайте книжки и читайте )))
о сколько нам открытий чудных, готовил просвящения дух…
autotrade.ru, ))) 
autotrade.ru, я же дал фамилию автора, найдите в интернете, инфы полно, загляните на форумы других языков программирования, связанных с алготрейдингом, кстати у Привалова есть свой ресурс в интернете, там даже код выложен для проверок
autotrade.ru, вы сами не тявкайте, а обратите внимание на другое, например на то, что выкладываете для обсуждения, может тогда дойдет до ваших высокорейтиновых мозгов )))
кстати прежде чем хамить не знакомым людям, оглянитесь, т.к. член незнакомца уже может находиться возле вашей… ы
autotrade.ru, думаю со временем к вам придет осознание того, что все эти МА и т.п. белеберда ТА ломается враз, когда в рынок входит смарт
Для какого таймфрейма работает?
avatar

Laukar

Laukar, таймфрейм определяет пользователь взависимости от того как рабоатете
тут надо про период говорить который так же нужно самому подбирать
avatar

autotrade.ru

А зачем в каждом баре вычислять фиксированную сумму ряда? Да ещё дважды
avatar

Uncle Fedor

визуально на 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

Сергей

Сергей, спс
avatar

autotrade.ru

Сергей, Спасибо!

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

avatar

Игорь Аснин

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

 

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

Игорь Аснин

 

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

avatar

Игорь Аснин

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

Игорь Аснин


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UPDONW