Избранное трейдера Игорь В.
Добавляю новую полезность для терминала QUIK.
По заказам доводилось делать много торговых систем, торгующих по горизонтальным уровням. Каждый заказчик строил свою систему, все они были успешно реализованы.
А как же диагональные уровни? Их возможно построить вручную, сколько людей, столько мнений…
Сегодняшний индикатор показывает косые уровни, их можно интерпретировать как диагональные уровни поддержки-сопротиления, линии каналов и т.п.

Всех приветствую.Не буду скрывать индикатор Price Channel мне очень нравится и близок. Первые свои прибыльные торговые системы в 2010 году строил на TSLab именно с использованием этого индикатора.
Сегодня хочу вам представить бесплатного торгового робота именно на индикаторе Price Channel. Это робот позволит торговать трендовый алгоритм на ММВБ через Quik на рынках: фьючерсов и акций.

Анализируемые инструменты: ММВБ, FORTS, FOREX, мировые индексы.
Особенности работы приложения:
1. Высокая точность определения пробоя цены, даже если это был секундный пробой и цена вернулась к прежнему уровню.
2. Повтор уведомления, если оно не было прочитано.
3. Вычисления происходят на отдельном сервере. И даже если у телефона временно отсутствовало интернет соединение, вы получите уведомление при восстановлении связи с сервером.
4. Синхронизация с различными устройствами. Т.е. настроить целевые уровни можно на компьютере, подкорректировать на планшете, а уведомления получать на телефон. (Необходима авторизация единым логином на всех устройствах.)

Кому пригодилось — ставим лайки!))

Settings =
{
Name = "xLinRegP",
period = 128,
deviation=2,
line=
{
{
Name = "xLinRegP",
Color = RGB(128, 128, 255),
Type = TYPE_LINE,
Width = 4
},
{
Name = "xLinRegP",
Color = RGB(192,128,128),
Type = TYPE_LINE,
Width = 4
},
{
Name = "xLinRegP",
Color = RGB(96, 128,96),
Type = TYPE_LINE,
Width = 4
}
}
}
----------------------------------------------------------
----------------------------------------------------------
----------------------------------------------------------
function cached_FF()
local AMA={}
local CC={}
local II2 = 0
local II4 = 0
return function(ind, _p,_ddd)
local period = _p
local index = ind
local vol = 0
local sigma = 0
local sigma2 = 0
local sigma3 = 0
local sigma4 = 0
local aav = 0
local aa = 0
local bb = 0
local cc = 0
local ZZZ = 0
local ttt = 0
if index == 1 then
AMA={}
CC={}
CC[index]=(C(index)+H(index)+L(index))/3
AMA[index]=(C(index)+O(index))/2
II2=0
II4=0
for i = 0, period-1 do
ttt=(-(period-1)/2+i)^2
II2=II2+ttt
II4=II4+ttt^2
end
return nil
end
------------------------------
AMA[index]=AMA[index-1]
----------------------------------
CC[index]=(C(index)+H(index)+L(index))/3
---------------------
if index < (Size()-2) then return nil end
----------------------------------------------------
sigma=0
sigma2=0
sigma3=0
sigma4=0
aav=0
ZZZ=0
for i = 0, period-1 do
ZZZ=CC[index+i-period+1]
aav=aav+ZZZ
sigma=sigma+ZZZ*(-(period-1)/2+i)
ttt=(-(period-1)/2+i)^2
sigma3=sigma3+ZZZ*ttt
end
------------------------
bb=sigma/II2
cc=(sigma3-aav*II2/period)/(II4-II2*II2/period)
aa=(aav-cc*II2)/period
aav=aav/period
AMA[index]=aa+bb*((period-1)/2)+cc*((period-1)/2)^2 ------- парабола
-------------------------------
sigma=0
sigma2=0
sigma3 = 0
for i = 0, period-1 do
ZZZ=CC[index+i-period+1]
sigma2=aa+bb*(-(period-1)/2+i)+cc*(-(period-1)/2+i)^2 ------- парабола
sigma=sigma+(ZZZ-sigma2)^2
end
sigma=(sigma/period)^(1/2)
for i = 1, period-1 do
ZZZ=aa+bb*(-(period-1)/2+i)+cc*(-(period-1)/2+i)^2
SetValue(index+i-period+1, 3, ZZZ)
SetValue(index+i-period+1, 2, ZZZ+sigma*_ddd)
SetValue(index+i-period+1, 1, ZZZ-sigma*_ddd)
end
SetValue(index+0-period+1, 3, nil)
SetValue(index+0-period+1, 2, nil)
SetValue(index+0-period+1, 1, nil)
----------------------------------
return AMA[index]-sigma*_ddd,AMA[index]+sigma*_ddd, AMA[index]
end
end
---------------------------- ---------------------------- ----------------------------
---------------------------- ---------------------------- ----------------------------
---------------------------- ---------------------------- ----------------------------
function Init()
myFF = cached_FF()
return 3
end
function OnCalculate(index)
return myFF(index, Settings.period,Settings.deviation)
end
Добавляю код сделанного мной индикатора Parabolik в котором параметр ускорение зависит от волатильности. Чем больше волатильность, тем больше увеличивается ускорение и индикатор быстрее «догоняет» цену. Подобные есть на просторах интернета для метатрейдера (и не бесплатно), для квика не встречал.
Видно, что он дает меньше перескоков (красный), чем обычный Parabolik (черный). Хорошо себя зарекомендовал для выходов из позиций, открытых по тренду. На вход в боковике конечно будет давать ложные сигналы, как и обычный Parabolik (но меньше!), создатель которого не рекомендовал только его использовать для открытия позиций.
Код индикатора:
Settings = {
Name = "Parabolic ATR",
Period_ATR=14,
line = {{
Name = "Parabolic ATR",
Type = TYPE_POINT,
Color = RGB(255,0,0),
Width = 2
}
}
}
old_idx=0
long=false
short=false
revers=false
function Init()
return 1
end
function OnCalculate(idx)
if idx<Settings.Period_ATR then
return nil
else
if idx==Settings.Period_ATR then
psar={}
psar[idx]=L(idx)
long=true
hmax=H(idx)
per_ATR=Settings.Period_ATR
local TR=0
for js=(idx-per_ATR),idx-1 do
TR=(TR+H(js)-L(js))
end
Old_ATR=TR/per_ATR
revers=true
else
if idx~=old_idx then
local TR=0
for js=(idx-per_ATR),idx-1 do
TR=(TR+H(js)-L(js))
end
local ATR=TR/per_ATR
af=ATR/(Old_ATR+ATR)
af=af/10
Old_ATR=ATR
if long then
if hmax<H(idx-1) then
hmax=H(idx-1)
end
psar[idx]=psar[idx-1]+af*(hmax-psar[idx-1])
end
if short then
if lmin>L(idx-1) then
lmin=L(idx-1)
end
psar[idx]=psar[idx-1]+af*(lmin-psar[idx-1])
end
revers=true
end
if long and L(idx)<psar[idx] and revers then
psar[idx]=hmax
short=true
long=false
lmin=L(idx)
af=Step
revers=false
end
if short and H(idx)>psar[idx] and revers then
psar[idx]=lmin
long=true
short=false
hmax=H(idx)
af=Step
revers=false
end
end
old_idx=idx
return psar[idx]
end
end
