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