EMA と MACD トレーリング戦略

作者: リン・ハーンチャオチャン, 日付: 2023-09-20 11:21:14
タグ:

概要

この戦略は,指数的な移動平均値 (EMA) と移動平均 konvergence divergence (MACD) の指標を組み合わせて取引信号を生成し,リスクを制御するためにトラッキングストップロスを採用する.この戦略は,トレンド市場に適しており,長期的な保有に対する中期トレンドを追求することを目的としています.

戦略の論理

急速EMA線がスローEMA線を横切ってMACDヒストグラムが下向きになる時,ストラテジーはロングになる.ロングポジションが存在する場合,ダウントレイルストロストラインが設定される.価格が一定のパーセントでストロストロストラインを下回る場合,ロングポジションは停止される.

戦略は,EMAを構成するために7日間のEMAと14日間のEMAを使用している.MACD値は12日間のEMAから26日間のEMAを引いて得られ,シグナルラインはMACDの9日間のEMAで得られる.7日間のEMAが14日間のEMAを超越し,MACD値はシグナルラインを超越すると,ロングポジションが開かれます.その後,ダウントライリングストロストラインが設定されます.価格が一定のパーセントでより高いレベルから下落した場合,ロングポジションは停止されます.

利点分析

この戦略は,EMAとMACDインジケーターを組み合わせ,誤ったブレイクアウトを効果的にフィルターすることができます. EMAはトレンド方向を判断し,MACDはエントリーポイントを決定します.両方を組み合わせることで,信号品質を改善しながら取引頻度を減らすことができます. トレイリングストップロスは,既存の利益を最大限に保護し,主要な不利な動きが発生した場合にタイムリーストップ損失を最大化することができます.

バックテストは,この戦略がベア市場でも適正なリターンを生み出すことができ,一定の強度を示していることを示している.取引頻度は高くなく,中長期保有に適している. EMA期間のパラメータは,トレンドに従う傾向に合わせて調整することができる.

リスク分析

この戦略は主に指標に依存し,ウィップソーされるリスクがあります.範囲限定の統合中に,EMAとMACDは過剰な誤った信号を生成し,過剰な取引と損失につながる可能性があります.トライリングストップロスは,上向きのブレイクの後急な逆転に対処できないダウンサイドブレイクにのみ機能します.

EMA期間を適切に拡張することで,誤った信号が減少する可能性がある.また,ボリュームまたは波動性指標などのフィルター信号に他の指標も組み合わせることができる.さらに,ストップ損失の割合は,ストップ損失とウィップソーリスクのバランスを取るために,市場の状況に基づいて調整することができる.

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

  1. より適したパラメータを見つけるために,異なるEMA期間の組み合わせをテストすることができる.

  2. RSI,KDなどの他の指標は信号フィルタリングと品質改善のために追加することができます.

  3. ストップ・ロスの割合は,ダイナミック・トレリング・ストップで,異なる製品に基づいて調整できます.

  4. ブレイクアウト,パターン認識,その他のテクニックは,よりカスタマイズ可能なエントリーと出口ルールを組み込むことができます.

  5. 機械学習は EMA を助けるために 全体の傾向の方向性を予測するのに役立ちます

概要

この戦略は,全体的にかなり堅調で,熊市でも適正なリターンを生み出す.しかし,パラメータ調節とシグナルフィルタリングを必要とする特定のウィップソーリスクがあります.他の技術指標と機械学習によるさらなる最適化は,大幅に改善することができます.要約すると,この戦略は定量的な取引のための信頼できるテンプレートを提供します.


/*backtest
start: 2023-09-12 00:00:00
end: 2023-09-19 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Coinrule

//@version=5
strategy('EMA and MACD with Trailing Stop Loss',
         overlay=true,
         initial_capital=1000,
         process_orders_on_close=true,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=30,
         commission_type=strategy.commission.percent,
         commission_value=0.1)

showDate = input(defval=true, title='Show Date Range')
timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0)
notInTrade = strategy.position_size <= 0

// EMAs 
fastEMA = ta.ema(close, 7)
slowEMA = ta.ema(close, 14)
plot(fastEMA, color = color.blue)
plot(slowEMA, color = color.green)
//buyCondition1 = ta.crossover(fastEMA, slowEMA)
buyCondition1 = fastEMA > slowEMA


// DMI and MACD inputs and calculations
[macd, macd_signal, macd_histogram] = ta.macd(close, 12, 26, 9)
buyCondition2 = ta.crossover(macd_signal, macd)


// Configure trail stop level with input options
longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01
shortTrailPerc = input.float(title='Trail Short Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01

// Determine trail stop loss prices
longStopPrice = 0.0
shortStopPrice = 0.0

longStopPrice := if strategy.position_size > 0
    stopValue = close * (1 - longTrailPerc)
    math.max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if strategy.position_size < 0
    stopValue = close * (1 + shortTrailPerc)
    math.min(stopValue, shortStopPrice[1])
else
    999999
    

if (buyCondition1 and buyCondition2 and notInTrade and timePeriod)
    strategy.entry(id="Long", direction = strategy.long)

strategy.exit(id="Exit", stop = longStopPrice, limit = shortStopPrice)


//if (sellCondition1 and sellCondition2 and notInTrade and timePeriod)
//strategy.close(id="Close", when = sellCondition1 or sellCondition2)


もっと