Ідея коротко
Rob Hanna наводить приклад найпростішої ідеї повернення до середнього: купувати кожен 5-денний мінімум і продавати, коли ціна закриється вище 5-денної середньої. За його словами, у такої системи може бути близько 75% прибуткових угод, але крива йде вгору, вгору і провалюється, і провали бувають різкими.
Захищається він розміром позиції та підтвердженням від ринку. Відкати в акціях він не купує, якщо ринок перед цим злетів і сам чекає відкату або якщо ринок ламається вниз. Рішення ухвалює його індикатор Aggregator, який зводить усі його дослідження ринку в прогноз на кілька днів. Склад індикатора закритий. Торгує Hanna такі моделі лише на великих компаніях: S&P 500, S&P 100, NASDAQ 100.
Laurens Bensdorp в іншому випуску описує схожу конструкцію з числами. Папір має бути в тренді, наприклад вище 150-денної EMA. Якщо S&P 500 закрився нижче 40-денної середньої, нових входів немає. Вихід часто за часом: не повернувся до середньої за три дні, продаємо. Стоп є завжди, широкий.
Фільтри двох авторів у картці не змішані. Сигнал Hanna один, до нього два окремі фільтри ринку: A за Hanna в нашій формалізації і B за Bensdorp з його числами. Відбір паперів винесено в окреме правило.
Чому це може працювати
Hanna пояснює повернення до середнього структурою власників. У великої компанії багато інституційних акціонерів, і під час сильного розпродажу хтось із них докуповує за вигідною ціною. У small caps таких власників один-два, і якщо один вирішив вийти, папір може падати довго. Банкрутство в S&P 500 теж менш імовірне. Фільтр ринку він пояснює так: коли ринок на твоєму боці, піднімаються всі човни, і вибирати папери можна менш точно.
Bensdorp ставить фільтр ринку не заради кращого результату окремої системи. Він виходить з того, що під час швидкого падіння всі його лонгові системи втрачають одночасно. Фільтр 40-денної середньої автоматично знижує лонгову експозицію, коли ринок проти, а на відскоку вмикається раніше за довгострокові трендові фільтри. Цей висновок у нього з досвіду: після 2008 року він повірив, що лонг на повернення до середнього заробляє у ведмежому ринку, а у 2011 році переконався в протилежному.
Застереження: 75% у Hanna це приклад того, що можна побачити в тесті, а не показаний результат. Свої числа Bensdorp називає прикладами.
Правила
Сигнал і вихід (Rob Hanna)
// денні бари; акція з S&P 500, S&P 100 або NASDAQ 100, або індексний ETF
FiveDayLow = Close <= Lowest(Close, 5) // автор: купувати 5-денний мінімум
// Finetiq: мінімум за закриттями, поточний бар у вікні. Варіант: Low <= Lowest(Low, 5)
IF FiveDayLow AND MarketOK AND NOT InPosition
BUY AT NEXT BAR OPEN // Finetiq: виконання; варіант BUY AT CLOSE
IF Close > SMA(Close, 5)
EXIT AT NEXT BAR OPEN // автор: ціна закрилася вище 5-денної середньої
// стопа в простій версії автора немає
Фільтр ринку A: Hanna (формалізація Finetiq)
Hanna називає дві ситуації, у яких не купує, але не дає для них чисел. Його Aggregator недоступний, тому нижче проста заміна.
SPX = закриття S&P 500 (другий символ)
Rocket = SPX >= Highest(SPX, 10) // автор: ринок злетів і чекає відкату; Finetiq: 10-денний максимум
BreakDown = SPX <= Lowest(SPX, 20) // автор: ринок ламається вниз; Finetiq: 20-денний мінімум
MarketOK = NOT Rocket AND NOT BreakDown
// автор: фільтр забороняє лише нові входи, відкриті позиції не закриває
Якщо торгувати сам індекс, фільтр A перетворюється на правило «купувати 5-денні мінімуми, які не є 20-денними». Це вже інша система, її варто тестувати окремо.
Фільтр ринку B: Bensdorp (числа автора)
Тригер відкату в Bensdorp не названо. Щоб фільтри можна було порівняти, вхід той самий, що в Hanna.
MarketOK = SPX > SMA(SPX, 40) // автор: S&P 500 вище 40-денної середньої; Finetiq: проста середня
StockTrend = Close > EMA(Close, 150) // автор: «наприклад» 150-денна EMA
IF FiveDayLow AND StockTrend AND MarketOK AND NOT InPosition
BUY AT NEXT BAR OPEN // Finetiq: тригер Hanna
IF Close > SMA(Close, 5) THEN EXIT AT NEXT BAR OPEN // Finetiq: повернувся до середньої = вище MA5
IF BarsSinceEntry >= 3 THEN EXIT AT NEXT BAR OPEN // автор: не повернувся за 3 дні
StopLoss = EntryPrice * 0.80 // автор: стоп завжди, широкий, 20% у його прикладі
Shares = Equity * 1% / (EntryPrice - StopLoss) // автор: розмір від відстані до стопа; Finetiq: ризик 1%
Shares = Min(Shares, Equity * 10% / EntryPrice) // автор: стеля частки капіталу; Finetiq: 10%
Відбір паперів (окреме правило)
// Hanna: лише великі компанії
UniverseA = члени S&P 500 на дату сигналу // Finetiq: членство на дату, а не сьогоднішній склад
// Bensdorp: усі папери, включно з виключеними з лістингу,
// з фільтрами ліквідності, ціни та волатильності, пороги не названо
UniverseB = акції США AND AvgVolume > X AND Close > Y AND ATRpct > Z // Finetiq: X, Y, Z підбирати
Bensdorp пояснює фільтр волатильності: при утриманні 1-5 днів папір, який ходить на 0.2% на день, нічого не дасть. На широкому всесвіті акцій сигналів на день буває більше, ніж місць у портфелі. Правила вибору між ними жоден автор для цієї системи не назвав.
Параметри
| Параметр | Значення | Звідки |
|---|---|---|
| Сигнал | закриття на 5-денному мінімумі | автор (Hanna) |
| База мінімуму | закриття, поточний бар у вікні | Finetiq |
| Вихід | закриття вище SMA 5 | автор (Hanna) |
| Всесвіт A | S&P 500, S&P 100, NASDAQ 100, без small caps | автор (Hanna) |
| Фільтр A: злет ринку | S&P 500 на 10-денному максимумі | Finetiq |
| Фільтр A: злам ринку | S&P 500 на 20-денному мінімумі | Finetiq |
| Фільтр B: ринок | S&P 500 вище 40-денної середньої | автор (Bensdorp), тип середньої Finetiq |
| Фільтр B: тренд папера | вище EMA 150 | автор (Bensdorp) |
| B: вихід за часом | 3 дні | автор (Bensdorp) |
| B: стоп | 20% | автор (Bensdorp, приклад) |
| B: ризик і стеля позиції | 1% і 10% капіталу | Finetiq |
| Утримання | 1-5 днів | автор (Bensdorp) |
| Вхід | відкриття наступного дня | Finetiq |
Що перевірити
- Чи потрібен фільтр. Один сигнал на одному всесвіті: без фільтра, з A, з B. Дивіться на просадку і кількість одночасних позицій у 2008, 2011, 2020 і 2022 роках. Bensdorp ставить фільтр заради експозиції, тож однієї доходності для порівняння мало.
- Твердження про 75%. Проста версія без фільтра і стопа на великих компаніях. Крім відсотка прибуткових, подивіться на найгіршу серію збитків і глибину провалів.
- Великі проти дрібних. Ті самі правила на small caps. Hanna каже, що там повернення до середнього ненадійне. Якщо різниця є, це аргумент на користь його пояснення.
- Стоп. Без стопа, 20% і 10%. Bensdorp очікує, що стоп знизить відсоток прибуткових, і погоджується на це заради найгіршого сценарію. Міряйте, скільки коштує ця страховка.
- Околиця параметрів. Мінімум за 4, 5, 7 днів. Вихід над SMA 3, 5, 7. Фільтр B: середня 30, 40, 50, тренд EMA 100, 150, 200. Якщо результат тримається лише на початкових числах, це підгонка.
- База мінімуму. За закриттями проти мінімумів бару.
- Витрати. Утримання кілька днів, угод на широкому всесвіті багато. Комісія і спред на вході за ринком помітно знижують середню угоду, проженіть тест із ними.
Особливості платформ
TradingView (Pine Script)
- Стратегія торгує лише символ графіка. Портфель з акцій S&P 500 в одному тесті не зібрати: можна перевірити сигнал на окремих паперах і скласти результати поза платформою.
- S&P 500 підключається через
request.securityз тикером індексу і таймфреймом"D". Безlookahead_onмайбутнього на історії немає, але перевірте, що дати барів папера та індексу збігаються. ta.lowest(close, 5)включає поточний бар, умоваclose <= ta.lowest(close, 5)це рівно 5-денний мінімум закриттів.- Членства в індексі на дату в Pine немає. Тест на сьогоднішніх членах індексу завищує результат.
MultiCharts і TradeStation (EasyLanguage)
- Індекс підключається другим потоком:
Close of Data2,Average(Close of Data2, 40). Ордери йдуть лише поData1. - Портфель за всесвітом: Portfolio Maestro у TradeStation, Portfolio Trader у MultiCharts. Для чесного тесту потрібні дані з виключеними з лістингу паперами, інакше результат завищений.
- EMA 150:
XAverage(Close, 150). Середній потрібен розігрів 450-600 барів, перші роки історії відкиньте. - Вихід за часом:
If BarsSinceEntry >= 3 then Sell next bar at market. Стоп ціною:Sell next bar at EntryPrice * 0.8 stop.
MetaTrader 5 (MQL5)
- Акції торгуються через CFD, список паперів у брокера неповний, історії виключених з лістингу паперів немає. Тест у MT5 майже завжди містить помилку вцілілого.
- Індекс читається через
iCloseпо CFD на S&P 500, назва символу в брокерів різна. Денний бар CFD будується за серверним часом і закривається не о 16:00 ET, тому 40-денна середня буде трохи іншою. - Мультисимвольний режим тестера дозволяє вести кілька паперів в одному раднику, але всі символи мають бути в Market Watch.
- Своп за утримання до п'яти ночей враховуйте в тесті.
Де ідея може зламатися
- Ні в Hanna, ні в Bensdorp немає показаного тесту цієї конструкції. 75% і 60% це їхні оцінки.
- Від'ємна асиметрія: багато дрібних виграшів і рідкісні різкі провали. Коротка історія без 2008 чи 2020 року покаже надто гладку криву.
- Фільтр A повністю наш. Справжній фільтр Hanna закритий і спирається на безліч його досліджень ринку.
- Числа Bensdorp (EMA 150, MA 40) він називає прикладами, і працюють вони в нього всередині портфеля з десятків систем з різними виходами.
- Тест на поточних членах S&P 500 без виключених паперів завищує результат, особливо для купівлі акцій, що падають.
- Версія на одному індексі дає мало угод і поводиться інакше, ніж портфель із сотень акцій.