EMAのクロスオーバー量的な取引戦略である.異なる期間のEMAを2つの取引シグナルとして使用し,短い期間のEMAが長い期間のEMAを横切るとロング,短い期間のEMAが長い期間のEMAを下回るとショートする.この戦略は,トレンドフォローする戦略に属している.この戦略はリスクを制御するためにストップ・ロストとテイク・プロフィートを設定する.
この戦略は,EMAの黄金十字と死十字を取引信号として使用する.具体的には,それぞれ短い期間のEMAと長い期間のEMAを計算する.短い期間のEMAが長い期間のEMAを横切ると,それはロングに行くための購入信号を生成する.短い期間のEMAが長い期間のEMAを下回ると,それはショートに行くための販売信号を生成する.したがって,EMAの動向は取引方向を決定する.
ストップ損失は,ストップ損失ラインとしてエントリー価格の一定パーセントである.価格がストップ損失ラインに触れた場合,ストップ損失のポジションを退出する.利益の引き上げは,利益の引き上げラインとしてエントリー価格の一定パーセントである.価格が利益の引き上げラインに触れた場合,利益の引き上げのポジションを退出する.
この戦略では,ロングとショート,イントラデイ・トレードとポジション・トレードを選択することもできます.イントラデイ・トレードでは,市場の閉じる前にすべてのポジションを閉鎖します.
この戦略には以下の利点があります.
EMAインジケーターを使って 騒音をフィルターし 中長期の傾向を 素早く把握します
短期間と長期間間のEMAクロスオーバーを取引信号として採用し,過剰取引を避ける.
ストップ・ロスを設定し 利益を取ることで 取引のリスク・リターン比をコントロールできます これはマネー管理に良いことです
異なるタイプのトレーダーに合わせて,ロング,ショート,イントラデイ,ポジション取引のみを許可する.
株式,フォレックス,暗号通貨などの複数の取引資産をサポートします
この戦略にはいくつかの潜在的なリスクもあります.
EMA指標は遅延効果があり,短期的なトレンドターニングポイントを見逃す可能性があります.
短く長い EMA 期間を不適切に選択すると,取引信号が混乱する可能性があります.
長期にわたってポジションを保持すると,市場変動が大きくなる可能性があります.
機械的なストップ・ロストとテイク・プロフィートは ポジションを早すぎる前に終了したり 利益を早めに減少させたりします
対応するリスク管理測定:
EMA パラメータを最適化して 最適な期間の組み合わせを見つけます
補助判断として他の指標を追加します.
ストップ・ロスを動的に調整して 利益を取ります
手動介入 異常な市場状況
この戦略は,次の側面で最適化できます.
EMA パラメータの最適化により,異なる取引資産に適した短期間と長期間組み合わせを見つけることができます.
マックド,KDなどの他の指標を追加します
機械学習モデルを追加して ダイナミックストップ・ロスを生成し 利益を得ます
機能工学のためのより高度な RISK インジケーターを接続する.
パラメータの自己最適化のための適応型取引コンポーネントを追加します.
概要すると,これは戦略テンプレートに従う優れたトレンドである.その核心強みは,包括的なリスク・リターン管理を有しながら,ノイズをフィルターし,安定した利益を達成するためにEMA指標を使用することにある.継続的な最適化によって,この戦略は市場全体で普遍的な定量戦略になり,トレーダーが学び,実践する価値があります.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover Strategy by Vikrant Singh", overlay=true) // Input for EMA Lengths var bool runningPOS = false var float stopLossLevel = na var float targetLevel = na shortLength = input(11, title="Short EMA Length") longLength = input(21, title="Long EMA Length") // Input for Stop-Loss and Target stopLossPct = input(1, title="Stop-Loss (%)") targetPct = input(3, title="Target (%)") longOnly = input(true, title="Long Only") intraDay = input(true, title="intraday?") // Calculate EMAs emaShort = ta.ema(close, shortLength) emaLong = ta.ema(close, longLength) // Calculate crossover conditions crossoverCondition = ta.crossover(emaShort, emaLong) crossunderCondition = ta.crossunder(emaShort, emaLong) // Entry condition (long position just before crossover) if crossoverCondition and not runningPOS and longOnly and (hour <= 15) strategy.entry("Long", strategy.long) runningPOS := true stopLossLevel := close * (1 - stopLossPct / 100) targetLevel := close * (1 + targetPct / 100) //Entry condition (short position just before crossover) if crossunderCondition and not runningPOS and not longOnly and (hour <= 15) strategy.entry("Short", strategy.short) runningPOS := true stopLossLevel := close * (1 + stopLossPct / 100) targetLevel := close * (1 - targetPct / 100) // Exit conditions (square off on reverse crossover) //Exit long if (crossunderCondition or (low < stopLossLevel) or (high > targetLevel) ) and longOnly and runningPOS strategy.close("Long",comment = "Exit long")// ("Long", from_entry="Long",stop=stopLossLevel, limit=targetLevel) runningPOS := false //Exit short if (crossoverCondition or (high > stopLossLevel) or (low < targetLevel) ) and not longOnly and runningPOS strategy.close("Short", comment = "Exit Short") runningPOS := false if intraDay and runningPOS if (hour >= 15) strategy.close_all(comment = "Intraday square off") //strategy.close("Long",comment = "intraday square off") runningPOS := false // Plot EMAs plot(emaShort, color=color.blue, title="Short EMA") plot(emaLong, color=color.red, title="Long EMA")