資源の読み込みに... 荷物...

ダイナミック・テイク・プロフィット・ストップ・ロスト EMAクロスオーバー量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2024年11月18日 15:53:49
タグ:エイマ

概要

この戦略は,動向的なテイク・プロフィートとストップ・ロスのメカニズムと組み合わせた移動平均クロスオーバーに基づいた定量的な取引システムである.この戦略の核心は,10期と26期指数関数動向平均 (EMA) のクロスオーバーを使用して市場のトレンドを特定し,リトラクション中に取引を実行する.このシステムは,厳格なリスク管理を通じて資本を保護するために固定的なテイク・プロフィートとストップ・ロスのレベルを使用している.この戦略は,しばしばより明確な市場逆転信号とより大きな利益の可能性を提供するため,特に高波動性の取引ツールに適している.

戦略の原則

この戦略は,異なる期間のEMAを2つのコア指標として利用する.短期間の10期間のEMAと長期間の26期間のEMA.短期間のEMAが長期間のEMAを超えると買い信号が生成され,上昇傾向を示し,短期間のEMAが長期間のEMAを下回ると売り信号が生成される.このシステムは,トレンド確認後の価格リトレース中に取引を開始し,リスク管理のために30ポイントの利潤と15ポイントのストップ・ロスのレベルを設定する.この戦略は単一の信号メカニズムを使用し,一度に1つの方向性取引のみを許可し,システムの複雑さを軽減し信頼性を向上させる.

戦略 の 利点

  1. 明確なシグナル: EMAのクロスオーバーを取引シグナルとして使用し,実行し,監視しやすいシンプルで明確なルールを提供します.
  2. 管理されたリスク: 取引ごとに効果的なリスク管理のために,固定された利益とストップ損失のレベルを使用します.
  3. トレンドフォロー: EMAのクロスオーバーと価格のリトラセーションを組み合わせて,トレンド市場を効果的に把握する
  4. 高自動化:自動化された取引システムで簡単に実装できる明確な戦略論理
  5. 高い適応性:様々な取引手段,特に高変動性を持つ取引手段に適しています.

戦略リスク

  1. 変動市場リスク: 範囲限定の市場で頻繁に誤った信号を生む可能性があります.
  2. 変動リスク: 高波動期間に重大な変動が発生する可能性があります.
  3. ストップ・ロスのリスク: 固定ストップ・ロスのレベルは,特定の市場条件では十分に柔軟ではない場合があります.
  4. 信号遅延: EMA 交差信号には固有の遅延があり,最適なエントリーポイントが欠けている可能性があります.
  5. 資金管理リスク: 取引ごとにポジションのサイズを適切に管理する必要があります.

オプティマイゼーションの方向性

  1. ダイナミックストップ・ロース: 市場の変動に基づいてストップ・ロースレベルを調整することを検討する.
  2. シグナルフィルタリング: 偽信号をフィルタリングするために音量,波動性,または他の補助指標を追加
  3. 時間フィルタリング: 波動性の高い期間の回避のために取引時間のフィルタを導入する
  4. ポジションマネジメント: 部分的な利益獲得メカニズムを追加し,残りのポジションがトレンドに従うことを許可する
  5. 資金管理: 口座資本に基づく動的ポジションサイズを導入する

結論

この戦略は,EMAクロスオーバーと価格リトラセーションを組み合わせて完全な取引システムを確立する. 戦略デザインはシンプルで直感的で,明確なリスク制御があり,高波動性の取引ツールに適しています.適切な最適化とパラメータ調整により,この戦略はライブ取引で安定したリターンを達成する可能性があります. トレーダーはライブ実装の前に徹底的なバックテストとデモ取引を行い,実際の取引条件に応じてパラメータを最適化することをお勧めします.


/*backtest
start: 2023-11-18 00:00:00
end: 2024-11-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("30 Pips Target & 15 Pips Stop-Loss with One Signal at a Time", overlay=true)

// Define settings for target and stop-loss in pips
target_in_pips = 30
stoploss_in_pips = 10

// Convert pips to price value based on market (for forex, 1 pip = 0.0001 for major pairs like GBP/JPY)
pip_value = syminfo.mintick * 10  // For forex, 1 pip = 0.0001 or 0.01 for JPY pairs
target_value = target_in_pips * pip_value
stoploss_value = stoploss_in_pips * pip_value

// Define EMAs (10-EMA and 26-EMA) for the crossover strategy
ema10 = ta.ema(close, 10)
ema26 = ta.ema(close, 26)

// Buy signal: when 10 EMA crosses above 26 EMA
longCondition = ta.crossover(ema10, ema26)
// Sell signal: when 10 EMA crosses below 26 EMA
shortCondition = ta.crossunder(ema10, ema26)

// Define price levels with explicit type float
var float long_entry_price = na
var float long_take_profit = na
var float long_stop_loss = na
var float short_entry_price = na
var float short_take_profit = na
var float short_stop_loss = na

// Variable to track if a trade is active
var bool inTrade = false

// Check if the trade hit stop loss or take profit
if (inTrade)
    if (not na(long_take_profit) and close >= long_take_profit)
        inTrade := false  // Exit the trade after hitting target
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(long_stop_loss) and close <= long_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        long_entry_price := na
        long_take_profit := na
        long_stop_loss := na
        strategy.close("Long")

    if (not na(short_take_profit) and close <= short_take_profit)
        inTrade := false  // Exit the trade after hitting target
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

    if (not na(short_stop_loss) and close >= short_stop_loss)
        inTrade := false  // Exit the trade after hitting stoploss
        short_entry_price := na
        short_take_profit := na
        short_stop_loss := na
        strategy.close("Short")

// Only generate new signals if not already in a trade
if (not inTrade)
    if (longCondition)
        long_entry_price := close
        long_take_profit := close + target_value
        long_stop_loss := close - stoploss_value
        strategy.entry("Long", strategy.long)  // Enter a long trade
        strategy.exit("Take Profit/Stop Loss", "Long", limit=long_take_profit, stop=long_stop_loss)
        inTrade := true  // Mark trade as active

    if (shortCondition)
        short_entry_price := close
        short_take_profit := close - target_value
        short_stop_loss := close + stoploss_value
        strategy.entry("Short", strategy.short)  // Enter a short trade
        strategy.exit("Take Profit/Stop Loss", "Short", limit=short_take_profit, stop=short_stop_loss)
        inTrade := true  // Mark trade as active

// Plot the levels on the chart only when in a trade
plot(inTrade and not na(long_take_profit) ? long_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Long)")
plot(inTrade and not na(long_stop_loss) ? long_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Long)")

plot(inTrade and not na(short_take_profit) ? short_take_profit : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Take Profit (Short)")
plot(inTrade and not na(short_stop_loss) ? short_stop_loss : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Stop Loss (Short)")

plotshape(series=longCondition and not inTrade, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition and not inTrade, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")


関連性

もっと