У вас не стоит Flash Player
Настройки
#54347 - Fri Apr 19 2013 11:01 PM Цены OHLC последних n-баров ДО заданного периода
SavosRU Offline
stranger

Registered: Fri Apr 19 2013
Записи: 10
Добрый день!
Только начинаю осваивать TSlab API и пока не могу понять как мне получить цены открытия-закрытия-хай-лоу последних N свечек. Мне нужно перенести индикатор из ThinkOrSwim (есть такая программа, может кто знает) и там в одном из индикаторов необходимо провести вычисление следующего вида:
Quote:
def HiLo = Min(high - low, Average(high - low, Period));

Это не код на C# - это прямо код из того индикатора на внутреннем языке ThinkScript, но могу пояснить:
- надо найти минимум из двух величин
- одна из этих величин это разница между хай и лоу текущей свечи
- вторая из этих величин это усредненное за определенный промежуток значение подобных разностей high-low, но уже, соответственно, НЕ текущей свечи, а предыдущей, пред-предыдущей и так далее до глубины в Period свечей

Вот как бы мог ориентировочно выглядеть окружающий этот момент код, я из примеров себе представляю:
Quote:
public IList<double> Execute(ISecurity sourceSec) {
var highs = sourceSec.HighPrices;
var lows = sourceSec.LowPrices;
IList<double> list = new List<double>(highs.Count);
for (int i = 0; i < highs.Count; i++) {
var HiLo = Math.Min(highs[i] - lows[1], ТОТ_САМЫЙ_КУСОК_КОТОРЫЙ_НЕПОНЯТНО_КАК_СДЕЛАТЬ
list.Add(HiLo);
}
return list;
}


Но вот вместо фразы ТОТ_САМЫЙ_КУСОК_КОТОРЫЙ_НЕПОНЯТНО_КАК_СДЕЛАТЬ и надо вставить СРЕДНЕЕ от high-low за последние, скажем 13, свечек. Как это можно сделать? По документации (довольно запутанной) я этого не смог понять.

Если использовать те же highs[i] и lows[i] - как мне быть уверенным, что их вообще будет столько, сколько мне надо по количеству? У индикатора я сделал параметр для величины периода - это значит, что при его значении 13 я и получу 13 баров, верно? Но уже для ПЕРВОЙ ЖЕ из этих свечек при вычислении нужного мне значения потребуются данные про ЕЩЕ 12 свечек, которые были ДО НЕЕ. Для второй - ЕЩЕ ОДИННАДЦАТЬ, для третьей - ЕЩЕ ДЕСЯТЬ...

Вот об этом, собственно, и вопрос - КАК ЭТИ ДАННЫЕ О ПРЕДЫДУЩИХ СВЕЧКАХ можно получить???

Помогите, пожалуйста!!! Заранее благодарен!!!

Наверх
#54349 - Sat Apr 20 2013 08:45 AM Re: Цены OHLC последних n-баров ДО заданного периода [Re: SavosRU]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Объяснять как программировать я полагаю не нужно.

Предыдущие свечки берутся так же как и текущая.
текущий хай это highs[i]
предыдущий хай это highs[i-1]
две свечи назад это highs[i-2]

Естественно что свечек которых нет в Sec.Bars вы не получите. Поэтому нужно ограничивать начало работы скрипта заданным номером свечки. Если у вас берется 13 свечей для расчета средней, то вместо var i = 0 пишите 13, тогда будет достаточно историид ля расчета средней.

1) вы на каждоый итерации считаете среднее по предыдущим свечкам и используете. В тесте будет тормозить и не оптимальный подход.
2) вы пишете функцию которая один раз вычисляет значение средней для каждого бара из sec.bars и возвращает список этих значений. Далее кэшируете это через GetData и используете. Скорость будет много выше при оптимизировании.


Отредактировано ra81 (Sat Apr 20 2013 08:47 AM)
_________________________
__


Наверх
#54354 - Sat Apr 20 2013 12:33 PM Re: Цены OHLC последних n-баров ДО заданного периода [Re: ra81]
SavosRU Offline
stranger

Registered: Fri Apr 19 2013
Записи: 10
Да, спасибо!
Про кеширование и производительность я, конечно, тоже думал. Только сначала хотел разобраться именно с базовым вариантом.
Правильно ли я понял, что в самом первом проходе скрипта, на самой первой его итерации я получу в Sec.Bar сразу первые 13 свечей из графика, а не одну первую свечку и 12 нулей в качестве отсутствующих предыдущих свечек?
И, соответственно, начинать вычисление средней мне нужно не с самого начала графика, а именно отступая от него на нужное мне для расчета количество свечей? При таком подходе вроде все становится понятным, спасибо, буду пробовать...

Дорогу, как известно, осилит идущий ;-))

Наверх
#54358 - Sat Apr 20 2013 02:00 PM Re: Цены OHLC последних n-баров ДО заданного периода [Re: SavosRU]
SavosRU Offline
stranger

Registered: Fri Apr 19 2013
Записи: 10
О! Разобрался! Может для тех, кто знает - это и не новость, а вот для начинающего нигде не описано...

ОКАЗЫВАЕТСЯ (!) в цикле по количеству баров (как в вышеприведенном мною примере) сразу обрабатывается не те 13 свечей, которые я предполагал (так как период у индикатора задан 13), а сразу все доступные на графике свечи!!! Это первоначально вовсе не так очевидно, как кажется авторам программы. И это обязательно надо указать в документации!!!

Я-то думал, что мы получаем бары "порциями", некими "фреймами" по столько штук, сколько указано в периоде индикатора. И поэтому спрашивал, как же получить доступ к ПРЕДЫДУЩИМ, не входящим в этот период свечам.

Выяснил это только после того, как подключил отладчик.
Кстати, при подключении отладчика в VisualStudio 2012 тоже есть свои нюансы относительно работы с TSlab: дело в том, что "лаб" каждый раз ругается на невозможность найти dll-ку индикатора, ибо он сравнивает ВЕРСИИ этой dll-ки!

А студия по умолчанию каждую новую компиляцию перед отладкой, разумеется, помечает новым номером версии. И, соответственно, надо принудительно задать этот номер версии в свойствах сборки, например, равным 1.0.0.0 - чтобы он таким оставался постоянно.

Только тогда лаб перестает ругаться и начинается нормальный рабочий процесс отладки. Об этом тоже стоит упомянуть в документации!!!


Отредактировано SavosRU (Sat Apr 20 2013 02:01 PM)

Наверх
#54366 - Sat Apr 20 2013 06:21 PM Re: Цены OHLC последних n-баров ДО заданного периода [Re: SavosRU]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Вообще по части написания кода у ТСЛаба есть огрехи в документации. Все что вы открыли не новость smile. Открою тайну - отладку можно вести не делая компиляции а просто подключая в ТСЛаб текстовик как внешний скрипт и затем подключаясь студией к ТСЛабу. Это ускоряет и упрощает процесс отладки. Ранее такой способ работал паршиво, сейчас отлично.

А по части свечек все верно говорите. Внутрь передается все что есть на графике.
_________________________
__


Наверх


Moderator:  ViL, sar