EMAとMACD指標に基づくトレーリングストップロス取引戦略


作成日: 2023-09-20 11:21:14 最終変更日: 2023-09-20 11:21:14
コピー: 0 クリック数: 882
1
フォロー
1617
フォロワー

概要

この戦略は,指数移動平均 (EMA) と移動平均収束距離 (MACD) の2つの指標を組み合わせて取引信号を生成し,ストップロスを追跡してリスクを制御する. この戦略は,中期トレンドを追跡する長期ポジションを保持するために,トレンドの行動に適用されます.

戦略原則

急速なEMA線が遅いEMA線を横断し,MACDヒストグラム柱が空頭になったとき,戦略は多頭する.多頭ポジションが存在するとき,下向きの追跡ストップ・ローンを設定し,価格がストップ・ラインを超えて一定割合で下落した場合,ストップ・ローンは多頭ポジションを退出する.

具体的には,戦略は7日EMAと14日EMAを使用してゆっくりとしたEMAを構築し,12日EMAと26日EMAをMACD値に減算し,9日EMAをSignalラインにします. 7日EMAで14日EMAとMACD値でSignalを穿越すると,多項を開きます.その後,下向きのトラッキングストップラインを設定し,価格が高い点から一定の割合を超えて下落した場合,ストップで退出します.

優位分析

この戦略は,EMAとMACDの2つの指標を組み合わせて,偽の突破を効果的にフィルタリングできます.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)