Попробуем сделать простейшую стратегию для долгосрочного инвестирования. В качестве рабочего будем использовать дневной таймфрейм. Вся суть стратегии будет заключаться в простейшей идеи, что падение рынка обычно связанно с более высокой волатильностью, чем в среднем. Соответсвенно, мы будем покупать, когда волатильность ниже среднего, и выходить из лонга когда она повышается. В качестве меры волатильности будем использовать размах бара 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
Если одна из рабочих стратегий и система будет распределять капитал между стратегиями, кажется нейронная называется, тоже неплохо.
А если плечи увеличить то уже не 30-40?
думаю, стратегия — очень специфичная (
покупка по пробитии предыдущего дневного хая. выход по трейлинг-стопу согласно каналу Дончиана с периодом 1. все.
хорошо работает(ла) на сипи и некоторых фондовых индексах. на множестве других инструментов — бесполезна.