Amibroker

Сайт продукта: https://www.amibroker.com/

AmiBroker – программа технического анализа. Позволяет производить ручной анализ графиков, а также создавать и тестировать механические торговые системы.

Основные особенности программы:

  • современный настраиваемый интерфейс пользователя;
  • объектно-ориентированные средства рисования (разнообразные линии тренда, параллельные линии, каналы регрессии, инструменты Фибоначчи, циклы, круги, прямоугольники, текст на диаграмме и др.);
  • перенос индикаторов на график (поддержка технологии drag-and-drop);
  • поддержка наиболее распространенных внутридневных интервалов: 1, 5, 15, 60 минут, а также настраиваемых N-минутных интервалов (N = 1..1380);
  • 5-секундные, 15-секундные, тиковые диаграммы для реал-тайм версии;
  • множественные диаграммы — различные виды и масштабы времени доступны в одно и тоже время;
  • десятки встроенных наиболее популярных индикаторов: ROC, RSI, MACD, OBV, CCI, MFI, NVI, Stochastics, DMI, ADX, Parabolic SAR, TRIX и др.
  • оригинальный браузер дерева символов, позволяющий группировать инструменты, по секторами, отраслями экономики, индексами т.д.
  • поддержка различных источников данных (плагины для MetaStock, eSignal, DDE) свободные данные рынка FOREX и свободные end-of-day данные с большинства мировых рынков, загружаемые через программу — загрузчик AmiQuote;
  • мощный встроенный язык AmiBroker Formula Language (AFL) для создания пользовательских индикаторов и торговых систем. AFL включает более 200 встроенных функций, которые можно использовать как стандартные блоки для ваших формул и позволяет включать коды на VBScript/JScript, обеспечивая практически неограниченные возможности;
  • встроенная поддержка использования нескольких тайм-фреймов в одной формуле;
  • широкие возможности для создания предупреждений (alerts);
  • возможность выполнять внешние приложения через алерты, что позволяет автоматизировать торговлю;
  • очень быстрый бэк-тестер с подробным отчетом о результатах тестирования торговой системы;
  • поддержка тестирования торговой системы на портфеле инструментов;
  • встроенные инструменты для управления размером позиции, а также возможность управлять позицией в зависимости от Ваших условий;
  • возможности оптимизации торговых стратегий;
  • различные варианты стоп ордеров (maximum-loss stop, profit-target stop, trailing-stop, N-bar (time) stop); и многое другое...
../_images/AmiBroker-01.png

Рис. 1. Внешний вид программы AmiBroker

Источники котировок

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

Для загрузки котировок из различных источников используется специальная программа AmiQuote, её можно вызвать из меню AmiBroker Tools или, как обычную программу, из меню Пуск.

Импорт исторических данных из Metatrader в AmiBroker

В программе Metatrader 4/5 откроем архив котировок, выполнив команду главного меню Сервис ‣ Архив котировок (или нажав клавишу F2). В открывшемся окне слева выберем валютную пару и нужный таймфрейм. Внизу нажмём кнопку Экспорт. Сохраним файл в любую папку на диске. При необходимости переименуем файл (потом, при импорте в программу AmiBroker, будет автоматически создан символ с тем же именем, что и имя файла). Закроем архив котировок, нажав кнопку Закрыть.

Чтобы работать с внутридневными таймфреймами, надо предварительно зайти в настройки базы данных (команда меню File ‣ Database settings) и задать для параметра Base time interval (базовый временной интервал) значение, например, 1 Minute. Для тестирования на дневках – End-Of-Day.

В программе AmiBroker выполним команду меню File ‣ Import Wizard. Нажмём кнопку Pick files(выбрать файлы). Укажем наш файл (можно выбрать щелчками мыши несколько файлов, удерживая клавишу Ctrl). Нажмём кнопку Далее.

В окне настройки (рис. 2) для первой колонки укажем YMD (год-месяц-день), для второй – Time(время). Для остальных колонок оставим значения по умолчанию OpenHighLowCloseVolume. В поле Separator (Разделитель) выберем Comma (запятая). Поставим галочку Automatically add new symbols (автоматически добавить новые символы). Нажмём кнопку Далее, а в следующем окне – кнопку Готово.

../_images/AmiBroker-02.png

Рис. 2. Окно настройки полей для импорта котировок

В окне Symbols (символы) в левой части экрана AmiBroker появится новый символ, совпадающий с именем импортированного файла. При выборе символа (щелчком мыши) будет отображён соответствующий график. Разумеется, работать будет только тот таймфрейм, который мы загрузили, а также более старшие таймфреймы.

Отредактируем информацию о текущем символе, для этого нажмём на панели инструментов кнопку Symbol information. Установим параметр Round Lot Size равным 1 (рис.3); параметр Tick Size0.0001 (или 0.01); параметр Point Value (цена пункта) должен быть равен $10 / 0.0001 = $100000; Margin Deposit равен $1000 (1% от $100000).

../_images/AmiBroker-03.png

Рис. 3. Настройка свойств символа

Импорт исторических данных с сайта finam.ru

Вместо Metatrader 4/5 можно использовать в качестве источника исторических данных сайт finam.ru.

Чтобы загрузить котировки валют на рынке FOREX, сверху слева выберем рынок Мировые валюты, сверху справа – нужную валютную пару; затем укажем начальную и конечную даты, нужный таймфрейм; подредактируем имя выходного файла, чтобы оно совпадало с желаемым именем символа в программе AmiBroker; тип выходного файла .csv, формат даты ггггммдд, формат времени чч:мм; время можно отметить московское; время – начала свечи; разделитель полей – запятая; разделитель разрядов – нет; формат записи в файл DATE, TIME, OPEN, HIGH, LOW, CLOSE, VOL. Галочки Добавить заголовок файла и Заполнять периоды без сделок ставить не будем. Нажмём кнопку получить файл.

При загрузке минуток следует указывать период не более одного года (в дневное время с 10.00 до 18.00 – не более двух месяцев), иначе вместо котировок получим текстовый файл с сообщением об ошибке.

После загрузки файла выполним импорт данных в программу AmiBroker, как описано в предыдущем разделе.

Тестирование простейшей торговой системы

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

В программе AmiBroker выполним команду главного меню Analysis (Анализ) ‣ Formula Editor (Редактор формул).

Введём текст:

FastMA = MA(C, 5);   // Быстрая скользящая средняя по ценам закрытия с периодом 5.
SlowMA = MA(C, 20);  // Медленная скользящая средняя по ценам закрытия с периодом 20.
Buy = Cross(FastMA, SlowMA);  // Условие покупки - быстрая скользящая средняя пересекает медленную снизу вверх.
Sell = Cross(SlowMA, FastMA);   // Условие закрытия - обратное пересечение.
SetPositionSize(1, spsShares ); // Размер позиции - 1 контракт.

Сохраним программу под любым именем в каталоге Custom.

Предостережение

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

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

Язык AFL, встроенный в программу AmiBroker, требует, чтобы в тексте программы, реализующей некоторую торговую систему, были определены переменные:

  • Buy – открытие длинной позиции;
  • Sell – закрытие длинной позиции;
  • Short – открытие короткой позиции;
  • Cover – закрытие короткой позиции.

Если какая-либо из этих переменных не определена, то соответствующее действие не будет выполняться. Пока что в нашей программе определены только переменные Buy и Sell, поэтому мы будем открывать и закрывать только длинные позиции.

Предопределённая функция MA вычисляет простую скользящую среднюю. Первый параметр – массив значений (в данном случае это цены закрытия текущего финансового инструмента), второй параметр – период скользящей средней. Результатом будет массив значений индикатора.

Предопределённая функция Cross принимает два аргумента (массивы значений, например, цены закрытия каждого бара текущего финансового инструмента или значения какого-либо индикатора на каждом ценовом баре) и возвращает значение 1 для того бара, на котором график, соответствующий первому ряду значений, пересёк снизу вверх график, соответствующий второму ряду. На всех остальных барах данная функция возвращает значение 0.

Теперь выполним команду главного меню Analysis (Анализ) ‣ New Analysis (Новый анализ). В поле Formula выберем только что созданный файл. В поле Apply to (Применить к) выберем Current (Текущий символ). В поле Range (Диапазон) либо выберем From — To dates (От — До даты) и установим нужный диапазон дат, либо выберем All quotes (Все котировки). Нажмём кнопку Settings(настройки), установим начальный размер депозита (Initial equity) и поставим галочку Futures mode(режим фьючерсов), чтобы тестер использовал для вычислений информацию, которую мы недавно ввели в свойствах символа. В поле Periodicity выберем нужный таймфрейм. Закроем диалог настроек, нажав кнопку OK. Запустим тест, нажав кнопку Backtest. Таблица будет заполнена сведениями по всем позициям, открытым и закрытым в соответствии с заданной программой. Чтобы посмотреть отчёт, нажмём кнопку Report.

../_images/AmiBroker-04.png

Рис. 4. Текст программы и результат теста

../_images/AmiBroker-05.png

Рис. 5. Кривая эквити (слева) и отчёт по прибылям и убыткам за каждый месяц (справа)

Предупреждение

Не следует безусловно доверять приведённым результатам тестирования торговой системы! Представленный здесь материал рассчитан для начального ознакомления с программой AmiBroker, многие важные детали здесь пока опущены, значения многих важных параметров оставлены по умолчанию, поэтому результаты тестирования на истории пока далеки от тех, что могли бы быть получены при реальной торговле.

В таблице сделок с помощью правой кнопки мыши вызовем контекстное меню и выберем команду Show arrows for actual trades (Показывать стрелки для сделок). Переключимся на окно графика и проанализируем позиции, открытые программой. Добавим на график те же самые скользящие средние с периодом 5 и 20, которые использовались для принятия решений. Для этого в левой части окна программы вместо вкладки Symbols выберем вкладку Charts (Графики), раскроем группу Averages (Средние) и перетащим на график индикатор MA — Simple Moving Average. Зададим период 5 и выберем нужный цвет линии. Нажмём кнопку OK. Аналогично для медленной скользящей средней. Все остальные индикаторы, если они были на графике (кроме самой цены Price), удалим с помощью правой кнопкой мыши (пункт контекстного меню Delete indicator).

../_images/AmiBroker-06.png

Рис. 6. Стрелки показывают моменты открытия и закрытия позиций

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

FastMA = MA(C, 5);
SlowMA = MA(C, 20);
Buy = Cross(FastMA, SlowMA);
Sell = Cross(SlowMA, FastMA);
Short = Sell; // Открытие короткой позиции - там же, где закрыли длинную.
Cover = Buy;  // Закрытие короткой позиции - там же, где и открытие длинной.
SetPositionSize(1, spsShares );

Сохраним текст программы и в окне Analysis нажмём кнопку Settings, чтобы открыть диалог настроек. В поле Positions из раскрывающегося списка выберем пункт Long and short (длинные и короткие позиции) и нажмём кнопку OK. Снова запустим тест нажатием кнопки Backtest. Убедимся, что теперь программа открывает и длинные, и короткие позиции. В результате мы всегда находимся в рынке – только закрыв короткую позицию, мы тут же открываем длинную, и наоборот, закрыв длинную позицию, тут же открываем короткую.

Оптимизация параметров

В нашей программе имеется два параметра (периоды двух скользящих средних), значения которых мы установили произвольно. Хотелось бы найти наилучшие значения этих параметров, которые обеспечивают максимальную прибыль (или, например, максимальную величину коэффициента Шарпа). Другими словами, мы хотим провести оптимизацию параметров нашей торговой системы.

Укажем в тексте программы, какие параметры надо оптимизировать; для этого добавим в самом начале две строки, чтобы получилось:

Period1 = Optimize("Period1", 5, 1, 50, 1);
Period2 = Optimize("Period2", 20, 2, 100, 1);
FastMA = MA(C, Period1);
SlowMA = MA(C, Period2);
Buy = Cross(FastMA, SlowMA);
Sell = Cross(SlowMA, FastMA);
Short = Sell;
Cover = Buy;
SetPositionSize(1, spsShares );

Первый аргумент функции Optimize – это название оптимизируемого параметра; второй – значение по умолчанию; далее указываются минимальное и максимальное значения; последний аргумент – шаг изменения.

Сохраним текст программы и нажмём кнопку Optimize. После непродолжительного ожидания получим таблицу, каждая строка которой соответствует одному из многих наборов значений параметров. Отсортировать строки можно по значению любой колонки, щёлкнув мышкой по её заголовку. Искомые значения параметров можно найти в самых последних колонках таблицы.

Например, если максимальное значение коэффициента Шарпа достигается при значениях параметров Period1 = 15 и Period2 = 23, то поставим эти числа в качестве вторых аргументов функции Optimize:

Period1 = Optimize("Period1", 15, 1, 50, 1);
Period2 = Optimize("Period2", 23, 2, 100, 1);
....

или просто присвоим эти значения соответствующим параметрам, закомментировав вызовы функции Optimize, чтобы можно было легко использовать её при необходимости в дальнейшем (при повторной оптимизации, например, на другом периоде времени):

Period1 = 15; // Optimize("Period1", 5, 1, 50, 1);
Period2 = 23; // Optimize("Period2", 20, 2, 100, 1);
....

сохраним изменения и запустим тест, как обычно, нажав кнопку Backtest, чтобы получить отчёт по эффективности торговой системы с этими параметрами.

  1. Аватар VasiliyBolshov
    Врач-бондиатОр, удалось найти форум?

    АлексейФ,

    amisite.ru
  2. Аватар Врач-бондиатОр
    Вопрос знатокам скриптов в Амиброкере
    Всем привет!

    Допустим, у меня есть для бэктеста простой скрипт вроде: 

    Buy=Close>Open;
    Sell=Close<Open;

    Но мне нужно, что скрипт на бэктесте на сигнале buy покупал 2 бумаги, а на sell продавал 1 бумагу.

    Подскажите плиз, что нужно добавить в скрипт?

    На форумах я что-то ничего толкового не нашел...



    Авто-репост. Читать в блоге >>>
  3. Аватар Andrey Dudakov
    Здесь real time маркет дата для AmiBroker: get.dxfeed.com/
  4. Аватар АлексейФ
    Форум для Амиброкера (язык afl)
    Всем привет!

    Может кто знает живой форум на котором обсуждается кодинг на языке afl?
    Поисковики  дают ссылку только на amibroker.com, но форум не открывается ни в одном из браузеров.

    Авто-репост. Читать в блоге >>>

    Врач-бондиатОр, удалось найти форум?
  5. Аватар Врач-бондиатОр
    Amibroker - как из бэктеста удалить дни?
    Всем привет!

    Если есть знатоки afl, то подскажите плиз как в скрипте прописать удаление определенных дней недели на бэктесте?

    Авто-репост. Читать в блоге >>>
  6. Аватар Врач-бондиатОр
    Форум для Амиброкера (язык afl)
    Всем привет!

    Может кто знает живой форум на котором обсуждается кодинг на языке afl?
    Поисковики  дают ссылку только на amibroker.com, но форум не открывается ни в одном из браузеров.

    Авто-репост. Читать в блоге >>>
Чтобы купить акции, выберите надежного брокера: