EMAのクロスオーバートレンド 戦略をフォローする

作者: リン・ハーンチャオチャン開催日:2023年12月27日 16時31分
タグ:

img

概要

この戦略は,価格動向を追跡するためにEMAクロスオーバーを採用する.速いEMAが遅いEMAを超えると長引く.速いEMAが遅いEMAを下回るとポジションを閉じる.主に明らかなトレンドを持つ製品に適しており,効果的にトレンドをフォローし,過剰なリターンを得る.

戦略の論理

この戦略の核心指標は EMA です.EMAの公式は以下の通りです.

EMA (t) =C (t) ×2/ (n+1) +EMA (t-1) × (n-1) / (n+1)

EMAは,重度の要素を持つ移動平均技術であり,最近の価格により重みを割り当て,最新の価格変化により速く反応する.

この戦略は,速いEMAと遅いEMAを構成し,スローEMAの上のEMAの速いクロスリングを購入信号として,そしてスローEMAの下のEMAの速いクロスリングを販売信号として採用する.上記のEMAの速いクロスリングは,新たな上昇ラウンドの開始を示し,下のEMAの速いクロスリングは,上昇傾向の終わりと引き下がりの開始を示します.

利点分析

この戦略の利点は次のとおりです.

  1. 論理は単純で理解し実行するのが簡単です
  2. 価格動向を判断するためにシンプルで実用的なEMAを利用し,主要な動向を見逃すのを避ける.
  3. 調整や最適化できるパラメータは少ないが,主に速いEMAと遅いEMAに依存する.
  4. 買い物後に上昇傾向を追跡できる
  5. 販売後に引き下げを避けることができ,リスクを軽減する
  6. 十分なバックテストデータで高い信頼性がある

リスク分析

主なリスクは以下のとおりです.

  1. EMAから誤った信号が発信される可能性が高い
  2. 市場が変動しているときに EMAが簡単に交差する頻度信号
  3. 突発的な事態が急激な方向転換を引き起こしたときに,損失を及時停止できない.
  4. 実際のパフォーマンスがバックテスト結果に劣る可能性があるため,最適化スペースが限られています.

上記のリスクを軽減するために,以下の最適化措置が可:

  1. 誤った信号を避けるため,フィルター条件を他の指標で追加する.
  2. 信号周波数を減らすパラメータの調整
  3. 単一の損失を制御するためにストップ損失戦略を追加する.
  4. 最適な時間帯のパラメータを テストします

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

戦略は以下の側面から最適化できます.

  1. 複数の時間枠をカバーする複合指標,例えば週または月間傾向を組み合わせる
  2. 誤ったブレイクを避けるためにフィルター条件を追加する.例えば,ボリューム,ボリンジャー帯など.
  3. パラメータをリアルタイムで市場変化に応じて動的に調整する.
  4. 他の指標を組み込み モデルを構築します 例えばグリッドや回帰アルゴリズム

概要

概要すると,これは価格傾向を判断するためにEMAを使用するシンプルで実践的なトレンドフォロー戦略である.論理は明確で実行が簡単である.メリットはパラメータを調整し,トレンドを効果的にフォローするシンプルさにある.デメリットは,誤った信号になりやすいし,実際のパフォーマンスはバックテストに劣る可能性があります.最適化の次のステップは,フィルター,ダイナミックパラメータ,モデル構築を追加することで戦略をより堅牢にすることができます.


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("EMA交叉策略by GPT",
     format = format.inherit,
     overlay = true,
     default_qty_type= strategy.percent_of_equity,
     default_qty_value = 100,
     currency = currency.USD,
     initial_capital = 1000000)


// 定義回測交易開始和結束時間的變數
start_time = input(title="開始時間", type=input.time, defval=timestamp("01 Jan 2020 00:00 +0000"))
end_time = input(title="結束時間", type=input.time, defval=timestamp("31 Dec 2050 23:59 +0000"))


// 判斷是否在回測交易時間範圍內
in_range = true


// Define input variables
fast_length = input(title="Fast EMA Length", type=input.integer, defval=5)
slow_length = input(title="Slow EMA Length", type=input.integer, defval=20)


// Define EMAs
fast_ema = ema(close, fast_length)
slow_ema = ema(close, slow_length)


// Define buy and sell signals
buy_signal = crossover(fast_ema, slow_ema)
sell_signal = crossunder(fast_ema, slow_ema)


// Buy signal
if in_range and buy_signal
    strategy.entry("Buy", strategy.long, when=in_range)
   
// Sell signal
if in_range and sell_signal
    strategy.close("Buy", when=sell_signal)

もっと