понедельник, 16 июля 2012 г.

Автоматическая окраска фона графиков в ThinkOrSwim

Нажми на изображение для увеличения

Что-то в  последнее время мне стало много всего казаться во время торговой сессии, поэтому для улучшения восприятия сделал несколько простых примочек для ToSа (для тех кто не в курсе - это терминал с графиками). Они красят фон графика в соответствии с тенденцией. Методики определения тенденции простые и общеизвестные, ничего нового в них нету. Просто, я считаю, эта раскраска положительно воздействует на подсознание в момент принятия решения. Так же помогает с мониторами на которых куча маленьких графиков отрисовывающих домашку, т.к. видно какие акции идут по рынку, а какие нет.
Итак:

1. Раскрашивает фон чарта в зависимости от цвета тела последней свечи указанной в опции period в настройках этого скрипта. При этом он может делать расчет по дневке, а красить пятиминутный график.

input period = {default HOUR, DAY, WEEK, MONTH, "OPT EXP"};
def POSITION = close(period = period) - open(period = period);
def spread = 0.1 * (high(period = period) - low(period = period));
#AssignBackgroundColor( if POSITION > spread then CreateColor(88,128,88) else if POSITION < -spread then CreateColor(128,88,88) else Color.GRAY);
AssignBackgroundColor( if POSITION > spread then CreateColor(0,88,0) else if POSITION < -spread then CreateColor(88,0,0) else Color.BLACK);


2. Раскрашивает фон чарта в зависимости от того какой экстремум прошлого периода был преодолен текущим. Период указывается в настройках этого скрипта. У меня он висит на дневке и расчет делает из дневного периода.

input period = {default HOUR, DAY, "2 DAYS", "3 DAYS", "4 DAYS", WEEK, MONTH, "OPT EXP"};
def HIGH = if ((high(period = period) - high(period = period)[1]) > 0) then 1 else -1 ;
def LOW = if ((low(period = period) - low(period = period)[1]) < 0) then -1 else 1 ;
#AssignBackgroundColor( if (HIGH + LOW) > 0 then CreateColor(88,128,88) else if (HIGH + LOW) < 0 then CreateColor(128,88,88) else Color.GRAY);
AssignBackgroundColor( if (HIGH + LOW) > 0 then CreateColor(0,88,0) else if (HIGH + LOW) < 0 then CreateColor(88,0,0) else Color.BLACK);


3. Раскрашивает фон чарта в зависимости от положения high, low  и close последнего периода. Период указывается в настройках скрипта. У меня он висел на минутном графике, а расчет делал исходя из дневного периода.

input period = {default HOUR, DAY, WEEK, MONTH, "OPT EXP"};
def spread = high(period = period) - low(period = period);
def position1 = if (close(period = period) - low(period = period)) < spread/3 then -1 else 1;
def position2 = if (high(period = period) - close(period = period)) < spread/3 then 1 else -1;
#AssignBackgroundColor( if (position1 + position2) > 1 then CreateColor(88,128,88) else if (position1 + position2) < -1 then CreateColor(128,88,88) else Color.GRAY);
AssignBackgroundColor( if (position1 + position2) > 1 then CreateColor(0,88,0) else if (position1 + position2) < -1 then CreateColor(88,0,0) else Color.BLACK);


4. Раскрашивает фон чарта на основе триангулярных вычислений. Весь принцип не буду объяснять, скажу только что используется направление триангулярной скользящей и положение цены относительно нее. Использую на минутном графике (период триангулярных вычислений по умолчанию).

input price = close;
input Triangular_length = 89;
input displace = 0;
def effectiveLength = Ceil((Triangular_length + 1) / 2);
def AvgTri = Average(Average(price[-displace], effectiveLength), effectiveLength);
#AssignBackgroundColor( if (AvgTri > AvgTri[1] and close > AvgTri) then CreateColor(88, 128, 88) else if (AvgTri < AvgTri[1] and close < AvgTri) then CreateColor(128, 88, 88) else Color.GRAY);
AssignBackgroundColor( if (AvgTri > AvgTri[1] and close > AvgTri) then CreateColor(0,88,0) else if (AvgTri < AvgTri[1] and close < AvgTri) then CreateColor(88,0,0) else Color.BLACK);


Цвета подобраны под черную и серую гаммы программы (по умолчанию черная). Что бы переключить на серую в коде скрипта нужно раскоментировать (удалить символ #) перед одной строкой начинающейся с AssignBackgroundColor и закоментировать (поставить символ #) перед другой строкой начинающейся с AssignBackgroundColor.

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

воскресенье, 8 июля 2012 г.

Отображение дневного диапазона на графике в ThinkOrSwim


Для увеличения нажми на изображение
Скрипт отрисовывающий high и low текущего дня. На графике он выглядит как линии начинающиеся с каждого нового максимума или минимума и продолжающиеся до обновления этих максимумов или минимумов в течение дня. Т.е. отрисовываемый диапазон в течение дня будет постоянно расширяться. Так же скрипт отрисовывает среднюю линию, значение которой равно среднеарифметическому от значений линии high и линии low. Скрипт будет полезен тем кто торгует на пробой.

# (c) 2009 http://www.thinkscripter.com
# thinkscripter@gmail.com
# Last Update 14 Feb 2009
input showOnlyToday = YES;
input Market_Open_Time = 0930;
input Market_Close_Time = 1600;
def day = getDay();
def lastDay = getLastDay();
def isToday = if(day==lastDay,1,0);
def shouldPlot = if(showOnlyToday and isToday, 1,if(!showOnlyToday,1,0));
def pastOpen = if((secondsTillTime(Market_Open_Time) > 0), 0,1);
def pastClose = if((secondsTillTime(Market_Close_Time) > 0), 0,1);
def marketOpen = if(pastOpen and !pastClose, 1, 0);
def firstBar =if (day[1] != day, day-1, 0);
rec regHoursHigh = if(high > regHoursHigh[1] and marketOpen, high, if(marketOpen and !firstBar, regHoursHigh[1], high));
plot Regular_Hours_High = if(marketOpen and shouldPlot, regHoursHigh, Double.nan);
Regular_Hours_High.SetStyle(curve.points);
Regular_Hours_High.SetDefaultColor(color.green);
Regular_Hours_High.SetLineWeight(2);
rec regHoursLow = if(low < regHoursLow[1] and marketOpen, low, if(marketOpen and regHoursLow[1] > 0 and !firstBar, regHoursLow[1],low));
plot Regular_Hours_Low = if(marketOpen and shouldPlot, regHoursLow, double.nan);
Regular_Hours_Low.SetLineWeight(2);
Regular_Hours_Low.SetStyle(curve.points);
Regular_Hours_Low.SetDefaultColor(color.red);
plot Midpoint_Pivot = if(marketOpen and shouldPlot, (Regular_Hours_High + Regular_Hours_Low) / 2, double.nan);
Midpoint_Pivot.SetLineWeight(2);
Midpoint_Pivot.SetDefaultColor(color.white);
Midpoint_Pivot.SetPaintingStrategy(PaintingStrategy.POINTS);


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