Ленты в Amibroker
Несколько лет назад первой программой теханализа, которую я решил освоить, был, как водится, Metastock. Все в программе хорошо, но буковки очень маленькие, которыми текст стратегии выводится
Среди прочего в одной из торговых систем, идущих с поставкой Metastock очень понравилась лента, которая шла по нижнему краю экрана и меняла свой цвет взависимости от знака позиции - лонг или шорт. Весьма наглядно. И вот буквально несколько дней назад мне проходит заказ на построение стратегии в Amibroker, в котором одним из требований указана необходимость визуализации знака позиции.
Решение нашлось. Как это обычно бывает, все оказывается не то чтобы сложно, а крайне просто.
Оператор вывода метки (Plot) среди иных вариантов параметра style имеет такие:
|
Суть первого - масштабирование выводимой информации будет производиться в масштабе,отличном от уже установленного на графике. Второй - будут выводиться сплошные закрашенные цветом области.
Для нашей цели вполне подходит комбинация стилей styleArea | styleOwnScale | styleNoTitle | styleNoLabel, где вдобавок к первым двум флагам добавлена еще пара - не выводить заголовок и не указыать последние значения на оси ординат. Соответственным образом подбираем значения для параметров minvalue and maxvalue для достижения максимального эстетического удовольствия
.
Вот так. например, будет выглядеть 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);
Результат приведен на двух последних изображениях.
