Введение: Пример 1
Достаточно всего двух команд

Формат CHD очень прост, если не заниматься дизайном графика. Для описания графика вполне хватает двух команд NewData и Series, за которыми следуют строки данных.

Команда NewData создает новую матрицу данных с заданными столбцами и делает ее текущей. Число значений в каждой последующей строке данных должно равняться количеству столбцов в матрице.

Команда Series создает серию точек на графике и описывает ее свойства, такие как X-координата, Y-координата, цвет, форма точки, и т.д. Каждое свойство может быть либо константой, либо именем столбца данных из какой-либо матрицы текущего слайда. Cвойства точек подробно описаны в разделе Серии.

Следующий график показывает динамику цен и объемов торгов акциями компании ЛУК ОЙЛ на ММВБ с февраля по ноябрь 1999 года.

Пример графика: Торги акциями ЛУК ОЙЛ, 1999 год

График был построен по входному потоку данных, содержавшему по 3 значения в каждой строке: дату, цену и объем. Каждая строка соответствовала одному дню. Ниже приводится начальный отрывок входного потока:

#NewData day, price, value
#Series X=day Y=price S=0 LC=1
#Series X=day Z=value S=0 LC=3
28/01/99 25.35 216335
29/01/99 25.68 124938
01/02/99 25.57 10226
...

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

Введение: Пример 2
И все-таки двух команд не достаточно

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

#Locale= rus
#Slide.Background = 17 17 7 7, bidir
#Slide.GradMaxSize = 2
#Title Торги акциями ЛУК ОЙЛ, 1999 год
#YName = цена
#ZName= объем, млн. руб
#XAxis.Type = date
#YAxis.Color = 1
#ZAxis.Color = 3
#NewData day, price, value
#Let vmill= value / 1000000
#Series X=day Y=price S=0 LP=2 LW=2 LC=1
#Series X=day Z=vmill S=0 LP=2 LW=1 LC=3 FD=1 FP=2 FC=15
#Series X=day Z=0 S=0

28/01/99 25.35 216335
29/01/99 25.68 124938
01/02/99 25.57 10226
...

Пример: сформатированный график хода торгов

Введение: Пример 3
Несколько графиков на одном слайде

Продолжим пример с графиком хода торгов. Биржевые графики часто рисуют друг под другом: сверху цены, снизу объемы. Ход цены изображают с помощью интервальных гистограмм или японских подсвечников:

Пример: две панели по одним данным

Данные для этого графика те же самые, что и в примерах 1 и 2. Слайд разбивается на две панели командами NewPanel. Команда Group размещает эти панели друг под другом и говорит, что верхняя панель в три раза выше. Команда CandleWidth задает ширину подсвечников в секундах (в данном случае одна неделя).

## определяем данные
#NewData day, price, value
#Let vmill= value / 1000000
#Slide.Background = 17 17 7 7, bidir
#Slide.GradMaxSize = 2

## определяем верхнюю панель цен
#NewPanel price
#Title Торги акциями ЛУК ОЙЛ, 1999 год
#YName = цена
#XAxis.Type = date
#XAxis.Visible off
#Series X=day MC=price MS=2 C=7
#CandleWidth 1 weeks

## определяем нижнюю панель объемов
#NewPanel volume
#Title.Border 0, 1, 0, 1
#Title.IndentVert = 0
#XAxis.Type = date
#XAxis.SpaceVert = 1
#XAxis.IndentVert = 0
#Series X=day MC=vmill ML=0 MS=3 C=15
#CandleWidth = 1 weeks

## располагаем панели друг под другом, синхронизируем оси
#Group (3,1)(1) main = price, volume
#SyncAxis price.XAxis, volume.XAxis

27/01/99 24.85 66913
28/01/99 25.35 216335
29/01/99 25.68 124938
...

Введение: Пример 4
Биржевые торги — необычный ракурс

Можно пойти дальше и построить третий график по тем же колонкам данных. Например, это могла бы быть гистограмма распределения объемов торгов по ценам, дающая нестандартное представление биржевых торгов.

Пример: три панели по одним данным

Создадим еще одну панель и разместим на ней гистограммную серию. Для построения гистограммы распределения необходимы две дополнительных команды. HorizHist говорит, что гистограмма горизонтальная и каждая точка отображается отдельно внутри столбца. Команда ColWidth задает ширину колонки гистограммы.

## определяем данные
#NewData day, price, value
#Let vmill= value / 1000000
#Slide.Background = 17 17 7 7, bidir
#Slide.GradMaxSize = 2

## определяем верхнюю панель цен
#NewPanel price
#Title Торги акциями ЛУК ОЙЛ, 1999 год
#YName = цена
#XAxis.Type = date
#XAxis.SpaceVert = 1
#XAxis.IndentVert = 0
#XAxis.RulePose both
#Series X=day MC=price MS=2 C=7
#CandleWidth 1 weeks

## определяем нижнюю панель объемов
#NewPanel volume
#Title.IndentVert = 0
#XAxis.Type = date
#XAxis.Visible off
#Series X=day MC=vmill ML=0 MS=3 C=15
#CandleWidth = 1 weeks

## определяем правую панель с гистограммой объемов
#NewPanel hist
#HorizHist = detailed
#ColWidth = 5
#YAxis.Visible off
#Series Y=price HW=vmill HS=time C=15

## располагаем панели друг под другом, синхронизируем оси
#Group (3,1)(2,1) main = price, hist, volume
#SyncAxis price.XAxis, volume.XAxis
#SyncAxis price.YAxis, hist.YAxis

27/01/99 24.85 66913
28/01/99 25.35 216335
29/01/99 25.68 124938
...

Введение: Пример 5
Можно обходиться без данных

Точнее, данные можно вычислять по формулам. Например, чтобы построить график функции номального распределения, достаточно всего четырех строк описания:

#Let x= RowIndex/5-4
#Let y= FNorm(x)
#ResizeData 40
#Series X=x Y=y

Команда Let создает новый столбец данных, значения в котором вычисляются по указанной формуле. Встроенная переменная RowIndex дает порядковый номер текущей точки, а команда ResizeData устанавливает число строк в столбцах x и y, то есть число точек на графике.

Вот что в итоге получается:

Пример: график построен по формуле, а не по таблице данных