Продолжим кодинг

Прошлый эксперимент про кодинг с подробными комментариями оказался неожиданно урожайным по лайкам, а посему продолжим. Раз уж на Binance нынче народу больше, то в этот раз делаем для Binance, а точнее для Binance Futures, потому что там комиссии меньше и для подобных стратегий размер комиссии крайне важен. А еще там при регистрации надо загадки с ребусом отгадывать, но кому надо справились.

Пойдем от простого к сложному, так лучше, поэтому сначала будет самое простое. Будем делать скрипт, которые торгует по одной-единственной SMA. Сигналы появляются при пересечении SMA, если цена выше SMA - лезем в лонг, если ниже SMA - лезем в шорт. То есть это будет торговая система реверсивного типа, всё время находится либо в лонге либо в шорте, и не бывает вне сделки. Тейк-профитов и стоп-лоссов, получается нет вообще. Риск снижается не за счёт вылета по стоп-лоссу, а за счёт переворота в шорт или обратно, если цена пошла против сделки. То есть это заменяет стоп-лосс, и неверно было бы сказать что риск никак не ограничен. Ограничен, но ограничен реверсом, а не стоп-лоссом.

Источник цены

Чем меньше длинна SMA или любой другой скользящей средней любого типа или вида - тем сильнее влияется источник цены. И наоборот тоже верно, чем больше длина, тем менее принципиально какой источник цены будет. Тут будет использоваться большая длина SMA, а потому довольно пофиг что использовать, привычную Close-цену свечи, или более хитрую OHLC4. Сделал Close-цену, можете поменять в коде (не в настройках), если хотите.

Пересечение

И вот здесь уже полезли нюансы. А что считать пересечением средней? Когда цена была ниже линии и стала выше линии, то это пересечение. ОК, а какая цена то? :) Вот нюансы. Если использовать Close-цену, то тогда получится хренова туча сигналов, и за каждый такой ложный убыточный сигнал придется платить комиссию и проскальзывание еще (которое тоже учтём). В итоге такая система если и выживет то на больших таймфреймах, типа дневного или недельного, где сделки были бы достаточно редкими, чтобы комиссия не погубила систему. Но ждать сделку по полгода тоже не хочется. Поэтому уменьшим количество ложных сигналов более простым методом - saw-фильтром. Saw = пила.

У нас пересечением SMA будет считаться не когда свечка прикоснулась к SMA, а когда вся свеча оказалась выше чем линия SMA. А раз уж вся свеча выше чем SMA, значит и самая низкая точка свечи (low) тоже выше чем SMA должна быть в этот момент. Как только такая свеча появилась, то на первой же такой свече мы считаем это пересечением и генерируем сигнал на вход в лонг. Ну или в шорт, если произошла обратная ситуация, когда high свечи оказался ниже линии SMA. То есть полностью зеркальная логика для лонга и шорта.

Длина

У SMA есть длина и её надо подгонять под пару обычно. Но я бы еще предложил использовать не любые цифры, а цифры с какой-то логикой или идеей, либо просто круглые цифры. Типа использовать длину 50 или 100 можно, потому что круглые цифры, а длину 89 не стоит. Это уже оверфиттинг. Либо должно быть совпадение с более старшим таймфреймом. Типа 24 - столько часов в сутка, 48 - двое суток, 72 - трое суток, и так далее. Но тогда такие длины годятся только под часовой таймфрейм, а не под любой.

Комиссия и проскальзывание

Комиссию возьмем 0.04% для тейкера на Binance Futures. Комиссия мейкера там 0,02%, но на самом деле мы её не сможем использовать. Ведь по стратегии придется влетать в сделку сразу как только появился сигнал, а значит мы будем тейкером. У нас не будет лежать на бирже отложенного лимитного ордера. Стоп-ордеров у нас тоже не будет.

А значит, кроме комиссии нас ждёт еще и проскальзывание. Какого размера получится проскальзывание сильно зависит о суммы, которой мы торгуем, и чем больше сумма - тем больше проскальзывание. Я выбрал проскальзывание 0,02%, что для пар BTCUSDT и ETHUSDT должно быть более чем достаточно, при условии если ваш ордер не более 100.000 долларов, например. То есть вполне с запасом. Для мелких пар можете ставить проскальзывание 0,03%.

Для удобство комиссия и проскальзывание заложено в один параметр - комиссия. То есть у скрипта комиссия стоит 0,06% а не 0,04%.

Тесты

Тесты на эфире и на биткойне к доллару показывают вполне пригодные результаты. И не сильно отличаются. Что и не удивительно ведь у эфира и биткойна весьма большая корреляция, так что одинаковая стратегия должна давать похожие результаты. Обычно на эфире профит больше, так как эфир более трендовая монета (сильнее меняется цена, а цена меняется у него сильнее ибо капитализация меньше и легче толкать). То есть в целях снижения риска и уменьшения размера просадки было бы очень логично торговать и эфир и биткойн одновременно. Не обязательно же на всю котлету заходить, можно и на 50% от баланса торговать. 50% на эфир и 50% на биткойн.

К сожалению бэктестер TradingView не позволяет тестировать 2 пары одновременно, только поочередно. Но опытные то программисты вполне смогли бы закодить бэктест и двух пар, если захочется.

Минусы

К сожалению из-за того что тут всего лишь только одна SMA, где будем менять только длину получается очень даже большой риск оверфиттинга. Оверфиттинг - это когда мы подбираем просто идеальные настройки для прошлого, которые оказываются очень даже убыточными для будущего. А торговать то мы не в прошлом будем. Так что такая стратегия весьма ненадёжная штука, и весьма рискованная, может не сработать. Но для изучения кодинга тут годится :)

Скрипт

Скрипт снова приватный (не видим англоязычной аудитории), и доступен только по ссылке ниже (надо клинкуть на картинку). С открытым исходным кодом и подробными комментариями на русском. То есть опять же хороший вариант для изучения PineScript:

Noro's 1MA

Technical Indicators

Мои профили:

Отказ от ответственности