
Strategi ini ialah sistem penjejakan arah aliran berdasarkan isyarat persilangan purata bergerak berganda, digabungkan dengan mekanisme henti untung dan henti rugi yang dinamik. Strategi ini menggunakan purata bergerak mudah (SMA) 5 tempoh dan 12 tempoh untuk menjana isyarat dagangan dan mengoptimumkan nisbah pulangan risiko dengan melaraskan tahap ambil untung dan henti kerugian secara dinamik. Pengambilan untung awal ditetapkan pada 10% dan henti rugi ditetapkan pada 5%. untuk melindungi keuntungan.
Logik teras strategi adalah berdasarkan perhubungan silang antara purata bergerak pantas (5 tempoh) dan purata bergerak perlahan (12 tempoh). Apabila garisan pantas melintasi garisan perlahan dari bawah ke atas, sistem menjana isyarat panjang dan membuka kedudukan apabila garisan pantas melintasi garisan perlahan dari atas ke bawah, sistem menutup kedudukan. Keunikan strategi terletak pada mekanisme pengurusan risiko dinamiknya: sebaik sahaja kedudukan ditetapkan, sistem akan memantau arah aliran harga dalam masa nyata dan secara dinamik melaraskan tahap ambil untung dan henti rugi mengikut perubahan harga untuk memaksimumkan keuntungan sambil mengawal risiko .
Strategi ini mencapai pemahaman aliran yang berkesan dan kawalan dinamik risiko dengan menggabungkan isyarat silang purata bergerak klasik dengan mekanisme pengurusan risiko dinamik yang inovatif. Konsep reka bentuk strategi adalah jelas, kaedah pelaksanaannya ringkas dan berkesan, serta mempunyai kepraktisan dan skalabiliti yang baik. Melalui pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka mencapai prestasi keuntungan yang stabil dalam urus niaga sebenar.
/*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)