移動平均クロスオーバートレンドフォローする戦略は,市場のトレンドを追跡する定量的な取引戦略である.この戦略は,高速および遅い移動平均を計算し,クロスオーバーが発生するときに市場トレンドのターニングポイントを捕捉することによって取引信号を生成する.
この戦略の基本原理は,異なるパラメータを持つ指数的な移動平均値 (EMA) を用いて市場動向を判断することである.この戦略は,速いEMAと遅いEMAを定義する.速いEMAが遅いEMAを超えると,市場の上昇傾向の逆転を示します.速いEMAが遅いEMAを下回ると,下落傾向の逆転を示します.
上向きのクロスでは,戦略はロングポジションを開く. 下向きのクロスでは,戦略はショートポジションを開く. 戦略は,利益を得たり,ストップロスを引き起こすか,または反対方向のクロスオーバーが再び起こるまでポジションを維持する.
この戦略には以下の利点があります.
この戦略にはいくつかのリスクもあります:
リスクを軽減するために,他の指標を組み合わせてトレンドタイプを決定するか,より広いストップロスの比率を設定することを検討してください.
戦略は,次の側面でも最適化できます.
概要すると,移動平均クロスオーバートレンドフォロー戦略は,シンプルで実践的なトレンドトレード戦略である.戦略の核心的なアイデアは明確で,実装が簡単で,最適化にも余地がある.パラメータを調整し,マルチタイムフレーム分析,ダイナミックストップなどを追加することで,戦略の安定性と収益性が継続的に向上することができる.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Zhukov trade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=10, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=20, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2030 23:59')) // Set take profit and stop loss percentages take_profit_percent = input(1.0, title ="Take Profit Percent") / 100.0 stop_loss_percent = input(1.0, title ="Stop Loss Percent") / 100.0 // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close, 200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) and inDateRange shortCondition = ta.crossunder(fastEMA, slowEMA) and inDateRange // ORDERS: // Submit entry (or reverse) orders if longCondition and longOK strategy.entry(id='long', direction=strategy.long) if shortCondition and shortOK strategy.entry(id='short', direction=strategy.short) // Exit orders if strategy.position_size > 0 and longOK strategy.exit(id='exit long', from_entry='long', limit=strategy.position_avg_price * (1 + take_profit_percent), stop=strategy.position_avg_price * (1 - stop_loss_percent)) if strategy.position_size < 0 and shortOK strategy.exit(id='exit short', from_entry='short', limit=strategy.position_avg_price * (1 - take_profit_percent), stop=strategy.position_avg_price * (1 + stop_loss_percent))