понедельник, 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 описано здесь.

10 комментариев:

  1. Подскажите пожалуйста как VolumeProfile вставить в график так как у вас(с левой стороны с отображением по всему графику)

    ОтветитьУдалить
  2. Это отображение не по всему графику, а по дням.

    ОтветитьУдалить
  3. егор..напиши скрипт который ищет уровни..тоесть череда баров стоит например на фигуре и не пробивает её..очень полезно будет...спасибо

    ОтветитьУдалить
    Ответы
    1. Извини! Пишу скрипты только для своих нужд. Нету времени и желания делать это за других.

      Удалить
  4. Привет Егор! А скринер для стратеджи чтоб находил внутри дня консолидации типа как GORO или STU сегодня http://content.screencast.com/users/pavlov0032/folders/Jing/media/c6e032b3-026a-46ef-b1a3-ff28c92b55a2/2012-07-20_1523.png

    Знаеш как написать?

    ОтветитьУдалить
  5. Вопрос как переформулировать автоматическую окраску графиков на пробой 20 days high/low применяя ((period = "DAY"),20); Егор я знаю вашу позицию по поводу навязчивых просьб и предложений, но может вас это самого заинтересует
    http://www.triplescreenmethod.com/MonthlyArticles/MonthlyArticle1004.asp

    ОтветитьУдалить
    Ответы
    1. Если честно я и вопрос то не понял... Но судя по тому что понял - вам нужны функции lowest, highest (нужно сравнивать текущую цену с лоу за определенный период или хай за определенный период, исключая текущий день, т.е. добавить после highest иди lowest с описанием [1]). И еще вам нужна функция AssignPriceColor что бы задавать цвет барам графика.

      Удалить
    2. Спасибо Егор, но вопрос отпал, поскольку я сам во всём разобрался, вы правы абсолютно в одном, надо не боятся просто включать собственные мозги.

      Удалить