この戦略は,固定リスク・リターン比によって最適化された移動平均クロスオーバー信号に基づいた自動化された取引システムである.この戦略は,ポジションリスク管理のために事前に設定されたストップ・ロストとテイク・プロフィートのレベルを組み合わせ,市場のトレンド方向性を決定するために,Fast MAとSlow MAのクロスオーバーを使用する.
コアロジックは,2つの移動平均値 (10期と30期) によって生成されるクロスオーバー信号に依存する. 急速MAが遅いMAを上回るときに長い信号,遅いMAが下回るときに短い信号を生成する. 各エントリ後,システムは,事前に設定された2%の損失パーセントに基づいて自動ストップロスのレベルを計算し,2.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=5 strategy("SOL 15m 2.5 R:R Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1) //--------------------------------------------------- // User Inputs //--------------------------------------------------- // sym = input.symbol("swap", "Symbol") timeframe = input.timeframe("15", "Timeframe") fastLength = input.int(10, "Fast MA Length") slowLength = input.int(30, "Slow MA Length") stopLossPerc = input.float(2.0, "Stop Loss %", step=0.1) // This is an example; adjust to achieve ~45% win rate RR = input.float(2.5, "Risk to Reward Ratio", step=0.1) //--------------------------------------------------- // Data Sources //--------------------------------------------------- price = request.security("swap", timeframe, close) // Compute moving averages fastMA = ta.sma(price, fastLength) slowMA = ta.sma(price, slowLength) // Entry Conditions longCondition = ta.crossover(fastMA, slowMA) shortCondition = ta.crossunder(fastMA, slowMA) //--------------------------------------------------- // Stop Loss and Take Profit Calculation //--------------------------------------------------- var entryPrice = 0.0 if (strategy.position_size == 0) // not in a position if longCondition // Long entry entryPrice := price strategy.entry("Long", strategy.long) if shortCondition // Short entry entryPrice := price strategy.entry("Short", strategy.short) if strategy.position_size > 0 // We are in a long position if strategy.position_avg_price > 0 and strategy.position_size > 0 longStop = strategy.position_avg_price * (1 - stopLossPerc/100) longTarget = strategy.position_avg_price * (1 + (stopLossPerc/100)*RR) strategy.exit("Long Exit", "Long", stop=longStop, limit=longTarget) if strategy.position_size < 0 // We are in a short position if strategy.position_avg_price > 0 and strategy.position_size < 0 shortStop = strategy.position_avg_price * (1 + stopLossPerc/100) shortTarget = strategy.position_avg_price * (1 - (stopLossPerc/100)*RR) strategy.exit("Short Exit", "Short", stop=shortStop, limit=shortTarget) //--------------------------------------------------- // Plotting //--------------------------------------------------- plot(fastMA, color=color.new(color.teal, 0), title="Fast MA") plot(slowMA, color=color.new(color.orange, 0), title="Slow MA")