пользоваться можно так:
если касная кривая выше 0,5 и синяя выше зеленой то логуем
если красная ниже 0,5 и синяя ниже зеленой то шортим
принимаю пожелания по изменению кода индикатора
скачать можно здесь:
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
всем удачи!
гляньте на формулу расчета усреднения
Если нет результатов тестирования, нельзя говорить о полезности.
Так что остаётся выразить автору соболезнование за его бесполезный труд.
Привалов в свое время на практике показал как все эти усреднялки запаздывают и идут в противофазе к движениям, в интернете полно инфы на этот счет, даже пписали несколько лет назад кучу индикаторов, которые не запаздывают, но результат один — все в корзине
о сколько нам открытий чудных, готовил просвящения дух…
кстати прежде чем хамить не знакомым людям, оглянитесь, т.к. член незнакомца уже может находиться возле вашей… ы
тут надо про период говорить который так же нужно самому подбирать
А насчет сглаживания — так это обычная 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)
//@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))
Короче все такие кавычки<< надо поменять на такие "". А длинные — (тире) на обычные — (минусики). Тогда все запашет.
//@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))
Переделал. А кавычки такие все-равно для скрипта не подойдут. В ручную только переделывать на "" вот такие.