Эта стратегия основана на индивидуальном интеграторе индикаторов для определения направления ценовой тенденции путем накопления суммы расстояний между ценой и скользящей средней, и, таким образом, отслеживания тенденции.
Стратегия использует пользовательский индикатор для интеграции расстояния между ценой и скользящей средней, реализованный следующим образом:
Вычислить расстояние между ценой и простым скользящим средним за 200 периодов k=close-sma ((close,200)
Определить период интеграции s=29, накопить сумму k за последние s периодов: сумма = 0, для i = 0 до s, сумма := сумма + k[i]
Когда сумма > 0, генерируется длинный сигнал. Когда сумма < 0, генерируется короткий сигнал.
При открытии длинной позиции, если сумма < 0, закрыть длинную позицию. При открытии короткой позиции, если сумма > 0, закрыть короткую позицию.
Стратегия оценивает общее направление тренда, отслеживая, является ли сумма расстояния между ценой и скользящей средней положительной или отрицательной. Когда интеграл положительный, это указывает на восходящую тенденцию и длинную позицию следует держать. Когда интеграл отрицательный, это указывает на нисходящую тенденцию и короткую позицию следует держать.
Интегратор индивидуальных индикаторов может эффективно определять направление ценового тренда.
Концепция интеграции накапливает расстояние между ценой и MA, улучшая точность определения тренда.
Относительно простая логика, легко понять и оптимизировать.
Гибкое регулирование периода интеграции для оптимизации чувствительности.
Хорошие результаты обратных тестов, стабильная прибыль, применимая в реальном времени.
Неправильное установление периода интеграции может вызвать нечувствительную реакцию и пропустить поворотные моменты тренда.
Неправильное установление длины MA может привести к ошибочному оценке тренда.
Неожиданные события могут вызвать неправильные сигналы.
Неправильный выбор символов, очень изменчивые символы могут ухудшить эффективность.
Соответствующие решения:
Оптимизировать период интеграции для лучшей чувствительности.
Проверить различные длины MA, чтобы найти оптимальную для определения тренда.
Закрыть стратегию перед крупными событиями, чтобы избежать ошибок от больших изменений цен.
Выбирать символы с низкой волатильностью для лучшей производительности.
Подумайте о добавлении других показателей, таких как RSI, для всеобъемлющего определения.
Результаты интеграции исследований с использованием различных типов МО.
Попробуйте автоматическую оптимизацию периода интеграции для различных символов.
Добавьте показатели объема, чтобы избежать ошибок при огромных колебаниях цен.
Используйте машинное обучение для автоматической оптимизации параметров для надежности.
Эта стратегия оценивает направление тренда с помощью индивидуального интегратора индикаторов путем накопления расстояния между ценой и MA. Логика проста и ясна, и результаты бэкстеста хороши. Она может быть улучшена путем корректировки параметров интеграции, добавления вспомогательных индикаторов, автоматической оптимизации и т. Д. Для более надежного практического применения. В целом это применимая количественная стратегия отслеживания тренда.
/*backtest start: 2023-10-09 00:00:00 end: 2023-10-16 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=100, overlay=true) l = input(defval=170,title="Length for indicator") s = input(title="Length of summation",defval=29) a= sma(close,l) r=roc(close,l) k=close-a sum = 0 for i = 0 to s sum := sum + k[i] plot(a,color=yellow,linewidth=2,transp=0) //bc = iff( sum > 0, white, teal) //plot(sum,color=bc, transp=20, linewidth=3,style=columns) //plot(sma(sum,3),color=white) //hline(0) inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na longCondition = sum>0 exitlong = sum<0 shortCondition = sum<0 exitshort = sum>0 strategy.entry(id = "Long", long=true, when = longCondition) strategy.close(id = "Long", when = exitlong) strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong) strategy.entry(id = "Short", long=false, when = shortCondition) strategy.close(id = "Short", when = exitshort) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)