Эта торговая система, называемая
Система выполняет следующие шаги:
Вычислить 14-периодный ATR и нормализовать его, разделив его на цену закрытия.
Вычислить 100-дневную простую скользящую среднюю (SMA) нормализованного ATR.
Вычислить соотношение нормализованного ATR к его 100-дневной SMA.
Определить целевой кредитный кредит на основе обратного коэффициента (2/коэффициент).
Вычислить целевое количество открытых сделок, умножив целевое плечо на 5.
Цель и текущие открытые сделки на графике.
Проверьте, есть ли шанс купить (если текущие открытые сделки меньше целевых) или закрыть торговлю (если текущие открытые сделки больше целевых плюс 1).
Если есть шанс купить, откройте длинную торговлю и добавьте в массив openTrades.
Если в массиве openTrades существует возможность закрыть торговлю и сделки, закрыть самую последнюю торговлю ссылкой на массив и удалить из массива.
Система предназначена для отслеживания тенденций путем динамической корректировки открытых сделок и рыночной лотереи на основе волатильности рынка.
Преимущества этой стратегии:
Динамическая корректировка кредитного плеча и размера позиции на основе изменений волатильности рынка может эффективно управлять рисками.
Использование индикатора ATR для расчета размера целевой позиции, отражающего волатильность рынка, является разумным выбором.
Пирамида с несколькими позициями может извлекать выгоду из тенденций.
Запись каждой сделки в массиве позволяет явно контролировать открытие и закрытие сделок.
Стратегия имеет несколько параметров и легко внедряется и работает.
Логика ясна, а структура кода хорошо организована для легкой оптимизации и итерации.
Риски этой стратегии:
ATR отражает только прошлое волатильность, не может предсказывать будущие изменения, может привести к неправильной корректировке рычага.
Пирамида может накапливать убытки, когда тенденция меняется.
Операции записи массива применяются только к простым операциям открытия/закрытия.
Настройки целевого плеча и размера позиции должны корректироваться на основе специфики символа, а не фиксированных параметров.
Опираться на один индикатор может ввести в заблуждение.
Стратегия может быть оптимизирована в следующих аспектах:
Добавление стоп-лосса к активному сокращению потерь при достижении уровня стоп-лосса.
Оптимизировать параметры показателей путем тестирования различных периодов ATR.
Попробуйте другие стратегии ввода, такие как вводы фиксированного количества, и проверьте результаты.
Добавить другие показатели волатильности, такие как Bollinger Bands WIDTH, KD, RSI и т.д., для комбинированного использования.
Используйте модели машинного обучения для прогнозирования волатильности вместо простого сглаживания.
Оптимизировать расчет размера позиции, например, с использованием кратных ATR или функций волатильности.
Запишите больше деталей входа, таких как цена входа, время и т. Д. Для анализа и оптимизации стратегии.
Добавьте оптимизацию параметров для автоматической оптимизации для поиска оптимальных наборов параметров.
Стратегия динамически корректирует рычаг и размер позиции на основе ATR для управления риском во время трендов и имеет определенные преимущества. Но проблемы, такие как сложность установки параметров и пространство оптимизации индикаторов, остаются для дальнейшего улучшения. В целом логика ясна и проста в эксплуатации и оптимизации, достойная углубленного исследования и применения.
/*backtest start: 2022-10-09 00:00:00 end: 2023-10-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("I11L - Risk Adjusted Leveraging", overlay=false, pyramiding=25, default_qty_value=20, initial_capital=20000, default_qty_type=strategy.percent_of_equity,process_orders_on_close=false, calc_on_every_tick=false) atr = ta.atr(14) / close avg_atr = ta.sma(atr,100) ratio = atr / avg_atr targetLeverage = 2 / ratio targetOpentrades = 5 * targetLeverage plot(targetOpentrades) plot(strategy.opentrades) isBuy = strategy.opentrades < targetOpentrades isClose = strategy.opentrades > targetOpentrades + 1 var string[] openTrades = array.new_string(0) if(isBuy) strategy.entry("Buy"+str.tostring(array.size(openTrades)),strategy.long) array.push(openTrades, "Buy" + str.tostring(array.size(openTrades))) if(isClose) if array.size(openTrades) > 0 strategy.close(array.get(openTrades, array.size(openTrades) - 1)) array.pop(openTrades)