вторник, 1 мая 2012 г.

Система сопровождения позиции (окраска баров осциллятором CCI в ThinkOrSwim)

Скрипт баз перерос во что-то комплексное. Добавлена функция (упоминается на странице с описанием стратегии) с помощью которой бары графика раскрашиваются осциллятором CCI. Меня давно просили написать этот код для ThinkOrSwim. Отдельно я его писать не стал, но встроил в скрипт по окраске баз. Теперь это уже тяжело назвать "скриптом по окраске баз".

Для увеличения нажми на изображение
Для чего используется эта функция? Сопровождение я веду по минутному графику. Для этого я использую раскраску баров индикатором CCI. При длинной позиции ордер сопровождения я пододвигаю под откаты обозначенные сменой цвета с красного на зеленый. При короткой позиции ордер сопровождения пододвигаю за откатами обозначенными сменой цвета с зеленого на красный. Что это дает? На мой взгляд это более чувствительная система сопровождения, чем просто передвигать стоп за откатами на пятиминутке, после которых цена преодолела уровень начала отката (так называемое "высиживание по ступенькам"). На медленном движении она позволяет высидеть дольше, на быстром - вовремя выйти. Чем волатильнее движение акции - тем больше будет сигналов на перестановку стопа, чем плавнее движение акции - тем меньше сигналов на перестановку стопа. Лично мне комфортнее высиживать позиции по этой системе - довольно часто получается выйти на хаю движения или перед сильным откатом, все же бывают моменты, когда высидеть "по ступенькам" на пятиминутке было бы выгоднее. Внимание! Сравниваются именно методы высиживания на минутке по CCI и на пятиминутке "по ступенькам" (многие считают что сидеть "по ступенькам" на минутке не выгодно, т.к. упускаются большие движения). Индикатор CCI - это индикатор канала. Таким образом стоп передвигается соотносимо с характером движения. Пост посвящен не методу а скрипту, поэтому на этом пояснение закончу.

В опциях период CCI указан как "chanel period". Выделение баз цветом (цвет cyan) идет поверх всех цветовых выделений, поэтому порой цвет базы может скрывать конкретные точки где сменился цвет в зависимости от значения CCI. Это критично только для очень тихоходных акций, которые ползут по 10-15 центов в час.
Итак код скрипта:

#by Egor Masalskiy
#last modify 01.05.2012
#------------------
input period = {default DAY, WEEK};
input lenght = 3;
input periodRangeFor_base2cent =  0.3;
input periodRangeFor_base3cent = 0.5;
input periodRangeFor_base4cent = 0.8;
input periodRangeFor_base5cent = 1.2;
input Open_Inside_Time = 0930;
input Close_Inside_Time = 1030;
input chanel_period = 20;
#------------------
def day = getDay();
def lastDay = getLastDay();
def isToday = if(day==lastDay,1,0);
def pastOpen = if((secondsTillTime(Open_Inside_Time) > 0), 0,1);
def pastClose = if((secondsTillTime(Close_Inside_Time) > 0), 0,1);
def Inside_Time = if(pastOpen and !pastClose, 1, 0);
def firstBar =if (day[1] != day, day-1, 0);
def BASE = Highest(high, lenght) - Lowest (low, lenght);
def CCI = CCI(chanel_period);
#------------------
AssignPriceColor( if
(high(period = period)[1] - low(period = period)[1]) > periodRangeFor_base5cent and BASE <= 0.05 then Color.CYAN else if
(high(period = period)[1] - low(period = period)[1]) > periodRangeFor_base4cent and (high(period = period)[1] - low(period = period)[1]) <= periodRangeFor_base5cent and BASE <= 0.04 then Color.CYAN else if
(high(period = period)[1] - low(period = period)[1]) <= periodRangeFor_base4cent and (high(period = period)[1] - low(period = period)[1]) > periodRangeFor_base3cent and BASE <= 0.03 then Color.CYAN else if
(high(period = period)[1] - low(period = period)[1]) <= periodRangeFor_base3cent and (high(period = period)[1] - low(period = period)[1]) > periodRangeFor_base2cent and BASE <= 0.02 then Color.CYAN else if
(high(period = period)[1] - low(period = period)[1]) <= periodRangeFor_base2cent  and BASE <= 0.01 then Color.CYAN
else if
(Inside_Time) then color.ORANGE
else if
CCI < -25 then CreateColor(255,190,190)
else if
CCI < -50 then CreateColor(255,130,130)
else if
CCI > 25 then CreateColor(190,255,190)
else if
CCI > 50 then CreateColor(130,255,130)
else Color.white);


P.S. Как вставить скрипт в ThinkOrSwim описано здесь.