Индикатор MACD широко известен среди трейдеров. Мне его сигналы помогают находить развороты и предупреждения о коррекциях. Много написано, как использовать его сигналы для открытия позиций, а мы сегодня рассмотрим прикладное применение в алготрейдинге.
Все будет тестироваться на Quantopian (см. сюда), писать код будем на Python. Рассмотрим следующие стратегии:
Важным этапом формирования инвестиционного портфеля является его бэктестинг. Что такое бэктестинг? Это тестирование портфеля на исторических данных. Такая проверка позволяет узнать, как вел себя портфель в прошлом, какую доходность он показал и какой при этом имел уровень риска.
"Предвидение будущего должно опираться не на предсказания и приметы, а на мудрость."
Цицерон
На блоге моего партнера и разработчика торговых систем появились результаты тестирования трех популярных стратегий. Если вы их торгуете, то вам будет интересно узнать, как они показывают себя на исторических данных и как можно улучшить их результат. Вот эти стратегии.
Quantopian — богатый инструментарий для бэктестинга различных стратегий с помощью Python. На сайте имеются бесплатные данные: минутные тики⏳ с 2002 года, фундаментал, календарь отчетности, настроение по новостям и т.д.
Я планирую вести серию подобных постов по написанию и проверке различных стратегий. Параллельно я буду описывать саму платформу и ее возможности, что позволит осветить весь путь с нуля.
Братья, Сестры!
Правильно ли я понимаю, что в приложении к подкидыванию монетки эргодическая гипотеза формулируется примерно так:
«Статистические свойства результата 100 подбрасываний одной и той же монеты совпадают со статистическими свойствами опыта, в которым мы подбрасываем 100 монет по одному разу». Как я понимаю, вера в необходимость бектестинга держится именно на этом? Просьба поправить мои ошибки и объяснить.
P.S.Прав Решпект. Всегда прав. Не надо читать книгу Тимофея на ночь. Особенно 279 страницу)
Тест стратегии из поста http://smart-lab.ru/blog/343965.php
Формализовал стратегию так, как я ее понял.
1. Входа на следующий день, после обновления исторического хая. Тут есть неточности — историю брал с 2005 года. Не факт, что all time high был на этом промежутке.
2. Предыдущее обновление хая было больше 90 дней назад и менее чем 200 дней назад.
3. Примерно 500 ликвидных бумаг с NYSE/NASDAQ/AMEX. Без учета делистинга, без учета комиссий, без учета платы за плечо. Вроде бы без дивидендов (не уверен), дейли дата взята с Google Finance.
4. Стоп в примере — 3%. Тейк — 90%. Можно взять больше стоп, результаты не критично меняются.
5. Вход фиксированным BP на позицию. (взял 1000 на позу)
Код Multicharts.Net
using System; using System.Drawing; using System.Linq; using PowerLanguage.Function; using ATCenterProxy.interop; namespace PowerLanguage.Strategy { public class _INTEST_by_high_daily : SignalObject { public _INTEST_by_high_daily(object _ctx):base(_ctx){} private IOrderMarket buy_order; private IOrderMarket sell_order; double previous_high; double previous_high_low_range; double all_time_high; protected override void Create() { // create variable objects, function objects, order objects etc. buy_order = OrderCreator.MarketNextBar(new SOrderParameters(Contracts.Default, EOrderAction.Buy)); sell_order = OrderCreator.MarketNextBar(new SOrderParameters(Contracts.Default, EOrderAction.Sell)); } protected override void StartCalc() { all_time_high =0; } protected override void CalcBar() { // strategy logic if (Bars.High[0]>previous_high && previous_high_low_range<previous_high && previous_high == all_time_high) { buy_order.Send(); } if (StrategyInfo.MarketPosition>0 && Bars.Close[0]>StrategyInfo.AvgEntryPrice*1.9) sell_order.Send(); previous_high = Bars.High.Highest(200); previous_high_low_range = Bars.High.Highest(90); if (Bars.High[0]> all_time_high) all_time_high = Bars.High[0]; } } }