thinkorswim

Может кому-то пригодится: скомбинировал несколько индикаторов, чтобы получить один, который показывает: ХАЙ, ЛОУ и ОПЕН сегодняшнего дня, и, аналогично, ХАЙ, ЛОУ и КЛОУЗ последнего торгового дня. Все шесть линий, само-собой, настраиваются по типу, цвету, толщине - тут ничего особенного. И все шесть линий точно также из настроек индикатора включаются-отключаются - ведь, возможно, кому-то нужны не все из них. Переделывал из нескольких стандартных ТОСовских индикаторов, но если такой "комбайн" уже где-то и пробегал, думаю, ничего страшного мой пост не наделает ;-) Кстати, сам код индикатора я приведу в комментарии к этому посту. Ибо у кода в самих постах режется форматирование и ТОС не всегда это принимает безошибочно и безболезненно...


Проголосовало: 0

Сен 24 2012, 11:38


Комментарии
SavosRU

Старался прокомментировать максимально доступно - для желающих что-то поменять под себя

Сен 24 2012, 11:44
SavosRU

# Честно предупреждаю, что сие творение переделано и расширено
# мною (by SavosRU) из нескольких стандартных индикаторов
# от TD Ameritrade IP Company, Inc. (c) 2011-2012
# и парочки авторских индикаторов, нарытых в свободном доступе
#=======================================================

def aggregationPeriod = AggregationPeriod.DAY; # Какой величины период мы
# берем для отсчета? В данном индикаторе мы работаем с ДНЯМИ

# Cколько таких периодов для отсчета мы принимаем во внимание???
def lengthToday = 1; # нам нужен ТОЛЬКО ОДИН день для сегодняшних данных
def lengthLastDay = 1; # и ТОЛЬКО ОДИН день из прошлого - вчерашний!!!

# Cмещение относительно нынешнего периода
#(ноль - это именно текущий период, а дальше в минус - это в прошлое)
def displaceToday = 0; # то есть СЕГОДНЯ
def displaceLastDay = -1; # то есть ВЧЕРА, но если мы в lengthLastDay укажем
# больше одного дня - то надо соответственно увеличить и этот параметр
# (вернее - уменьшить, числа-то отрицательные будут).
# Например, чтобы показывать не ВЧЕРАШНИЕ данные, а за
# последнюю торговую неделю (то есть за 5 дней) надо
# lengthLastDay приравнять числу 5, а displaceLastDay
# сделать -5 (то есть "минус пять"!!!)

def showOnlyLastPeriod = yes; # Ну и, соответственно, показывать ли данные только
# по одному последнему такому временному промежутку или по всем?
# Нам надо по одному...

input ShowTodayHIGH = yes; # показывать ли сегодняшний ХАЙ
input ShowTodayLOW = yes; # показывать ли сегодняшний ЛОУ
input ShowTodayOPEN = yes; # показывать ли сегодняшний ОПЕН
input ShowLastDayHIGH = yes; # показывать ли ХАЙ предыдущего торгового дня
input ShowLastDayLOW = yes; # показывать ли ЛОУ предыдущего торгового дня
input ShowLastDayCLOSE = yes; # показывать ли КЛОУЗ предыдущего торгового дня

def prevPriceOpen = open(period = aggregationPeriod)[-1];
def priceOpen = open(period = aggregationPeriod);

def prevPriceClose = close(period = aggregationPeriod);
def priceClose = close(period = aggregationPeriod)[1];

Вывод графиков ХАЙ, ЛОУ и ОПЕН сегодняшнего дня ------------
plot TodayHigh;
plot TodayLow;
plot TodayOpen;

Вывод графиков ХАЙ, ЛОУ и КЛОУЗ предыдущего торгового дня ------------
plot LastDayHigh;
plot LastDayLow;
plot LastDayClose;

Рассчет значений сегодняшнего дня ------------
if showOnlyLastPeriod and !IsNaN(close(period = aggregationPeriod)[-1]) {
TodayHigh = Double.NaN;
TodayLow = Double.NaN;
TodayOpen = Double.NaN;
} else {
TodayHigh = if ShowTodayHIGH then Highest(high(period = aggregationPeriod)[-displaceToday], lengthToday) else Double.NaN;
TodayLow = if ShowTodayLOW then Lowest(low(period = aggregationPeriod)[-displaceToday], lengthToday) else Double.NaN;
TodayOpen = if ShowTodayOPEN and !IsNaN(prevPriceOpen) then Double.NaN else priceOpen;
}

Рассчет значений предыдущего торгового дня ------------
if showOnlyLastPeriod and !IsNaN(close(period = aggregationPeriod)[-1]) {
LastDayHigh = Double.NaN;
LastDayLow = Double.NaN;
LastDayClose = Double.NaN;
} else {
LastDayHigh = if ShowLastDayHIGH then Highest(high(period = aggregationPeriod)[-displaceLastDay], lengthLastDay) else Double.NaN;
LastDayLow = if ShowLastDayLOW then Lowest(low(period = aggregationPeriod)[-displaceLastDay], lengthLastDay) else Double.NaN;
LastDayClose = if ShowLastDayClose then priceClose else Double.NaN;
}

Переменные ЦВЕТ и ТИП графиков сегодняшнего дня ------------
TodayHigh.SetDefaultColor(GetColor(6));
TodayHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
TodayLow.SetDefaultColor(GetColor(6));
TodayLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
TodayOpen.SetDefaultColor(GetColor(1));
TodayOpen.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

Переменные ЦВЕТ и ТИП графиков предыдущего торгового дня ------------
LastDayHigh.SetDefaultColor(GetColor(3));
LastDayHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
LastDayLow.SetDefaultColor(GetColor(3));
LastDayLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
LastDayClose.SetDefaultColor(GetColor(5));
LastDayClose.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

Сен 24 2012, 11:48
Rogoz

есть один не очень приятный момент для малых таймфреймов... он заключается в том что график сжимается когда на него наносятся данные уровни... индикатор это делает, что бы показать сразу все заданные уровни но наглядность и комфорт для участников малых таймфреймов при этом существенно теряется... да, конечно существует опция "Pan" но я в замешательстве, что проще играться-подстраивать или в ручную рисовать эти левелы... надеюсь с этим возможно, что-то сделать... заранее спасибо... в целом индикатор нужен, при чем каждому....

Сен 28 2012, 02:01
SavosRU

Да, я понял, о чем ты... Эта проблема легко решается: в настройках отображения графиков (Chart Settings) на вкладке "Price Axis" слева вторая снизу обычно стоит галочка "Fit studies", вот ее нужно просто снять и сохранить настройки. Чтоб еще понятнее было - скриншот глянь на http://www.rpg-club.com/x1000m?h=laserharp.ru...tudies.jpg
Теперь график автоматически масштабируется точно также, как было до этого индикатора, а не сжимается по вертикали для того, чтобы все линии поместились на экране!!!

Сен 28 2012, 12:55
Rogoz

да, все на много проще чем я думал) спасибо.)

Сен 28 2012, 14:42
alexbog90

Увидел ваш индикатор, заинтересовался и решил вставить в ТОС. Вручную копирую строки с кодом отсюда в thinkScript Editor.
Дошел до строчек:
plot TodayHigh;
plot TodayLow;
plot TodayOpen;
и ТОС начинает ругаться: Value never asigned to TodayHigh at 18:6.
Не могли бы вы сказать, что я делаю не так?
Можете выложить только код строку за строкой?

Июл 01 2013, 18:14
alexbog90

разобрался)) Просто дописал до конца и все ок. Спасибо!

Июл 01 2013, 18:20
alexbog90

Вы не подскажете, как сделать эти линии не сплошными, а пунктиром или пунктиром с точкой?
Поменял в этих 6 строчках HORIZONTAL на DASHES, но ничего не изменилось:
Переменные ЦВЕТ и ТИП графиков сегодняшнего дня ------------
TodayHigh.SetDefaultColor(GetColor(6));
TodayHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
TodayLow.SetDefaultColor(GetColor(6));
TodayLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
TodayOpen.SetDefaultColor(GetColor(1));
TodayOpen.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

Переменные ЦВЕТ и ТИП графиков предыдущего торгового дня ------------
LastDayHigh.SetDefaultColor(GetColor(3));
LastDayHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
LastDayLow.SetDefaultColor(GetColor(3));
LastDayLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
LastDayClose.SetDefaultColor(GetColor(5));
LastDayClose.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

Июл 01 2013, 22:41

Разделено

Наш канал