Избранное трейдера Роман
https://smart-lab.ru/blog/197310.php
2. Повторю один хороший пост. ( 568 сохранений)
https://smart-lab.ru/blog/copypaste/232469.php
3. Гайд по биржевой торговле на мамбе… (505 сохранений)
https://smart-lab.ru/blog/155810.php
4. Гайд по торговле на бирже часть2 Основа торговли (350 сохранений)
https://smart-lab.ru/blog/260540.php
5. Как купить валюту на бирже (344 сохранения)
https://smart-lab.ru/blog/233199.php
6.Моя записная книжка. Полезные ссылки. Окончание. (338 сохранений)
Держим высоколиквидные ETF с капитализацией в млдр. долларов по принципу моментум инвестирования. Моментум — фактор импульса: покупаем то что растет и избавляемся от того что падает. Исследования показывают, что портфели построенные по такому принципу обгоняют рынок в долгосрочной перспективе. Во время неблагоприятных периодов стратегия уходит в защитный актив — гос. облигации США. Сделки совершаются всего лишь один раз в месяц от покупки без плеча.
Синий цвет — портфель стратегии ротации ETF
Красный цвет — равновзвешенный портфель из этих же ETF
Оранжевый цвет - Vanguard 500 Index Fund использован в качестве бенчмарка, доходность 500-та самых больших компаний в США.

Некоторые ETF были запущены не так давно, поэтому для тестирования на истории начиная с 1988 года были использованы данные взаимных фондов (mutual funds) как прокси на ETF, а где это было невозможно - воссоздание ETF для тестирования.

Решил начать писать небольшие заметки по алгоритмической торговле и всему что с ней связано. Возможно, когда-нибудь расширю, склею и опубликую в виде книжки. Пока же это просто наброски заметок, сделанные на скорую руку.
Можно часто слышать от тех, кто торгует алгоритмически, да и просто систематически, такие понятия как «оверфиттинг», «курвафиттинг», «зафит» и прочие ругательства с корнем «фит». Что все это значит?
На самом деле, все эти слова, как правило, используются для описания одного и того же явления, являющегося врагом всех трейдеров, торгующих систематически и пытающихся оценить исторический перформанс своих торговых логик — а именно, что «живой» аут-оф-сампл перформанс на реальном счете, как правило, хуже ожиданий, полученных ими при проверке своих идей на истории. Например, при тестировании торговой логики на истории трейдер с помощью своей модели «зарабатывал» 30% годовых, а в реале может в среднем иметь 10% годовых. Разница 20% годовых — может объясняться именно оверфиттингом (если нет других факторов — например, некорректный учет комиссионных и проскальзываний, или ошибка в торговом коде; но прочие факторы легко устранить, в отличие от оверфиттинга). На картинке в начале статьи — пример перформанса некоторого фонда в бэктесте и в реальности, наглядно иллюстрирующий написанное выше.
Оверфиттинг является следствием комбинации одного или нескольких из следующих факторов, положительно влияющих на бэктест (результаты прогонки модели на истории), что и создает у трейдера завышенные ожидания от своей модели. В этой части мы рассмотрим основные источники оверфиттинга, в следующей — поговорим о способах избежания или минимизации оверфиттинга при историческом тестировании моделей.

В этой статье я продолжаю делиться своим опытом по алгоритмической торговле моих роботов из TSLab на Американском фондовом рынке через брокера Interactive Brokers (IB). Спасибо всем, кто проявил интерес к моей первой статье, опубликованной в ноябре и за ваши комментарии. Это воодушевляет и вдохновляет к дальнейшей работе в этом направлении. Для тех, кто не успел ознакомиться с первой частью даю ссылочку внизу.
Для удобства весь материал был разбит на три части:
Часть 1- Особенности при подготовке к запуску TSLab на реал с IB– ноябрь 2017, ссылка https://smart-lab.ru/my/schardonnay/blog/all/
Часть 2 — Непосредственная работа терминалов TSLab и TWS
Часть 3- Часто встречающиеся проблемы
В данном выпуске идет рассмотрение второй части –как происходит работа TSLab и платформы брокера Trader Workstation (TWS) в течение основной рабочей сессии – с 9.30-16.00 ЕТ, порядок исполнения ордеров, проскальзывание и особенности комиссии. Все примеры сделок в этой статье реальные и приведены с моего торгового счета IB за последние два месяца торговли роботами.
Лениво бродив по западному интернету, нашел интересную стратегию, которая своими корнями уходит к некоему 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();
}
}
}
}
Всем привет!

Решил поделиться сигналами своей количественной модели ротации секторов американского рынка, золота и трежерей. А почему бы и нет — сигналы, которые я здесь выкладываю — для самых ликвидных ETF'ов, с емкостью миллиарды долларов, самому мне столько точно не надо. Торгует модель раз в месяц — я делаю это в начале каждого нового месяца.
Модель может использоваться как неплохая альтернатива долгосрочному (3-5 лет) банковскому вкладу в валюте. При условии, если вы умеете соблюдать дисциплину и не лезть в модель грязными лапами, чтобы улучшить ее «своим видением рынка» =) Если надоело сливать депозиты и хочется уже куда-то вложить валюту под неплохой процент и с умеренными рисками — велкам!
Модель торгует ETF'ы на секторы американского рынка (XLY, XLP, XLE, XLF, XLV, XLI, XLB, XLK, XLU, IYZ, VNQ), долгосрочные трежеря (TLT), золото (GLD), в качестве безрискового актива, в который модель иногда выходит, используется SHY. На первом шаге производится фильтрация торгуемых тикеров по моментум-логике, на втором — их смешивание с учетом статистических взаимосвязей между ними. Более подробно логику описывать не стану, поскольку, в отличие от других квантов на этом ресурсе, я не считаю, что количественные модели работают вечно. Они умирают — более того, в последнее время они умирают косяками.
Тест стратегии из поста http://smart-lab.ru/blog/343965.php
Формализовал стратегию так, как я ее понял.
1. Входа на следующий день, после обновления исторического хая. Тут есть неточности — историю брал с 2005 года. Не факт, что all time high был на этом промежутке.
2. Предыдущее обновление хая было больше 90 дней назад и менее чем 200 дней назад.
3. Примерно 500 ликвидных бумаг с NYSE/NASDAQ/AMEX. Без учета делистинга, без учета комиссий, без учета платы за плечо. Вроде бы без дивидендов (не уверен), дейли дата взята с Google Finance.
4. Стоп в примере — 3%. Тейк — 90%. Можно взять больше стоп, результаты не критично меняются.
5. Вход фиксированным BP на позицию. (взял 1000 на позу)
Код Multicharts.Net
using System;
using System.Drawing;
using System.Linq;
using PowerLanguage.Function;
using ATCenterProxy.interop;
namespace PowerLanguage.Strategy {
public class _INTEST_by_high_daily : SignalObject {
public _INTEST_by_high_daily(object _ctx):base(_ctx){}
private IOrderMarket buy_order;
private IOrderMarket sell_order;
double previous_high;
double previous_high_low_range;
double all_time_high;
protected override void Create()
{
// create variable objects, function objects, order objects etc.
buy_order = OrderCreator.MarketNextBar(new SOrderParameters(Contracts.Default, EOrderAction.Buy));
sell_order = OrderCreator.MarketNextBar(new SOrderParameters(Contracts.Default, EOrderAction.Sell));
}
protected override void StartCalc() {
all_time_high =0;
}
protected override void CalcBar()
{
// strategy logic
if (Bars.High[0]>previous_high && previous_high_low_range<previous_high && previous_high == all_time_high)
{
buy_order.Send();
}
if (StrategyInfo.MarketPosition>0 && Bars.Close[0]>StrategyInfo.AvgEntryPrice*1.9)
sell_order.Send();
previous_high = Bars.High.Highest(200);
previous_high_low_range = Bars.High.Highest(90);
if (Bars.High[0]> all_time_high) all_time_high = Bars.High[0];
}
}
}
