Динамическая стратегия следования за трендом на основе пересечения скользящих средних

SMA MA TP SL
Дата создания: 2024-12-27 15:08:40 Последнее изменение: 2024-12-27 15:08:40
Копировать: 4 Количество просмотров: 398
1
Подписаться
1617
Подписчики

Динамическая стратегия следования за трендом на основе пересечения скользящих средних

Обзор

Стратегия представляет собой систему отслеживания тренда, основанную на сигналах пересечения двух скользящих средних в сочетании с динамическим механизмом стоп-профита и стоп-лосса. Стратегия использует 5-периодные и 12-периодные простые скользящие средние (SMA) для генерации торговых сигналов и оптимизирует соотношение риска и доходности путем динамической корректировки уровней тейк-профита и стоп-лосса. Начальный тейк-профит устанавливается на уровне 10%, а стоп-лосс на уровне 5%. Когда цена движется в благоприятном направлении, уровень тейк-профита корректируется до 20%, а стоп-лосс ужесточается до 2,5%. для защиты прибыли.

Стратегический принцип

Основная логика стратегии основана на перекрестной связи между быстрой скользящей средней (5 периодов) и медленной скользящей средней (12 периодов). Когда быстрая линия пересекает медленную линию снизу вверх, система генерирует длинный сигнал и открывает позицию; когда быстрая линия пересекает медленную линию сверху вниз, система закрывает позицию. Уникальность стратегии заключается в ее динамическом механизме управления рисками: после открытия позиции система будет отслеживать ценовые тенденции в режиме реального времени и динамически корректировать уровни тейк-профита и стоп-лосса в соответствии с изменениями цен, чтобы максимизировать прибыль, контролируя риски. .

Стратегические преимущества

  1. Система использует классическую стратегию пересечения двух скользящих средних с четкими сигналами, которые легко понять и реализовать.
  2. Динамический механизм стоп-профита и стоп-лосса позволяет эффективно защитить полученную прибыль и избежать просадок.
  3. Параметры стратегии можно гибко корректировать в соответствии с различными характеристиками рынка, обеспечивая высокую адаптивность.
  4. Механизм управления рисками совершенен и позволяет эффективно контролировать риск отдельной транзакции.
  5. Структура кода понятна, проста в обслуживании и оптимизации.

Стратегический риск

  1. Нестабильный рынок может генерировать ложные сигналы, что приводит к частой торговле
  2. При быстром развороте может произойти большой откат
  3. Неправильные настройки параметров могут повлиять на эффективность стратегии
  4. Недостаточная ликвидность рынка может повлиять на исполнение стоп-лосса Для управления рисками рекомендуются следующие меры:
  • Добавить фильтр тренда
  • Выбор параметров оптимизации
  • Мониторинг ликвидности рынка в режиме реального времени
  • Создать надежную систему управления фондами

Направление оптимизации стратегии

  1. Ввести индикаторы силы тренда для фильтрации шоковых рыночных сигналов
  2. Рассмотрите возможность добавления коэффициентов громкости для повышения надежности сигнала.
  3. Оптимизируйте параметры стоп-профита и стоп-лосса для улучшения соотношения риска и доходности.
  4. Добавление адаптивного механизма волатильности рынка
  5. Улучшение системы управления складом

Подвести итог

Эта стратегия обеспечивает эффективное понимание тенденций и динамический контроль рисков путем объединения классических сигналов пересечения скользящих средних с инновационными механизмами динамического управления рисками. Концепция разработки стратегии ясна, метод реализации лаконичен и эффективен, обладает хорошей практичностью и масштабируемостью. Ожидается, что благодаря постоянной оптимизации и совершенствованию данная стратегия позволит добиться стабильной прибыльности в реальных транзакциях.

Исходный код стратегии
/*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)