
Эта стратегия - это система отслеживания интеллектуальных тенденций, основанная на двойной равной линии, которая идентифицирует рыночные тенденции путем вычисления высоких и низких скользящих средних, а также индикатора наклонности, а также управляет риском в сочетании с динамическим стоп-стоп-лоском. Сердце стратегии заключается в фильтрации фальшивых сигналов через наклонность отклонения, а также в использовании динамического отслеживания трейлинговых остановок для закрепления прибыли, что обеспечивает органическое сочетание отслеживания тенденций и контроля риска.
В качестве основной логики торговли стратегия использует систему двойных равноуровневых линий, рассчитывающую движущиеся средние по последовательности наивысших и наименьших цен. Система генерирует многосигналы, когда цена пробивает верхнюю среднюю линию и имеет значительный уклон вверх; система генерирует пустые сигналы, когда цена падает ниже средней линии и имеет значительный уклон вниз. Чтобы избежать частых торгов на колеблющихся рынках, стратегия вводит механизм понижения наклона, который подтверждает эффективность тенденции только тогда, когда изменение средней наклоны наклона превышает установленную отметку.
Это количественная торговая стратегия, органично сочетающая отслеживание тенденций и управление рисками. Благодаря двойной равномерной системе и сочетанию пониженных значений скольжения стратегия может более точно улавливать тенденции рынка, а динамический механизм остановки и убытков обеспечивает совершенный контроль риска. Хотя в стратегии есть место для улучшения в отношении выбора параметров и адаптации к рынку, ее четкая логическая структура и гибкая система параметров обеспечивают хорошую основу для последующей оптимизации.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA Buy/Sell Strategy with Significant Slope", overlay=true)
// Parametri configurabili
smaPeriod = input.int(20, title="SMA Period", minval=1)
initialTPPercent = input.float(5.0, title="Initial Take Profit (%)", minval=0.1) // Take Profit iniziale (ambizioso)
trailingSLPercent = input.float(1.0, title="Trailing Stop Loss (%)", minval=0.1) // Percentuale di trailing SL
slopeThreshold = input.float(0.05, title="Slope Threshold (%)", minval=0.01) // Soglia minima di pendenza significativa
// SMA calcolate su HIGH e LOW
smaHigh = ta.sma(high, smaPeriod)
smaLow = ta.sma(low, smaPeriod)
// Funzioni per pendenza significativa
isSignificantSlope(sma, threshold) =>
math.abs(sma - sma[5]) / sma[5] > threshold / 100
slopePositive(sma) =>
sma > sma[1] and isSignificantSlope(sma, slopeThreshold)
slopeNegative(sma) =>
sma < sma[1] and isSignificantSlope(sma, slopeThreshold)
// Condizioni di BUY e SELL
buyCondition = close > smaHigh and low < smaHigh and close[1] < smaHigh and slopePositive(smaHigh)
sellCondition = close < smaLow and high > smaLow and close[1] > smaLow and slopeNegative(smaLow)
// Plot delle SMA
plot(smaHigh, color=color.green, linewidth=2, title="SMA 20 High")
plot(smaLow, color=color.red, linewidth=2, title="SMA 20 Low")
// Gestione TP/SL dinamici
longInitialTP = strategy.position_avg_price * (1 + initialTPPercent / 100)
shortInitialTP = strategy.position_avg_price * (1 - initialTPPercent / 100)
// Trailing SL dinamico
longTrailingSL = close * (1 - trailingSLPercent / 100)
shortTrailingSL = close * (1 + trailingSLPercent / 100)
// Chiusura di posizioni attive su segnali opposti
if strategy.position_size > 0 and sellCondition
strategy.close("Buy", comment="Close Long on Sell Signal")
if strategy.position_size < 0 and buyCondition
strategy.close("Sell", comment="Close Short on Buy Signal")
// Apertura di nuove posizioni con TP iniziale e Trailing SL
if buyCondition
strategy.entry("Buy", strategy.long, comment="Open Long")
strategy.exit("Long TP/Trailing SL", from_entry="Buy", limit=longInitialTP, stop=longTrailingSL)
if sellCondition
strategy.entry("Sell", strategy.short, comment="Open Short")
strategy.exit("Short TP/Trailing SL", from_entry="Sell", limit=shortInitialTP, stop=shortTrailingSL)