Избранное трейдера Alarm
1. Способность быть вне рынка, в ожидании хорошего сетапа.
Желание постоянно находиться в позиции губительно.
2. Грамотная растановка стопов, а также использование логических стопов.
Никаких АТР*N; никаких фиксированных стопов N (0,5 — 2% от депо) (как рекомендует Элдер например); никаких индикаторов для выставления стопа (например зона безопасности Элдера).
3. Грамотная расстановка тейков.
Тейки только по следующим уровням (зона интереса). Никаких тейков по формуле: стоп*N (2-3); никаких тейков на мувингах или каналах.
4. Быстрый перевод в безубыток.
5. После открытия сделки необходимо быть на рынке на закрытии каждой рабочей свечи.
Коллеги, всем добра! Сегодня задаем наши вопросы участнику Лисицин. Конкурсант заявлен в номинации БОТ, для участия заявлена, насколько я понимаю, вторая по величине рабочего счета сумма среди конкурсантов.
Графики по участнику:
Рис. 1. Общий график изменений цифр по счету
Рис. 2. График доходности с учетом ввода-вывода средств
Возникла тут одна идея — как можно было бы добиваться дельта-нейтральности опционной позиции. Хотел бы поделиться, может, получится интересное обсуждение. Но сначала — предыстория вопроса.
Итак, допустим, мы торгуем какую-то дельта-нейтральную стратегию. Это может быть и покупка-продажа волатильности, и котирование ММ, и календарный арбитраж между разными сериями или еще какая. Главное, после открытия опционной позиции (по выгодным, как нам кажется, ценам), нужно добавить фьючерсов в позу (лонг или шорт), чтобы минимально зависеть от того, куда пойдет базовый актив (БА). Как это сделать? Самое простое — посчитать дельту по Блеку-Шоулзу (БШ) и выровнять эту дельту соответствующим количеством фьючерсов. Рассмотрим на примере покупки волатильности:
Здесь дельта БШ равна нулю и, по идее, нам все равно, куда пойдет БА. Правда будет сильная зависимость от веги, но этот риск здесь рассматривать не будем, только риск от движения БА. Судя по картинке и по тому, что дельта БШ = 0 — у нас нет такого риска. Но если мы в реале откроем эту позу, то обнаружим, что есть почти 100% корреляция эквити с БА. Если она положительная (растет БА — растет PnL, падает БА — падает PnL), то, значит, у позы фактически положительная дельта. Если корреляция отрицательная (растет БА — падает PnL, и наоборот), то фактически у нас отрицательная дельта. Несмотря на то, что БШ показывает нам нулевую дельту. Перефразируя известное выражение, можно было бы сказать так:
Перевод статьи из блога tr8dr. Написано верно, применительно к HFT алгоритмам, но очень кратко. Однако, немного подумав, из этого можно сделать достаточно простую метрику для раннего определения направления движения цен.
Высокочастотная маркет дата, как правило, представлена в виде обновлений потока ордеров (полный ордерлог):
Лениво бродив по западному интернету, нашел интересную стратегию, которая своими корнями уходит к некоему Larry Connors. Стратегия построена на простом RSI с периодом 2.
Суть ее в следующем:
покупаем индексный ETF, когда значение меньше 15 на закрытии дня (да, это можно сделать без проблем и проскальзываний на всех ликвидных ETF) и продаем, когда клоуз текущего дня выше хая предыдущего (можете придумать свои выходы, стратегия не очень-то чувствительна к выходам).
В общем MR в чистом виде. И в принципе это должно работать на большинстве ETF развитых рынков.
Тестил на Multicharts.Net, код ниже.
using System; using System.Drawing; using System.Linq; using PowerLanguage.Function; using ATCenterProxy.interop; namespace PowerLanguage.Strategy { public class rsi_2_spy : SignalObject { public rsi_2_spy(object _ctx):base(_ctx){} private IOrderMarket buy_order; private IOrderMarket sell_order; private RSI m_RSI; private VariableSeries<Double> m_myrsi; private ISeries<double> Price { get; set; } protected override void Create() { // create variable objects, function objects, order objects etc. buy_order = OrderCreator.MarketThisBar(new SOrderParameters(Contracts.Default, EOrderAction.Buy)); sell_order = OrderCreator.MarketThisBar(new SOrderParameters(Contracts.Default, EOrderAction.Sell)); m_RSI = new RSI(this); m_myrsi = new VariableSeries<Double>(this); } protected override void StartCalc() { // assign inputs Price = Bars.Close; m_RSI.price = Price; m_RSI.length = 2; } protected override void CalcBar(){ // strategy logic m_myrsi.Value = m_RSI[0]; if (Bars.Close[0]>Bars.High[1]){ sell_order.Send(); return; } if (m_RSI[0]<15){ buy_order.Send(); } } } }