Ленты в Amibroker

Опубликовано в AmiBroker

Несколько лет назад первой программой теханализа, которую я решил освоить, был, как водится, Metastock. Все в программе хорошо, но буковки очень маленькие, которыми текст стратегии выводится {#emotions_dlg.laughing} Среди прочего в одной из торговых систем, идущих с поставкой Metastock очень понравилась лента, которая шла по нижнему краю экрана и меняла свой цвет взависимости от знака позиции - лонг или шорт. Весьма наглядно. И вот буквально несколько дней назад мне проходит заказ на построение стратегии в Amibroker, в котором одним из требований указана необходимость визуализации знака позиции.

Решение нашлось. Как это обычно бывает, все оказывается не то чтобы сложно, а крайне просто.

Оператор вывода метки (Plot) среди иных вариантов параметра style имеет такие:

  • styleOwnScale = 32768 - plot is using independent scaling
  • styleArea = 16384 - area chart (extra wide histogram)

Суть первого - масштабирование выводимой информации будет производиться в масштабе,отличном от уже установленного на графике. Второй - будут выводиться  сплошные закрашенные цветом области.

 Для нашей цели вполне подходит комбинация стилей styleArea | styleOwnScale | styleNoTitle | styleNoLabel, где вдобавок к первым двум флагам добавлена еще пара - не выводить заголовок и не указыать последние значения на оси ординат. Соответственным образом подбираем значения для параметров  minvalue and maxvalue для достижения максимального эстетического удовольствия Cool.

Вот так. например, будет выглядеть afl простейшего алгоритма работы по  скользящим средним:

_SECTION_BEGIN(“Price”);
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat(“{{NAME}} – {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}”, O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, “Close”, ParamColor(“Color”, colorBlack ), styleNoTitle | ParamStyle(“Style”) | GetPriceStyle() );

/*Buy or Sell Condition*/
Buy = Cross(EMA( Close , 3 ),EMA( Close , 23 ));
Sell = Cross(EMA( Close , 23 ),EMA( Close , 3 ));

/*Plot Buy or Sell Arrows*/
PlotShapes(IIf(Sell==1, shapeDownArrow, shapeNone), colorRed, 0,High, Offset=-20);
PlotShapes(IIf(Buy==1, shapeUpArrow , shapeNone), colorGreen, 0,Low, Offset=-20);

/*Plot EMA*/
Plot( EMA( Close,23), “23 EMA”,ParamColor(“Color”, colorRed ),styleNoRescale);
Plot( EMA( Close,3), “3 EMA”,ParamColor(“Color”, colorBlue ),styleNoRescale);

/*Plot Ribbon */
Ribbon1=IIf( EMA( Close , 3 )>EMA( Close , 23 ) ,colorGreen, IIf(EMA( Close , 23 )>EMA( Close , 3 ), colorRed,colorYellow));
Plot(6, “Ribbon”, Ribbon1, styleOwnScale| styleArea| styleNoLabel,-0.5,100);
_SECTION_END();

 Собственно, последние выделенные строки и дают нам ленту. Первые 2 изображения иллюстрирует этот подход.  На первом изображении - результат работы приведенного afl. На втором -вариант реализации лент, когда одновременно открываются позиции в лонг и шорт. 

 

Вот другой способ наглядной индикации типа открытой позиции. С одной стороны он значительно симпатичнее, с другой - показывает только последнюю (текущую) позицию. Фрагмент в амиброкере выглядит примерно так:

if(сейчас_покупка)
               bgColor = ColorRGB(0,66, 2);
else
               bgColor = ColorRGB(66,2, 0);
 SetChartBkGradientFill( colorBlack, bgColor);  

Результат приведен на двух последних изображениях.

 

Недостаточно прав для комментирования