Моментум инвестирование.

Решил проверить очередную гипотезу, разработанную академиками, исследующими рынки. На этот раз, так называемое, моментум-инвестирование. Некоторые стратегии, якобы, зарабатывающие 10-30% годовых приведены здесь
http://quantpedia.com/Screener?FilterKeywords=momentum&Page=1

А здесь, есть ссылки на разные академические исследования сайта http://papers.ssrn.com с разными логарифмами, корнями квадратными, интегралами и прочими непонятными математическими формулами, доказывающими что на этой неэффективности не зарабатывает только ленивый.
http://quantpedia.com/Screener/Details/14

В общем, суть моментум-инвестирования следующая:
Momentum основан на предположении, что инструменты, которые в последнее время обгоняли рынок, будут продолжать в том же духе еще некоторое время, а те, кто отставали от рынка, будут отставать и дальше. Хотя практики используют этот принцип уже десятилетия, идея завоевала признание академического сообщества только за прошлые 20 лет. Momentum противоречит гипотезе эффективного рынка, но его доказательства слишком очевидны, чтобы их игнорировать.
http://www.wave-trading.ru/post/238

А методы применяются, примерно, такие:
Выбираем, например, 10 акций, которые за 12 предыдущих месяцев показали лучшую доходность и 10 акций, которые показали худшую доходность. Соответственно, 10 лучших покупаем, а 10 худших продаем. Держим месяц, а потом повторяем ту же процедуру.

Проверить это — раз плюнуть, например, в Велслабе. Пишем 2 стратегии — одна для лонга, другая для шорта, а потом тестируем, объединяя эти две стратегии в комбинацию.

using System;

using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using WealthLab.Rules;
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
protected override void Execute()
{
for(int bar = 251; bar < Bars.Count; bar++)
{
Position p = LastPosition;
if(DateRules.IsLastTradingDayOfMonth(Bars.Date[bar]))
{
SellAtMarket(bar+1, p, "Group1");
if ( BuyAtMarket(bar + 1, Convert.ToString( (Close[bar] – Close[bar-250]) / Close[bar-250] )) != null )
 LastActivePosition.Priority = (Close[bar] – Close[bar-250]) / Close[bar-250];
}
}
}
}

}

using System;

using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using WealthLab.Rules;
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
protected override void Execute()
{
for(int bar = 251; bar < Bars.Count; bar++)
{
Position p = LastPosition;
if(DateRules.IsLastTradingDayOfMonth(Bars.Date[bar]))
{
CoverAtMarket(bar+1, p, "Group1");
if ( ShortAtMarket(bar + 1, Convert.ToString( -1 * ((Close[bar] – Close[bar-250]) / Close[bar-250]) )) != null )
 LastActivePosition.Priority = -1 * ((Close[bar] – Close[bar-250]) / Close[bar-250]);
}
}
}
}

}

  Точка бифуркации.

Но вот проблема — ну никак не удается получить прибыль за последние 10 лет. На разных листах перепробовал. И на SP-500, и на Russell1000, и на комбинированных и везде получается примерно такая картина:

2

Черная линия — лонги, а красная –шорт.

Что делаю не так? Почему у академиков получается заработать на бумаге до 30% годовых, а у меня на тестах даже в убытке остаюсь? :)

ЗЫ. Не забудьте посмотреть как изменился топ 100 лучших трейдерских сайтов!

Пролистать наверх