Strategi ini adalah sistem pelacakan tren berdasarkan sinyal persilangan rata-rata pergerakan ganda, dikombinasikan dengan mekanisme stop-profit dan stop-loss yang dinamis. Strategi ini menggunakan rata-rata pergerakan sederhana (SMA) 5 periode dan 12 periode untuk menghasilkan sinyal perdagangan dan mengoptimalkan rasio risiko-pengembalian dengan menyesuaikan level take-profit dan stop-loss secara dinamis. Take profit awal ditetapkan sebesar 10% dan stop loss ditetapkan sebesar 5%. Ketika harga bergerak ke arah yang menguntungkan, level take profit disesuaikan menjadi 20% dan stop loss diperketat menjadi 2,5%. untuk melindungi keuntungan.
Logika inti dari strategi ini didasarkan pada hubungan persilangan antara rata-rata pergerakan cepat (5 periode) dan rata-rata pergerakan lambat (12 periode). Ketika garis cepat melintasi garis lambat dari bawah ke atas, sistem menghasilkan sinyal panjang dan membuka posisi; ketika garis cepat melintasi garis lambat dari atas ke bawah, sistem menutup posisi. Keunikan strategi ini terletak pada mekanisme manajemen risiko yang dinamis: setelah posisi ditetapkan, sistem akan memantau tren harga secara real time dan secara dinamis menyesuaikan level take-profit dan stop-loss sesuai dengan perubahan harga untuk memaksimalkan keuntungan sambil mengendalikan risiko. .
Strategi ini mencapai pemahaman tren yang efektif dan pengendalian risiko yang dinamis dengan menggabungkan sinyal persilangan rata-rata bergerak klasik dengan mekanisme manajemen risiko dinamis yang inovatif. Konsep desain strategi jelas, metode implementasinya ringkas dan efektif, serta memiliki kepraktisan dan skalabilitas yang baik. Melalui optimalisasi dan perbaikan berkelanjutan, strategi ini diharapkan dapat mencapai kinerja laba yang stabil dalam transaksi aktual.
/*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)