Блог им. vlad1024

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

Попробуем сделать простейшую стратегию для долгосрочного инвестирования. В качестве рабочего будем использовать дневной таймфрейм. Вся суть стратегии будет заключаться в простейшей идеи, что падение рынка обычно связанно с более высокой волатильностью, чем в среднем. Соответсвенно, мы будем покупать, когда волатильность ниже среднего, и выходить из лонга когда она повышается. В качестве меры волатильности будем использовать размах бара 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 
★51
23 комментария
Отлично, плюс!
а инструмент — фьючерс на индекс РТС?
mirovan, да фьючерс ртс.
avatar
Влад, Резалты не тестов, а реальной работы на реале были бы более убедительны показать как идея грамотно реализованная и оттестироваддая приводит к конкретному результату.
avatar
Sekator, корректные тесты, практически тоже самое что и реал. а так каждый желающий может запустить и проверить, весь код приведен выше. )
avatar
vlad1024, Если это зарабатывающая стратегия, чего сами не запускаете?
avatar
нужно же ещё оптимальные параметры подогнать
avatar
Sekator, там заработок в районе 30-40% годовых и long-only в общем на любителя. Но тут вообще большинство с нулевым мат ожиданием торгует, так что им будет полезно. )
avatar
vlad1024, наверное даже 20-30%, в общем это наверное интересно только ПИФ-ам и другим крупным фондам или долгосрочным инвесторам. Ну и так системщикам новичкам, в качестве примера работающей системы будет интересно, в какую сторону копать, а то читать про пересечения МА и RSI даже меня задолбало. )
avatar
vlad1024, ничего себе 30-40 «на любителя»:)
Если одна из рабочих стратегий и система будет распределять капитал между стратегиями, кажется нейронная называется, тоже неплохо.
А если плечи увеличить то уже не 30-40?
avatar
Тоже плюсанул за доступность выигрывателя.
avatar
о, даже с кодом, спасибо, очень интересно, можно попробовать эту идею в качестве фильтра для других стратегий на меньших таймфреймах.
avatar
А Net Framework поддерживается?
Игорь Рябушкин, в wealth-lab, да.
avatar
vlad1024, а вас какая доходность устраивает?
avatar
vlad1024, тупой вопрос: а как эту медиану в квик транслировать или ввести?) если ответишь что-то, то большое спасибо.
avatar
Артур Медков, в квике нет такого, но наверное можно написать на купайле, просто скользящее окно внутри которого берется медиана (то есть значение которое будет посередине если отсортировать все значения внутри окна)
avatar
ты так скоро себе врагов наживешь :)
avatar
trader_notes, из-за того что «палю граали»? ))
avatar
скорее подход. что хуже, потому что граали применят в лоб (и ничего в долгосроке не выйдет), а на подходом думать будут (и что нибудь возможно выйдет) :)
avatar
а как связать с квиком?
avatar
компилировал код. проверил на некоторых акциях и индексах из стандартного набора wealthlab за периоды > 10 лет. ни на одном инструменте стратегия не превосходит рынок. на индексе РТС (не фьючерс) стратегия превосходит рынок с 2008 г. до этого — результат посредственный.

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

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

теги блога vlad1024

....все тэги



UPDONW
Новый дизайн