Chart Studio®

К сожалению, кроме файла с описанием языка CTL и среды программирования CTL.chm, который входит в комплект поставки с DealBook 360, пока не существует документа с более подробным описанием на английском языке, не говоря уже про русский. Но работы над исправлением этих недочетов уже ведутся.

Если в двух словах, то среда программирования ChartStudio обладает всеми основными функциями редактора кода, которые можно увидеть и в других торговых платформах, а именно, позволяет трейдеру следующие действия:

1. открыть уже имеющийся файл, написанный на языке CTL, из файлов
пользователя или предлагаемых в комплекте;
2. внести необходимые изменения в индикатор или стратегию;
3. проверить код индикатора или стратегии на наличие ошибок;
4. сохранить код в файл с другим именем;
5. подключить (т.е. инсталлировать) новый индикатор или стратегию к DealBook360 или деинсталлировать их.
и др.

Заметим, что стратегия в DealBook 360 - это тоже, что иногда называют советниками или экспертами в др. торговых платформах. Стратегии позволяют заключать сделки как в режиме демо, режиме с подтверждением, так и в автоматической торговле.

Сам язык CTL похож на обычный язык программирования Pascal и вобрал в себя некоторые команды и принципы от других языков, на которых написаны стратегии и индикаторы. Например, это такие как EasyLanguage в TradeStation (Omega), Wealthscript в WealthLab, язык Metastock и др. Заметим, что CTL не похож на популярный язык MQL для MetaTrader, который имеет в своей основе язык
программирования C и является довольно сложным для начинающих пользователей, и который в своем развитии пошел по пути усложнения кода.

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

Скоро мы представим здесь примеры простых вариантов кодов. Пока выложим код некоторых индикаторов:

indicator MACD

indicator MACD;
input price = close,
first_period = 12,
second_period = 26,
signal_period = 9;
draw line("MACD"), line_signal("MACD sig"),
green_line_histogram("MACD green hgm", Histogram, yellow),
red_line_histogram("MACD red hgm", Histogram, yellow);
vars i(number);
begin
line := ema(price, first_period) - ema(price, second_period);
line_signal := ema(line, signal_period);
green_line_histogram := line - line_signal;
red_line_histogram := green_line_histogram;
for i := front(green_line_histogram) to back(green_line_histogram) do begin
if green_line_histogram[i] < 0 then green_line_histogram[i] := 0;
end;
for i := front(red_line_histogram) to back(red_line_histogram) do begin
if red_line_histogram[i] > 0 then red_line_histogram[i] := 0;
end;
end.

indicator Stochastics

indicator Stochastics;
input src = close, k_period = 5, k_slow_period = 3, d_period = 3;
draw k("Fast %K"), pk("%K"), pd("%D");
vars i(number), lo(number), dif(number);
begin
for i := front(src) + k_period - 1 to back(src) do begin
lo := movmin(low, i, k_period);
dif := movmax(high, i, k_period) - lo;
if dif > 0 then
k[i] := 100 * (src[i] - lo) / dif
else
k[i] := 0;
end;
pk := sma(k, k_slow_period);
pd := sma(pk, d_period);
end.

indicator AwesomeOscillator

indicator AwesomeOscillator;
draw hist_line("AO", Histogram), signalLine("SL"), red_line("greenAO", Histogram, Green),
greenline("redAO", Histogram, Red);
vars i(number), disp(series), price(series), first_period(number),
second_period(number), third_period(number);
begin
first_period := 5;
second_period := 34;
third_period := -1;
price := (high + low) / 2;
hist_line := sma(price, first_period) - sma(price, second_period);

signalLine := sma(hist_line, first_period);

disp := displace(hist_line, third_period);
for i := front(disp) to back(disp) do begin
if hist_line[i] > disp[i] then
greenLine[i] := hist_line[i]
else
greenLine[i] := 0;
end;

for i := front(disp) to back(disp) do begin
if hist_line[i] < disp[i] then
red_line[i] := hist_line[i]
else
red_line[i] := 0;
end;
end.

indicator Ichimoku

indicator Ichimoku;
input TenkanSenPeriod = 7, KijunSenPeriod = 21, SenkouSpanPeriod = 42,
ChikouSpanPeriod = 26, HorShift = 21;
draw line_cs("Chikou Span"), line_ts("Tenkan-sen"), line_ks("Kijun-sen"),
line_sa("Senkou Span A"), line_sb("Senkou Span B");
begin
line_cs := displace(close, -ChikouSpanPeriod);
line_ts := ishimoku_func(TenkanSenPeriod);
line_ks := ishimoku_func(KijunSenPeriod);
line_sa := displace((line_ts + line_ks) / 2, HorShift);
line_sb := displace(ishimoku_func(SenkouSpanPeriod), HorShift);
end.

Для ознакомления с примерами более сложных вариантов кодов, лучше всего
зайти на сайт http://www.gftforex.com/forum (англоязычный форум), где они представлены в широком
ассортименте.