
Стратегия представляет собой систему отслеживания тренда, основанную на сигналах пересечения двух скользящих средних в сочетании с динамическим механизмом стоп-профита и стоп-лосса. Стратегия использует 5-периодные и 12-периодные простые скользящие средние (SMA) для генерации торговых сигналов и оптимизирует соотношение риска и доходности путем динамической корректировки уровней тейк-профита и стоп-лосса. Начальный тейк-профит устанавливается на уровне 10%, а стоп-лосс на уровне 5%. Когда цена движется в благоприятном направлении, уровень тейк-профита корректируется до 20%, а стоп-лосс ужесточается до 2,5%. для защиты прибыли.
Основная логика стратегии основана на перекрестной связи между быстрой скользящей средней (5 периодов) и медленной скользящей средней (12 периодов). Когда быстрая линия пересекает медленную линию снизу вверх, система генерирует длинный сигнал и открывает позицию; когда быстрая линия пересекает медленную линию сверху вниз, система закрывает позицию. Уникальность стратегии заключается в ее динамическом механизме управления рисками: после открытия позиции система будет отслеживать ценовые тенденции в режиме реального времени и динамически корректировать уровни тейк-профита и стоп-лосса в соответствии с изменениями цен, чтобы максимизировать прибыль, контролируя риски. .
Эта стратегия обеспечивает эффективное понимание тенденций и динамический контроль рисков путем объединения классических сигналов пересечения скользящих средних с инновационными механизмами динамического управления рисками. Концепция разработки стратегии ясна, метод реализации лаконичен и эффективен, обладает хорошей практичностью и масштабируемостью. Ожидается, что благодаря постоянной оптимизации и совершенствованию данная стратегия позволит добиться стабильной прибыльности в реальных транзакциях.
/*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)