EMA移動平均クロスオーバー戦略


作成日: 2023-11-10 15:05:22 最終変更日: 2023-11-10 15:05:22
コピー: 0 クリック数: 730
1
フォロー
1617
フォロワー

EMA移動平均クロスオーバー戦略

概要

この策略は,高速EMA線と遅いEMA線の交差を買入と出売の信号として使用し,均線交差に基づいて自動取引を実現する.高速EMA線は,価格変化を緊縮し,遅いEMA線は価格変化を平らにする.高速EMA線が,下方から遅いEMA線を横断すると,買入の信号が生じ,高速EMA線が,上方から下方から遅いEMA線を横断すると,売り出売の信号が生じます.この策略は,柔軟に調整でき,高速EMAのパラメータを調整することで,購入と出売の信号をカスタマイズすることができます.

戦略原則

この戦略は,主に高速EMA線と遅いEMA線を計算し,2つの均等線の関係を比較して取引信号を生成する.

まず,入力のパラメータに高速EMAの周期emaFastを1に設定し,高速EMAが価格変化に緊密に対応できるようにする.同時に,遅いEMAの周期を設定し,emaSlowBuyは買取シグナルを生成し,emaSlowSellは販売シグナルを生成する.

次に,入力された周期に応じて,高速EMAと遅いEMAを計算する.高速EMAは1の固定周期で,価格を緊密に追跡し,遅いEMAは調節可能なパラメータで,価格データを平らにする.

次に,より速いEMAと遅いEMAの大きさの関係を比較して,交差状況を判断する. 速いEMAが下方向から遅いEMAを通過すると,金叉が生じ,買取条件を満たす. 速いEMAが上方向から下落すると,遅いEMAを破ると,デッドフォークが生じ,売り条件を満たす.

最後に,買取と販売条件を満たしたときに,相応の開設と収納指示を実行し,取引を完了する.同時に,現在の時刻が再測時間範囲にあるかどうかをチェックし,日付範囲を超えて誤った取引を避ける.

優位分析

  • 平均線交差を用いた取引の判断は,成熟した信頼性の高い技術指標です.
  • EMA周期は,市場パラメータに応じて調整し,最適な取引機会を探すことができます.
  • “金叉で買って,死叉で売る”という考え方は,はっきりと分かりやすい.
  • 柔軟に設定し,異なるEMAパラメータを使用し,完全にカスタマイズされた取引戦略で購入および販売
  • 選択可能な多額取引,空白取引,双方向取引,異なる市場状況に柔軟に対応
  • 設定可能な回帰の時間帯,異なる時間帯のための最適化テスト

リスク分析

  • EMAの均線交差は遅滞性があり,価格変化の最適なタイミングを逃している可能性があります.
  • EMAの交差は,波動的な市場では頻繁に発生し,過剰取引を引き起こします.
  • EMAの最適な組み合わせを探すためにパラメータを繰り返しテストする必要があります.そうでなければ,大量の誤信号が発生します.
  • 固定使用の1サイクルの高速EMA,市場の突発事件の際のノイズを効果的にフィルタリングできない
  • 価格の変動区間の市場を効率的に処理できないことが,多くの不必要な取引信号を生む

リスクに合わせて,以下の最適化策を考える:

  1. 他の指標と組み合わせた EMA 交差信号をフィルタリングし,誤信号を避ける

  2. 市場変動に応じてEMAパラメータを調整し,取引頻度を低下させる

  3. ストップ・アンド・ストップの考慮を高め,リスクをコントロールする

  4. 特定の市場状況に適したパラメータを使用して,高速EMAの周期を最適化

  5. トレンド判断を高め,波動的な市場から脱出する

最適化の方向

この戦略は,以下の方向からさらに最適化できます.

  1. EMAのパラメータ設定を最適化し,異なる周期組み合わせをテストし,最適なパラメータを見つけます

異なるemaFastとemaSlowのパラメータを巡って,ステップアップ・最適化またはランダム・最適化による方法を使用して,歴史データ回測で最高のパフォーマンスを示すパラメータの組み合わせを見つけることができます.

  1. 他の指標と組み合わせた信号フィルタリングの検証

例えば,MACD,KDJ,ブリン帯などの指標を組み合わせて,EMA交差から誤信号が生じないようにすることができる.

  1. トレンドの判断を高めること

平均的なリアル波幅などの指標を計算して,強弱な動きを判断し,震動市場に陥らないようにしてください.

  1. ストップ・ストップ・ストップ戦略の最適化

損失のリスクを制御するための最適のストップポイントを研究し,利益を最大化するための合理的なストップポイントを決定する.

  1. 他のEMA組み合わせをテストする

快慢EMA組み合わせだけでなく,双EMA,三EMA,あるいは多EMA組み合わせもテストして,より優越したパラメータを探せます.

  1. 異なる市場周期に対応するパラメータの調整

傾向が強い市場にはEMAサイクルを適当に加速させ,揺れ動いている市場にはEMAサイクルを遅らせることができる.

要約する

このEMAクロス戦略の全体的な考え方は,明快で分かりやすく,成熟した技術指標を用いて売買のタイミングを判断する.戦略は,カスタマイズ性があり,EMAパラメータを調整することで最適化され,異なる市場環境に対応して取引戦略を策定することができる.しかしEMA信号は,遅滞性があり,最適なパラメータの組み合わせを見つけるために繰り返しテストする必要がある.さらに,リスクに合わせて最適化され,他の指標と組み合わせて信号を検証し,止損停止方法を最適化して,引き戻し撤回を軽減し,収益性を向上させる必要がある.この戦略は,テストを継続的に最適化すれば,良好な取引業績を期待できる.

ストラテジーソースコード
/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(
     "EMA Cross Strategy with Custom Buy/Sell Conditions",
     overlay=true
     )

// INPUT:

// Options to enter fast Exponential Moving Average (EMA) value
emaFast = 1

// Options to enter slow EMAs for buy and sell signals
slowEMABuy = input(title="Slow EMA for Buy Signals",  defval=20, minval=1, maxval=9999)
slowEMASell = input(title="Slow EMA for Sell Signals",  defval=30, minval=1, maxval=9999)

// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")

// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 2018 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2025 23:59"))


// CALCULATIONS:

// Use a fixed fast EMA of 1 and calculate slow EMAs for buy and sell signals
fastEMA = ema(close, emaFast)
slowEMABuyValue = ema(close, slowEMABuy)
slowEMASellValue = ema(close, slowEMASell)


// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMABuyValue, color=color.blue, linewidth=2, title="Slow EMA for Buy Signals")
plot(series=slowEMASellValue, color=color.red, linewidth=2, title="Slow EMA for Sell Signals")


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// Translate input into trading conditions for buy and sell signals
buyCondition = crossunder(slowEMABuyValue, fastEMA)
sellCondition = crossover(slowEMASellValue, fastEMA)

// Translate input into overall trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")


// ORDERS:

// Submit entry (or reverse) orders based on buy and sell conditions
if (buyCondition and inDateRange)
    strategy.entry("Buy", strategy.long)

if (sellCondition and inDateRange)
    strategy.close("Buy")

// Submit exit orders based on opposite trade conditions
if (strategy.position_size > 0 and sellCondition)
    strategy.close("Sell")
if (strategy.position_size < 0 and buyCondition)
    strategy.close("Sell")