Спасти скальпера или тестирование на Full Orders Log.Скальпинг - это стратегия, подразумевающая быстрый вход на импульсе, снятие прибыли(скальпа трендового движения) и выход, до момента возврата цены к средней.
Инструментами рядового скальпера являются стакан, скальперский привод, а также (поводыри) западные индексы и природные ресурсы от которых зачастую зависят цены базового актива, и в следствии цены на фьючерсы, которыми скальперы и торгую. Это знают все.
У меня есть свое мнение на эту тему, так как лично я и сам торговал в пропе.
Инструментами правильного скальпера должны стать не привод и не поводыри, они пригодятся - это само собой, но главным объектом внимания, любого трейдера должны стать не графики, или приводы - а исследования рынка.
Обратите внимание на засилье различных курсов по скальпингу в последнее время. Такие курсы зачастую предоставляют помимо базовых принципов, стартегии, которые уже не работают, или перестанут работать в ближайшее время, потому что на таких маленьких таймфреймах - рынок меняется намного быстрее, чем, например на часовках. А самые безбашенные авторы и вообще не проводили никаких изысканий в этой области.
Я призываю трейдеров, которые собираются пройти один из таких курсов, какие бы копейки он не стоил - "научиться ловить рыбу самим" вместо того, чтобы брать ее непонятно у кого и непонятно какого качества!
Но, ближе к делу!
Каким инструментарием может пользоваться новоявленный исследователь:
- Excel - это очень полезная программа и я лично ей пользуюсь, но исключительно, как дополнение к более продвинутому софту. Я знал людей, которые пробовали даже тестировать стратегии в Excel.. Мое мнение - это не серьезно, не понимаю, как в нем можно протестировать какую-то стратегию, но как помощник - самое то!
- Мат-lab - это профессиональный инструмент математиков, как и excel он платен , но лицензия на него стоит не дешево. На нем можно тестировать все что угодно, были бы данные. И стратегии на индикаторах и мани-менеджмент. Однако из-за его дороговизны, необходимости изучать еще один язык программирования и нужды прописывать все что уже и так есть в системах для тестирования стратегий, считаю такие усилия неоправданными. Лично я использую его, когда не хватает функционала у Excel, для расчетов.
- Wealth и подобные программы, специально созданные для тестирования стратегий.
Я пробовал тестировать тиковые стратегии. Мне есть что написать по этому поводу:
- Тики можно сжать до любых свечек, 2-10 или 47 секундных. Здесь мы уже можем подсчитать проскальзывание и комиссию. Проблема в том, что такого медленного тестирования вам не захочется. Когда программа сжимает тики и без того медленное тестирование превращается в 5-ти дневное ожидание, когда за час до окончания теста у Вас или перегревается компьютер, или один маленький перепад напряжения и все тесты насмарку, а они ведь могут оказаться и отрицательными!
- Часто наши любимые, в иных случаях программы, Wealth-lab и т.д., начинают тормозить и подвисать. Конечно, вам нужны достаточно хороший компьютер, но я говорю про ситуации даже когда у Вас больше 16GB оперативной памяти.
- Это все еще тестирование на свечках. Это значит, что мы не видим стакан. А для скальпера - это критично!
Программа не видит, как "живет" рынок. И это еще одна причина по которой скептики отказываются от исследований.
- Тиковых данных по фьючерсу на индекс РТС когда я его тестировал, в блокнот у меня помещалось только 3 месяца сделок. Их нужно было скачать по одному дню(только так, по-другому никак ее было скачать нельзя ), затем самостоятельно склеить.
- StockSharp - я узнал об этом способе проведения исследований от человека, которые предоставлял такие курсы по скальпингу, про которые я писал в начале. Оказалось, что он тестирует скальперские стратегии в StockSharp, но не на свечках а на ордер логе.
Full orders log — это список всех заявок с полной информацией по каждой заявке. Еще его называют анонимным ордер логом (анонимная рыночная информация), т.к. из всей информации о заявке в нем не доступен только номер счета клиента, пославшую эту заявку. Как вы понимаете, эта информация конфиденциальна. Ордер лог, это самый глубокий и детальный уровень информации, который доступен трейдеру.
Источник <
http://robostroy.ru/community/Article.aspx?id=319>
Тестирование на ордер логе, тоже не является панацеей, рынок все также меняется, а тестирование все такое же медленное. Но ничего лучше еще не придумали, здесь мы получаем всю полноту информации, тестирование на стакане, а стакан для скальпера - самое важное.
Также, пользуясь инструментарием StockSharp можно скачать ордер лог, или тиковые данные и уже из них создать свечки любого тайм-фрейма! Для чего нам это нужно?
Когда нам не приходится сжимать тики в 10-ти секундные свечки в самом
Wealth-lab - тестирование проходит намного быстрее и сама программа "чувствует" себя лучше, не тормозит и не зависает. Поэтому кому не нужно супер точное тестирование - этот вариант для вас! Главное уделять внимание исследовательской работе и ваши результаты улучшаться!
Качественные данные.Есть 2 новости хорошая и плохая. Плохая - то что скорее всего данные ордер лога вам найти не удастся. Качественные данные можно, конечно купить напрямую у RTS - но это будет неоправданно дорого.Хорошая новость заключается в том, что для тестирования скальперских стратегий много истории не нужно. подключение плаза - это обязательное условие скальпинга, так что считаем, что оно у нас есть по определению. Так что, ничего нам не мешает записать ордер лог с плазы. Особенно радует тот факт, что к плазе можно подключить одновременно и программу для записи ордер лога и скальперский привод. Так что можем и торговать и записывать данные одновременно. Софт для записи называется S#.Data.
Единственным его назначением является записывать данные сохранять их в специальном формате и преобразовывать одни данные в другие. Благодаря ему, из ордер лога можно вытащить и стаканы и тиковые данные, из тиковых данных можно сделать свечки любого таймфрейма. Ордер лог - самый полный пакет данных, поэтому кроме как записью с плазы получить синтезировать его никак нельзя.
Также, можно записать сделки и стаканы с обычного Quik, но они будут рассинхронизированы, а для скальперов - стакан имеет важное, если не первостепенное значение. Тестирование без стакана возможно, но оно более грубое и лишено важных преимуществ.
S#.Data выглядит вот так:
Как пользоваться S#.Data:
Как создать инструмент:
Как настроить плазу:
Как запустить приложение:
Тестер стратегий.Когда вы записали данные считайте, что половину дела вы уже сделали. Осталось всего-навсего написать свой привод для тестирования и саму стратегию. =)
Под меня написанный тестер, он простой, без визуализации, специально под тот шаблон стратегий, к которому я привык. Статистика в динамике выгружается автоматически в Excel. Здесь я взял шаблон, что давали, на обучении и пользуюсь им практически без его доработки. Он симпатичен на вид и есть графики эквити и проскальзывания.
Шаблон тестера выглядит так.
Для примера взял трендовую стратегию пробоя полос Боллинджера.
С точки зрения самого процесса, тестирование на ордер логе практически ничем не отличается от обычного, главное не забыть вписать:
Trader.RegisterOrderLog(security);
UseOrderLog = true,
Условия тестирования:
Почему я не учитываю комиссию. Все просто, частенько приходится тестировать стратегии, для которых наиболее выгодным вариантом будет Fix комиссия. Такую услугу предлагает практически каждый брокер, но цены разные, поэтому просто вычитаю ее из прибыли.
В любом случае, вы можете посчитать комиссию, как общее количество закрывающих сделок умножить на вашу нынешнюю комиссию на круг и вычесть ее из общего результата . Хотя данная "стратегия" всего лишь пример - это не готовая стратегия, которую можно было бы торговать.
Статистика и эквити протестированной нами стратегии с 15-ого по 25-ое января 2013, в расчете на 1 контракт.
Просадки впечатляют, но положительное мат. ожидание - на лицо.
Проскальзывание - 0, потому что и на вход и на выход использовалось лимитное котирование.
Время.Как я писал ранее, тестирование на ордер логе требует больше времени, из-за того что оно в точности повторяет все события, происходящие на рынке. Лично я решил для себя эту проблему, используя несколько компьютеров для тестирования. Также, я использую методику, которая называется тестирование под управлением пользователя.
По сути это ручная генетическая оптимизация. Такой подход экономит машинное время, но мне приходится тратить больше моего личного времени на проведение оптимизации. Также я часто использую прикидочные тесты в Wealth-lab.
Для того, чтобы результаты тестирования в Wealth-la были близки к тестам в StockSharp при входах, например котированием, нужно использовать специальный компоненты
EnterAtPrice и
ExitAtPrice. С помощью них, входы происходят по точно определенной цене на том баре, который мы укажем. Ориентировочно по этим ценам мы и войдем в рынок котированием. Эти компоненты позволяют нам тестировать входы на [bar] а не на [bar+1], что намного точнее.
Тестируйте свои стратегии, проверяйте по 3 раза код, чтобы не переделывать тесты!
Пользуйтесь только лучшими инструментами, будьте исследователями, но не забывайте торговать!
Код стратегии:Code
namespace BollingerTrendStrategy
{
using System;
using Ecng.Common;
using Ecng.ComponentModel;
using Stops;
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Trend;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Algo.Candles.Compression;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Misc;
using StockSharp.Algo.Indicators.Trend;
/// <summary>
/// Стратегия по полосам Болинджера, пробойная.
/// </summary>
internal class BollingerTrendStrategy : Strategy
{
private BollingerBands _bands;
private CandleSeries _series;
/// <summary>
/// Событие отрисовки новой свечки и значения индикатора.
/// </summary>
public event Action<Candle, IIndicator> Draw;
protected override void OnStarted()
{
//создаем серию свечек и индикатор
this._series = Security.TimeFrame(TimeSpan.FromSeconds(60));
this._bands = new BollingerBands
{
Length = 64
};
//указываем период, за который должны формироваться свечки для данной серии
this._series.WorkingTime = new WorkingTime
{
Times = new[] { new Range<TimeSpan>(TimeSpan.FromHours(10), TimeSpan.FromHours(19)), }
};
//подписываемся на событие окончания формирования свечек по серии
//а так же на событие изменения свечек, чтобы можно было перерисовывать график в реалтайм режиме
this._series
.WhenCandlesFinished()
.Do(Process)
.Apply(this);
//запускаем процесс формирования свечек
this
.GetCandleManager()
.Start(this._series);
base.OnStarted();
}
/// <summary>
/// Основной алгоритм.
/// </summary>
/// <param name="candle">Свечка.</param>
private void Process(Candle candle)
{
//пересчитать значение индикатора для новой свечки
this._bands.Process(candle);
//вызываем событие отрисовки свечки и индикатора на графике
this.Draw.SafeInvoke(candle, this._bands);
//если состояние свечки не Finished, значит сработало событие
//изменения свечки и нет необходимости принимать решение о входе или выходе из позиции
if (candle.State != CandleStates.Finished)
return;
//получаем таймфрейм свечек
var timeFrame = (TimeSpan)this._series.Arg;
//получаем время начала последней свечки с учетом текущего времени
var time = timeFrame.GetCandleBounds(Security).Min - timeFrame;
bool SignalLong; //Переменная для входа в лонг
bool SignalShort; //Переменная для входа в шорт
SignalLong = candle.ClosePrice > this._bands.UpBand.GetCurrentValue();
SignalLong &= Position<=0;
SignalShort = candle.ClosePrice < this._bands.LowBand.GetCurrentValue();
SignalShort &= Position >=0;
if (this._bands.IsFormed)
{
//При пробитии канала нет открытой позиции или открыта длинная позиция - Long, предварительно продав
if (SignalLong && doNotEnter > Security.GetMarketTime().TimeOfDay && Security.GetMarketTime().TimeOfDay > isItMorning)
{
if (Position == 1)
{
//sell
ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Sell, 1,_bands.UpBand.GetCurrentValue()));
//RegisterOrder(this.SellAtMarket());
}
if (ChildStrategies.Count == 0)
{
//RegisterOrder(this.BuyAtMarket());
ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Buy, 1, _bands.UpBand.GetCurrentValue()));
}
}
//При пробитии канала нет открытой позиции или открыта короткая позиция - Short, предварительно откупив
if (SignalShort && doNotEnter >Security.GetMarketTime().TimeOfDay && Security.GetMarketTime().TimeOfDay > isItMorning)
{
if (Position == -1)
{
//buy
ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Buy, 1,_bands.LowBand.GetCurrentValue()));
//RegisterOrder(this.BuyAtMarket());
}
if (ChildStrategies.Count == 0)
{
//sell
ChildStrategies.Add(new LimitQuotingStrategy(OrderDirections.Sell, 1, _bands.LowBand.GetCurrentValue()));
//RegisterOrder(this.SellAtMarket());
}
}
}
}
}
}
Спасибо за внимание!