vlad1024
vlad1024 личный блог
22 июня 2012, 19:25

Простейшая стратегия долгосрочного инвестирования.

Попробуем сделать простейшую стратегию для долгосрочного инвестирования. В качестве рабочего будем использовать дневной таймфрейм. Вся суть стратегии будет заключаться в простейшей идеи, что падение рынка обычно связанно с более высокой волатильностью, чем в среднем. Соответсвенно, мы будем покупать, когда волатильность ниже среднего, и выходить из лонга когда она повышается. В качестве меры волатильности будем использовать размах бара High — Low. Остается вопрос лишь в том как измерить долгосрочное среднее волатильности. Можно использовать — среднее, то есть скользящую среднюю взятую за определенный период. Но так как мы имеем дело с распределением с тяжелыми хвостами, среднее будет плохой оценкой центра распределения. Поэтому будем использовать робастную оценку центра распределения — в нашем случаи это будет медиана, или более точно, скользящая медиана взятая с большим окном. Наши рассуждения достаточно напрямую транслируются в код на WealthLab:
 
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies
{
	public class MyStrategy : WealthScript
	{
		private StrategyParameter smaPeriod;
		public MyStrategy()
		{
			smaPeriod = CreateParameter("Range Sma Period", 1, 1, 50, 1);      
			
		}
		
		protected override void Execute()
		{
			DataSeries range = High - Low;
			DataSeries rangeSma = new WealthLab.Indicators.SMA(range, smaPeriod.ValueInt, "sma");
			DataSeries signal = rangeSma -  new WealthLab.Indicators.Median(range, 200, "median");
			
			for(int bar = 0; bar < Bars.Count; bar++)
			{				
				if (IsLastPositionActive)
				{
					//code your exit rules here
					if (signal[bar] > 0)
						SellAtMarket(bar + 1, LastPosition, "sell");
				}
				else
				{
					//code your entry rules here
					if (signal[bar] < 0)
						BuyAtMarket(bar + 1, "buy");
				}
			}
		}
	}
}


Единственный параметр, это длина скользящей средней для сглаживания текущего сигнала High-Low (полный аналог ATR), в дальнейшем мы будем его использовать лишь чтобы сократить количество входов. Установим сначала smaPeriod = 1, то есть не будем использовать сглаживание сигнала.
Получим:
Простейшая стратегия долгосрочного инвестирования.

Простейшая стратегия долгосрочного инвестирования.
Судя по полученным параметрам бэктеста, идея содержит какое-то статистеческое преимущество. Теперь попробудем уменьшить количество сигналов, увеличив период фильтрации High-Low. Сначала проверим робастность этого параметра, тоесть что параметры стратегии сохраняются на широком диапазоне значений параметра. Убедившись в этом, возьмем его к примеру равным 12. И финально получаем:
Простейшая стратегия долгосрочного инвестирования.

Простейшая стратегия долгосрочного инвестирования.

Как видно, стратегия bye & hold принесла за рассматриваемый период нулевую доходность, в то время как наша простейшая система показала, не большую, не совсем стабильную, но прибыль. Аналогичную систему можно построить на часах добавив параметр medianPeriod, которая будет совершать больше сделок и показывать сравнимый результат.

Разработка роботов на заказ
Клуб алготрейдеров StockSharp 
23 Комментария
  • Максим Милованов
    22 июня 2012, 21:17
    Отлично, плюс!
  • Sekator
    22 июня 2012, 21:24
    Влад, Резалты не тестов, а реальной работы на реале были бы более убедительны показать как идея грамотно реализованная и оттестироваддая приводит к конкретному результату.
      • Sekator
        22 июня 2012, 21:41
        vlad1024, Если это зарабатывающая стратегия, чего сами не запускаете?
        • Sekator
          22 июня 2012, 21:41
          нужно же ещё оптимальные параметры подогнать
          • Sekator
            22 июня 2012, 22:00
            vlad1024, ничего себе 30-40 «на любителя»:)
            Если одна из рабочих стратегий и система будет распределять капитал между стратегиями, кажется нейронная называется, тоже неплохо.
            А если плечи увеличить то уже не 30-40?
  • Invest-Fund
    22 июня 2012, 21:43
    Тоже плюсанул за доступность выигрывателя.
  • val
    22 июня 2012, 21:53
    о, даже с кодом, спасибо, очень интересно, можно попробовать эту идею в качестве фильтра для других стратегий на меньших таймфреймах.
  • Игорь Рябушкин
    22 июня 2012, 23:20
    А Net Framework поддерживается?
      • Медовуха
        23 июня 2012, 00:17
        vlad1024, а вас какая доходность устраивает?
      • Медовуха
        23 июня 2012, 00:19
        vlad1024, тупой вопрос: а как эту медиану в квик транслировать или ввести?) если ответишь что-то, то большое спасибо.
  • trader_notes
    25 июня 2012, 09:12
    ты так скоро себе врагов наживешь :)
  • trader_notes
    25 июня 2012, 15:42
    скорее подход. что хуже, потому что граали применят в лоб (и ничего в долгосроке не выйдет), а на подходом думать будут (и что нибудь возможно выйдет) :)
  • disis
    30 июня 2012, 21:50
    а как связать с квиком?
  • Сергей
    17 июля 2012, 22:28
    компилировал код. проверил на некоторых акциях и индексах из стандартного набора wealthlab за периоды > 10 лет. ни на одном инструменте стратегия не превосходит рынок. на индексе РТС (не фьючерс) стратегия превосходит рынок с 2008 г. до этого — результат посредственный.

    думаю, стратегия — очень специфичная (
  • Сергей
    17 июля 2012, 22:42
    дарю не менее ценный алгоритм):
    покупка по пробитии предыдущего дневного хая. выход по трейлинг-стопу согласно каналу Дончиана с периодом 1. все.

    хорошо работает(ла) на сипи и некоторых фондовых индексах. на множестве других инструментов — бесполезна.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн