この戦略は,ダイナミックなテイク・プロフィートとストップ・ロスのメカニズムを組み込んだ二重移動平均クロスオーバー信号に基づいたトレンドフォローシステムである. 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)