Простейшая стратегия долгосрочного инвестирования.
Попробуем сделать простейшую стратегию для долгосрочного инвестирования. В качестве рабочего будем использовать дневной таймфрейм. Вся суть стратегии будет заключаться в простейшей идее, что падение рынка обычно связано с более высокой волатильностью, чем в среднем. Соответственно, мы будем покупать, когда волатильность ниже среднего, и выходить из лонга, когда она повышается. В качестве меры волатильности будем использовать размах бара High - Low. Остается один вопрос: как измерить долгосрочное среднее волатильности? Можно использовать среднее (то есть скользящую среднюю, взятую за определенный период). Но так как мы имеем дело с распределением с тяжелыми хвостами, среднее будет плохой оценкой центра распределения. Поэтому будем использовать робастную оценку центра распределения - в нашем случае это будет медиана или, более точно, скользящая медиана, взятая с большим окном. Наши рассуждения напрямую транслируются в код на WealthLab:
Code
using System;
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 принесла за рассматриваемый период нулевую доходность, в то время как наша простейшая система показала небольшую, не совсем стабильную, но прибыль.