Избранное трейдера sh_am
Добрый день, Коллеги!
Данная статья является продолжением разговора, начатого здесь:
Часть 1: http://smart-lab.ru/blog/349998.php
Часть 2: http://smart-lab.ru/blog/350673.php
Часть 3: http://smart-lab.ru/blog/351031.php
Часть 4 http://smart-lab.ru/blog/352313.php
В данной статье мы рассмотрим систему Управления капиталом, учитывающей максимальный риск в одной сделке (MPR).
Данная система управления капиталом предполагает знание стопа до входа в позицию. Это позволят рассчитать, каким количеством лотов система может зайти в конкретную сделку.
Например, возьмем Си
Сумма капитала, предоставленного данной системе в данный момент, = 100 000 руб.
Риск на сделку MPR=3%
Текущий стоп = 63640 руб.
Цена входа = 63330 руб. (Шорт)
Необходимо определить, сколько контрактов должна взять система, если потеря капитала не должна составлять более 3% в данной сделке?
В данной статье мы рассмотрим торгового робота на основе индикатора AMA. AMA является аббревиатурой с Adaptive Moving Average, в переводе с анг. Адаптивная скользящая средняя. Как следует из названия индикатора, он адаптируется под движения рынка этим он и интересен. Индикатор AMA является одной из разновидностью скользящих средних и хорошо определяет трендовые движения на рынке, а фильтрация шума позволяет отсеять боковые движения.В рамках робота реализована базовая трендовая переворотная стратегия. Он позволит вам торговать тренд на рынке ММВБ акциями или фьючерсами через терминал Quik. И так перейдем к настройке и запуску.
Индекс относительной силы (RSI от англ. relative strength index) — индикатор технического анализа, определяющий силутренда и вероятность его смены. Популярность RSI обусловлена простотой его интерпретации. Индикатор может рисовать фигуры технического анализа — «голова-плечи», «вершина» и другие, которые часто анализируют наравне с графиком цены
Settings = { Name = "xPc5", period = 24, line= { { Name = "xPc5", Color = RGB(0, 128, 0), Type = TYPE_LINE, Width = 2 }, { Name = "xPc5", Color = RGB(255, 64, 64), Type = TYPET_BAR, Width = 3 }, { Name = "xPc5", Color = RGB(64, 64, 255), Type = TYPET_BAR, Width = 3 } } } ---------------------------------------------------------- function c_FF() return function(ind, _p) local period = _p local index = ind local MAX_ = 0 local MIN_ = 0 local MAX2_ = 0 local MIN2_ = 0 if index == 1 then MAX_ = C(index) MIN_ = C(index) MAX2_ = C(index) MIN2_ = C(index) return nil end ---------------------------------------------------------------------- period = _p if index < period then period = index end MAX_ = H(index) MIN_ = L(index) MAX2_ = 0 MIN2_ = 0 for i = 0, (period-1) do if MAX_ < H(index-i) then MAX_ = H(index-i) end if MIN_ > L(index-i) then MIN_ = L(index-i) end MAX2_ = MAX2_ + MAX_ MIN2_ = MIN2_ + MIN_ end MAX2_ = MAX2_/(period) MIN2_ = MIN2_/(period) return (MAX2_+MIN2_)/2, MAX2_, MIN2_ end end function Init() myFF = c_FF() return 3 end function OnCalculate(index) return myFF(index, Settings.period) 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