Розробка Pine Script: чому стратегія не працює
Стратегія на Pine Script показує в тестері рівну зростаючу криву, а на живому рахунку — серію збитків. Справа майже ніколи не в ринку: тестер проганяє історію за тими самими барами, за якими код рахує сигнал, і всі помилки логіки просто не видно. Розбираємо, чому гарна історія не переноситься в реальні угоди.
Перша причина — переоптимізація. Коли під історію підбирають п'ять-шість параметрів з дрібним кроком, із тисяч комбінацій обов'язково знаходиться та, що ідеально лягає на минулі дані: вона описує не поведінку ринку, а шум конкретного відрізка.
Ознака проста — результат тримається в дуже вузькому коридорі значень: зсунули параметр на крок, і просідання зросло в рази. Така стратегія розсипається вже на перших нових барах.
Друга — логіка входу й виходу розходиться з виконанням. Сигнал рахується за закриттям бару, а заявка надсилається за цією ж ціною, хоча на практиці вхід іде за відкриттям наступного або за гіршою ціною в момент волатильності.
Сюди ж відсутність комісії, спреду та прослизання: за частих угод витрати з'їдають усю перевагу. Окремо перевіряємо перемальовування — значення, які перераховуються на незакритому барі й заднім числом «підтверджують» вхід.
Через це ж страждають стопи й цілі, прив'язані до екстремумів поточного бару. Щоб зрозуміти, де саме ламається логіка, ми проганяємо стратегію на відрізку, що не брав участі в налаштуванні, перевіряємо стійкість параметрів і лише потім додаємо реалістичні витрати. Порядок зворотний: спочатку чесні дані та виконання, потім підбір.
Що дає стратегія, перевірена на історії та на нових даних
Різниця між стратегією, яка тримається, і тією, що розсипається вже на першому новому місяці, видна не за прибутком, а за набором перевірок. Ми фіксуємо їх до старту: якщо пункт не виконується, гіпотеза повертається на доопрацювання, а не в торгівлю.
Нижче — те, що замовник бачить у звіті по кожній стратегії на Pine Script, мові платформи TradingView.
- Просідання на історії та на нових даних порівнянне. Розходження глибше чверті — ознака підгонки, такі параметри в роботу не йдуть.
- Параметри не стоять на краю діапазону. Зсув кожного значення на крок в обидва боки не перевертає результат.
- Витрати закладено в розрахунок. Комісія, спред і прослизання рахуються на реальних обсягах — інакше звіт покаже дохідність, якої на рахунку не буде.
- Результат тримається на різних активах і режимах ринку, а не на одному вдалому відрізку.
- Перевірка на нових даних іде після заморозки правил. Доучування заборонено: інакше це підгонка, а не тест.
- Прогін відтворюваний. Той самий набір даних і комісій дає той самий звіт — результат можна переперевірити.
- Гіпотеза перевіряється за один прогін, а не за тиждень ручної роботи: стенд і шаблони заготовок уже зібрані.
Такий набір перевірок дає стійкість стратегії на нових даних і відсікає слабкі гіпотези до торгівлі. Просідання перестає бути сюрпризом, а рішення щодо параметрів спираються на вимірювання, а не на переконання.
Порівняння підходів: індикатор, робот, портфель стратегій
Формат реалізації визначає не лише обсяг коду, а й те, як логіка переживе зміну ринкового режиму.
Той самий сигнал, зібраний як індикатор, як автономний робот або як набір стратегій під спільним управлінням капіталом, поводиться по-різному при просіданні, обриві з'єднання та перерахунку даних на нових барах.
Нижче — три варіанти, між якими реально обирають, з чесними обмеженнями кожного щодо стійкості та вартості супроводу.
Варіанти та їхні межі
| Варіант | Коли підходить | Обмеження підходу |
|---|---|---|
| Індикаторна стратегія | Потрібна візуальна перевірка гіпотези на історії та на живому графіку, рішення ухвалює людина | Сигнали видно, але вони не виконуються самі: результат залежить від дисципліни оператора, ручний вхід втрачає на прослизанні |
| Торговий робот | Логіка формалізована, умови входу й виходу однозначні, потрібна робота без участі людини | Один сценарій на один інструмент: при зміні волатильності правила застарівають, потрібне регулярне переналаштування й контроль виконання |
| Портфель стратегій | Кілька незалежних логік ділять капітал, важлива стійкість за рахунок диверсифікації | Складніше налагодження й урахування кореляцій: стратегії можуть дублювати одна одну, а ризик рахується за сукупною позицією |
Розподіл працює й у зворотний бік: частина обмежень знімається, якщо індикатор залишити для контролю, а виконання передати роботу. Такий гібрид трапляється частіше, ніж чисті варіанти, і на оцінці ми відштовхуємося від того, який підхід замовник готовий супроводжувати.
Розробка Pine Script: етапи від схеми до здачі
Етапи розробки стратегії однакові і для індикатора, і для стратегії з кількома умовами. Спочатку гіпотеза перетворюється на перевірювані правила, потім у схему і лише потім у код — інакше логіка непомітно підганяється під гарний графік.
- Постановка гіпотези. Фіксуємо ринок, таймфрейм, умову входу й виходу, правило ризику та момент скасування сигналу. Критерії на кшталт «сильного тренду» замінюємо вимірюваними: нахил ковзної, дистанція від рівня, обсяг.
- Схема логіки. Описуємо стани позиції: вхід, утримання, переворот, часткове закриття. Окремо — поведінка на межі сесії: тут найчастіше розходяться очікування й результат.
- Реалізація. Пишемо стратегію на Pine Script: параметри винесено в налаштування, розрахунок іде за закритою свічкою, торгові умови відокремлено від малювання — поведінка відтворювана й не залежить від перемальовування.
- Прогін на історії. Дивимося не лише на дохідність: просідання, частка прибуткових угод, розподіл результатів за періодами, кількість угод. Десяток угод — ще не статистика.
- Перевірка стійкості. Змінюємо таймфрейм та інструмент, зсуваємо параметри на крок, дивимося ділянку, що не брала участі в налаштуванні. Якщо результат розсипається від невеликого зсуву — правило перенавчене.
- Аудит коду. Перевіряємо розрахунок на зазирання в майбутнє, розмір позиції, урахування комісії та прослизання, обробку пропусків даних.
- Передача. Вихідний код із коментарями, опис параметрів та їхніх меж, відомі обмеження, порядок підключення.
Кожен етап закінчується артефактом: схема, код, звіт за тестами, інструкція. За ними видно, на чому ґрунтуються висновки і що саме змінювати при зміні ринку.
Що передаємо: код, звіт перевірки, документація
Стратегія залишається у вас у вигляді, який не потребує нашої участі: код читається й змінюється, розрахунки відтворювані, рішення пояснено. Склад постачання однаковий і для нової стратегії, і для переробки наявної — змінюється лише обсяг.
- Вихідний код стратегії на Pine Script — повний, з коментарями щодо логіки входів, виходів і управління позицією. Не закрита бібліотека, а файл, який можна прочитати порядково й змінити під свою гіпотезу.
- Звіт про тестування — прогін на історичних даних у різних режимах ринку: стійкий тренд, боковик, різкі рухи. У звіті зафіксовано параметри прогону, просідання, частку прибуткових угод та їхню кількість, щоб результат можна було повторити.
- Опис управління ризиком — як рахується розмір позиції, як обмежується серія збитків, за яких умов стратегія зупиняється.
- Документація по стратегії — призначення кожного параметра, безпечні діапазони значень, межі застосовності. Її достатньо, щоб новий інженер розібрався без листування з автором коду.
- Регламент супроводу — що перевіряти і з якою періодичністю, як переносити логіку на інший інструмент або таймфрейм, як фіксувати зміни між версіями.
- Набір перевірок і тестові дані — відтворюваний розрахунок: після будь-якої правки видно, що саме змінилося в поведінці стратегії.
- Журнал рішень — які гіпотези перевірялися й були відкинуті, з яких причин. Це економить час при наступному доопрацюванні.
Кейс: як знизили просідання та прибрали переоптимізацію
Стратегія на TradingView прийшла до нас робочою: 14 параметрів, підібраних під конкретний відрізок історії, рівна крива доходу та просідання близько 18% на ньому. На нових даних картина розійшлася — просідання зросло до 42%, частина періодів пішла в мінус.
Параметри описували не поведінку ринку, а шум одного вдалого відрізка, і це класична підгонка під історію.
Що змінили
Розібрали, які параметри реально впливають на результат, а які лише підлаштовують вхід під минуле. Чотири виявилися надлишковими — їх прибрали, три об'єднали в один фільтр волатильності.
Підсумкова логіка входу описується шістьма параметрами замість чотирнадцяти, і кожен із них перевіряємо на сенс, а не на красу графіка.
Далі — перевірка на стійкість: прогін по кількох інструментах і різних інтервалах свічок, ковзні вікна та послідовна перевірка на ділянках, яких стратегія не бачила при налаштуванні.
Такий прогін показує не найкращу криву, а розкид результату: наскільки підсумок залежить від випадково обраного періоду.
Після переробки результат на історії став скромнішим, зате розходження між історією та новими даними скоротилося з трьох з гаком разів до 1,2.
Максимальне просідання знизилося з 42% до 16%, частка прибуткових періодів зросла з 48% до 61%, а зсув одного параметра вже не перевертає підсумок тесту. Головний ефект — передбачуваність: видно, за яких умов стратегія працює і коли її потрібно вимикати.
Чим відрізняється перевірка на історії від торгівлі на демо-рахунку
Тестування на історії та демо-рахунок відповідають на різні питання. Перший показує, чи відтворювана логіка стратегії на Pine Script на минулих даних, другий — чи виживає вона при реальному виконанні.
В історії сигнал з'являється на закритті бару й виконується за цією ж ціною, а на демо між закриттям бару та приходом заявки на сервер минає час, і ціна входу вже інша.
Розходження результатів складається з кількох шарів: спред і комісія, прослизання на швидких рухах, різна якість історії за молодшими періодами, гепи на відкритті сесії.
Окрема причина — заповнення всередині бару: якщо логіка спирається на максимум і мінімум свічки, на історії результат виходить оптимістичнішим, ніж досяжний у реальному часі.
Норма — коли на демо збігається кількість угод та їхній напрямок, а розходяться лише дохідність і просідання, і то в межах, пояснюваних витратами.
Дефект — коли змінюється знак результату, частина угод зникає або з'являється частіше, ніж в історії, або звіт показує входи за цінами, яких на той момент не було. Це вже не похибка виконання, а помилка в логіці або в даних.
Період перевірки підбираємо так, щоб він захоплював тренд, боковик і ділянку високої волатильності, інакше стратегія виглядає стійкою просто тому, що ринок був одноманітним.
Звіряємо журнали угод порядково за часом і ціною, а витрати рахуємо окремим рядком — тоді видно, на якому шарі втрачається результат і що правити: умови входу чи модель виконання.
Технічні сумніви: дані, комісії, прослизання
Прибуткова стратегія на історії розходиться з реальністю частіше не через логіку входу, а через витрати й припущення тестера. Нижче — питання, які ми закриваємо до того, як вважати результати бектесту достовірними.
Як комісії потрапляють у розрахунок?
Комісія списується і на вході, і на виході, а для лімітних і маркет-заявок ставки різні. У тестері задаємо обидві й додаємо до ціни угоди — інакше крива дохідності завищується тим сильніше, чим частіше стратегія торгує.
Як моделюється прослизання?
Виконання за ідеальною ціною — ілюзія: у тестері немає реальної черги заявок. Задаємо прослизання в тіках або в частці спреду; на тонкому ринку розходження з історією стає помітним.
Які ліміти майданчика змінюють результат?
Мінімальний крок ціни, округлення обсягу, ліміт на кількість активних заявок і розмір позиції. Стратегія, яка ставить обсяг вище ліміту, в реальності отримує часткове виконання — метрики в тестері розходяться з торгівлею.
Як перевірити якість історичних даних?
Перевіряємо пропуски у свічках, дублі та розриви на межах сесій. Якщо дані не вирівняні за часом майданчика, тест завищує результат і на живому рахунку стратегія його не повторює.
Обговоримо задачу та повернемося з оцінкою й планом
Щоб розбір не розтягнувся на тижні, достатньо надіслати короткий опис: інструмент і робочий таймфрейм, логіку входу й виходу, спосіб розрахунку ризику на угоду. Якщо напрацювання вже є — файл стратегії, лог прогону на історії та список угод, результати яких викликають питання.
Цього достатньо, щоб обговорити задачу предметно й повернутися з оцінкою та планом робіт, а не з уточнювальними питаннями по колу.
Що фіксуємо в плані до старту:
- правила входу, виходу та перенесення захисної заявки — формулами, а не «на око»;
- обсяг позиції, крок його зміни, граничне просідання на угоду та на серію угод;
- набір історичних даних для тестування, включно з трендовими ділянками й тривалим боковиком;
- перелік перевірок: комісія, прослизання, пропущені бари, поведінка на відкритті торгів;
- метрики приймання: частка прибуткових угод, профіт-фактор, максимальне просідання, середній час утримання;
- склад постачання: код стратегії, коментарі до логіки, інструкція із запуску та налаштування параметрів;
- умови супроводу стратегії: які правки вносимо при зміні режиму ринку і в які строки.
Пункти плану узгоджуємо до першого рядка коду — тоді результат можна перевірити за числами, а не обговорювати на смак. Опишіть задачу в зручному вигляді: повернемося з оцінкою, планом робіт і межами супроводу стратегії.







