
La stratégie est un système de suivi des tendances basé sur des signaux de croisement de moyennes mobiles doubles, combinés à un mécanisme dynamique de stop-profit et de stop-loss. La stratégie utilise des moyennes mobiles simples (SMA) sur 5 et 12 périodes pour générer des signaux de trading et optimise le rapport risque-rendement en ajustant dynamiquement les niveaux de take-profit et de stop-loss. Le take-profit initial est fixé à 10 % et le stop-loss est fixé à 5 %. Lorsque le prix évolue dans une direction favorable, le niveau de take-profit est ajusté à 20 % et le stop-loss est resserré à 2,5 % pour protéger les profits.
La logique de base de la stratégie repose sur la relation de croisement entre la moyenne mobile rapide (5 périodes) et la moyenne mobile lente (12 périodes). Lorsque la ligne rapide croise la ligne lente de bas en haut, le système génère un signal long et ouvre une position ; lorsque la ligne rapide croise la ligne lente de haut en bas, le système ferme la position. L’unicité de la stratégie réside dans son mécanisme de gestion dynamique des risques : une fois la position établie, le système surveillera les tendances des prix en temps réel et ajustera dynamiquement les niveaux de take-profit et de stop-loss en fonction des variations de prix pour maximiser les profits tout en contrôlant les risques .
Cette stratégie permet une compréhension efficace des tendances et un contrôle dynamique des risques en combinant des signaux de croisement de moyennes mobiles classiques avec des mécanismes innovants de gestion dynamique des risques. Le concept de conception de la stratégie est clair, la méthode de mise en œuvre est concise et efficace, et elle présente une bonne praticité et une bonne évolutivité. Grâce à une optimisation et une amélioration continues, cette stratégie devrait permettre d’obtenir des performances bénéficiaires stables dans les transactions réelles.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("My Moving Average Crossover Strategy with Take Profit and Stop Loss", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//risk_free_rate = float(request.security("IRUS", "D", close)/request.security("IRUS", "D", close[1]) - 1 ))
// MA periods
fastLength = input.int(5, title="Fast MA Length")
slowLength = input.int(12, title="Slow MA Length")
// Take Profit and Stop Loss
takeProfitLevel = input(10, title="Take Profit (пункты)") // Take profit % from the last price
stopLossLevel = input(5, title="Stop Loss (пункты)") // Stop loss % from the last price
takeProfitLevel_dyn = input(20, title="Dynamic Take Profit (пункты)") // Move TP if current_price higher buy_px
stopLossLevel_dyn = input(2.5, title="Dynamic Stop Loss (пункты)") // S Move SL if current_price higher buy_px
// Вычисление скользящих средних
fastMA = ta.sma(close, fastLength)
slowMA= ta.sma(close, slowLength)
// Conditions for Sell and Buy
longCondition = ta.crossover (fastMA, slowMA) // покупаем, если короткая MA персекает длинную снизу-вверх
shortCondition = ta.crossunder(fastMA, slowMA) // продаем, если короткая MA персекает длинную сверху-вниз
// Buy position condition
if (longCondition)
strategy.entry("Buy", strategy.long)
// Dynamic TP SL leveles
takeProfitPrice = strategy.position_avg_price * (1+ takeProfitLevel / 100)
stopLossPrice = strategy.position_avg_price * (1-stopLossLevel / 100)
entryPrice = strategy.position_avg_price
if (strategy.position_size > 0) // если есть открытая позиция
// takeProfitPrice := entryPrice * (1+ takeProfitLevel / 100)
// stopLossPrice := entryPrice * (1-stopLossLevel / 100)
// // Перемещение Stop Loss и Take Profit
if (close > entryPrice)
takeProfitPrice := close * (1+ takeProfitLevel_dyn / 100)
stopLossPrice := close * (1- stopLossLevel_dyn/ 100)
if (shortCondition)
strategy.close("Buy")
strategy.exit("Take Profit/Stop loss", "Buy", limit=takeProfitPrice, stop=stopLossPrice)
// Drawing MA lines
plot(fastMA, color=color.blue, title="Fast Moving Average")
plot(slowMA, color=color.orange, title="Slow Moving Average")
// Визуализация
plot(longCondition ? na : takeProfitPrice, title="Take Profit Level", color=color.green, linewidth=1, style=plot.style_line)
plot(longCondition ? na: stopLossPrice, title="Stop Loss Level", color=color.red, linewidth=1, style=plot.style_line)