これは,高速EMAと遅いEMA指標に基づいた二重EMAクロスオーバー取引戦略である.この戦略は,高速EMAが遅いEMAを超えるとロングシグナルを生成し,高速EMAが遅いEMAを下回るとロングポジションを閉じる.この戦略は,中期取引にシンプルで実用的である.
この戦略は主に二重EMA指標を用いて実施される.高速EMAは価格変動を敏感に反映するための短い期間があり,遅いEMAは長期的な傾向を示すための長い期間を有する.
低速EMAが低速EMAの上を横切ると,金色の十字が形成され,ロングの短期間の上昇価格勢いを示します.低速EMAが低速EMAを下に横切ると,低速モメンタムを示し,ロングポジションを閉じます.
具体的には,この戦略には以下の内容が含まれます.
期間,ソースなどを含む,高速および遅いEMAの入力パラメータ
速度の EMA と 遅さの EMA を計算する.
高速EMAが低速EMAを超えると黄金十字を定義する.
低速EMAを低速EMAを下回るときに死十字を定義する.
金色の十字架で長走する
死の十字架の位置を 閉じろ
ショート・オプションとストップ・損失/利益引き取りのオプション
出力 買取 販売 通知
この単純な二重EMAクロスオーバーシステムにより 戦略は短期的な傾向を把握し 利益を得ることができます
この戦略には以下の利点があります.
論理は単純で明白で 分かりやすい
双 EMA を使います 簡単に実行できます
短期的なトレンドを把握し 利益を得ることができます
異なる市場向けに調整可能な EMA 期間.
リスク管理のためのショートカットオプション
ストップ・ロスト/利益取得オプション
監視のための買い/売りの通知
EMAのパラメータを最適化して より良い利益を得ることができます
リスクもあります:
双 EMA は,不必要な損失を引き起こすような誤った信号を生む可能性があります.
誤ったストップ損失設定は損失を拡大する可能性があります.
高い取引頻度はコストとリスクを増加させます
固定EMAパラメータは市場の変化に適応できない.
動きを追う傾向があり 落ち着いた判断力を失います
トレンド逆転を特定できず,逆転ポジションを開く可能性があります.
対応するリスク管理措置:
EMAのパラメータを最適化して 偽信号を減らす
適切なストップ・ロスを 取引損失ごとに制限するように設定します.
EMA期間を最適化して頻度を減らす
EMAを動的に調整する
トレンドインジケーターを追加して 勢いを追わないようにします
トレンドツールを使って主要なトレンド方向性を特定する.
戦略は以下の側面で最適化できます.
EMAパラメータのダイナミック最適化
精度を高めるために ストックフィルターを追加します
低変動環境におけるポジションを減らすため,変動指数を含める.
信号の音量確認を追加します.
20SMAのブレイクのように 信号を受け取る前に 価格レベルを設定します
ストップ・ロスの戦略を改善し 利益を得る
主なトレンドの分析を追加してトレンドに反する取引を避ける.
機械学習アルゴリズムで 戦略を継続的に最適化します
概要すると,ダブルEMAクロスオーバー戦略は,短期的トレンドを把握するためのシンプルで明確な論理を持っていますが,利益リスクもいくつかあります.我々は,パラメータを最適化し,ストップ損失/利益を取ることを実施し,ストックをフィルタリングし,主要なトレンドを判断し,満足のいく収益を継続的に得るためにリスクを管理することができます. 戦略は継続的な研究と改良によって徐々に改善することができます.
/*backtest start: 2023-09-15 00:00:00 end: 2023-10-15 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("EMA Strategy", shorttitle="EMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // === Inputs === // short ma maFastSource = input(defval=close, title="Fast MA Source") maFastLength = input(defval=3, title="Fast MA Period", minval=1) // long ma maSlowSource = input(defval=close, title="Slow MA Source") maSlowLength = input(defval=9, title="Slow MA Period", minval=1) // invert trade direction shorting = input(defval=false, title="Allow Shorting?") // risk management useStop = input(defval=false, title="Use Initial Stop Loss?") slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1) useTS = input(defval=false, title="Use Trailing Stop?") tslPoints = input(defval=120, title="Trail Points", minval=1) useTSO = input(defval=false, title="Use Offset For Trailing Stop?") tslOffset = input(defval=20, title="Trail Offset Points", minval=1) // Messages for buy and sell message_buy = input("Buy message", title="Buy Alert Message") message_sell = input("Sell message", title="Sell Alert Message") // Calculate start/end date and time condition startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time) finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time) time_cond = true // === Vars and Series === fastMA = ema(maFastSource, maFastLength) slowMA = ema(maSlowSource, maSlowLength) plot(fastMA, color=color.blue) plot(slowMA, color=color.purple) goLong() => crossover(fastMA, slowMA) killLong() => crossunder(fastMA, slowMA) strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_buy) strategy.close("Buy", when=killLong() and time_cond, alert_message = message_sell) // Shorting if using if shorting strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_sell) strategy.close("Sell", when=goLong() and time_cond, alert_message = message_buy) if useStop strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08) strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08)