Блог им. 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
4.9К | ★38
42 комментария
Нормалайзер!)
avatar
Это что грааль ? 
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))

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

Читайте на SMART-LAB:
Фото
Итоги первичных размещений ВДО и некоторых розничных выпусков на 8 января 2026 г.
Следите за нашими новостями в удобном формате:  Telegram ,  Youtube ,  Смартлаб ,  Вконтакте ,  Сайт
Фото
NZD/CAD: цены испытывают давление под натиском продавцов?
Котировки кросс-курса NZD/CAD оттолкнулись от нисходящей трендовой линии, попутно сформировав свечную модель «медвежье поглощение». Судя по всему,...
Фото
Итоги 2025 года и прогнозы от аналитиков «Финама»: облигации
2025 год на рынке облигаций запомнился высокими процентными ставками, повышенной волатильностью и заметным смещением фокуса инвесторов в...
Фото
Стратегия 2026. Часть I: извлекаем правильные уроки из ошибок 2025
Those who cannot remember the past are condemned to repeat it  -  © George Santayana, 1905 В начале 2026 года у нас на руках стратегии 13...

теги блога autotrade

....все тэги



UPDONW
Новый дизайн