2つの信号のトレンド追跡戦略

作者: リン・ハーンチャオチャン開催日:2023年11月2日17時02分06秒
タグ:

img

概要

この戦略は,トレンドを特定し,追跡するために二重EMAとAwesomeオシレーター指標を組み合わせます.EMAは短期的なトレンド方向を迅速に判断し,Awesomeオシレーターは偽のブレイクアウトをフィルタリングし,エントリータイミングを提供します.戦略名"Dual Signal Trend Tracking Strategy"は,主な機能を正確に要約しています.

戦略の論理

この戦略は主に2つの技術指標,ダブルEMAとAwesome Oscillatorを利用し,次の論理でシグナルをフィルターします.

  1. 2 期間の EMA と 20 期間の EMA を計算する. 2 期間の EMA が 20 期間の EMA を上向きに突破すると,上昇傾向を示します. 2 期間の EMA が 20 期間の EMA を下向きに突破すると,下向きの傾向を示します.

  2. 驚異的なオシレーターを計算します. これは,速いEMAマイナススローEMAで平坦化されたMACDヒストグラムです. AOヒストグラムが赤から青に変化すると,それは購入信号です. 青から赤に変化すると,それは販売信号です.

  3. EMAが上昇傾向を示し,AOが同時に購入信号を示したときにのみ,最終的な購入信号が生成される.EMAが下落傾向を示し,AOが販売信号を示したときにのみ,最終的な販売信号が生成される.

  4. この二重シグナルフィルタリングメカニズムによって 偽のブレイクが減少し 中期トレンドが追跡できます

利点分析

この戦略の利点は次のとおりです.

  1. デュアルラインフィルタリングは,エラーによる騒々しい取引を減らす. EMAは全体的なトレンドを判断し,AOはエントリータイミングをフィルタリングする.両者を組み合わせることで,信号の信頼性が向上する.

  2. 極めて速い反応感度で,短期的な逆転を迅速に把握できます. 2期間のEMAはブレイクアウトに非常に敏感で,最近の傾向が変化したかどうかを迅速に判断できます.

  3. Awesome OscillatorはMACDをさらにフィルタリングし,トレンドの誤ったブレイクを効果的に識別し,不必要な逆転取引を回避します.

  4. 戦略は中期トレンドを追跡するための明確な方向性を持っています.EMAは基本トレンドを決定し,AOは全体的なトレンドに沿って取引を確保するためにシグナルをフィルターします.

  5. 合理的なパラメータ選択. 2 期間のEMAと 20 期間のEMAは,異なる時間枠における価格変化を把握する. AO パラメータ 5 と 34 は,短期パターンを特定するために最適化されている.

リスク分析

リスクもあります:

  1. EMAとAOは,変動市場では,より多くの誤った信号を生成し,不必要なショート取引を引き起こす可能性があります.EMA期間を調整することで,エラーが減少します.

  2. AOは時にEMAを遅らせ,信号時間の遅延を引き起こす可能性があります. AOパラメータは,より速い応答のために最適化することができます.

  3. EMAとAOは,短期および中期の特徴を組み合わせるため,質の高いデータと計算能力が必要です.パラメータは,異なる製品に合わせて調整する必要があります.

  4. 頻繁な取引は,より高い佣金と滑り込みコストにつながります. 保持期間を延長するために退出基準を緩和することができます.

  5. 戦略は長期的動向や主要なサポート/レジスタンスレベルを考慮していない.正しい取引方向性を確保するために,より多くの要因を組み合わせなければならない.

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

戦略はいくつかの側面によって最適化できます.

  1. 移動平均リボンやATRのような傾向指標を導入し,EMAが全体的な傾向を決定するのに役立ちます.

  2. フィボナッチ回転のようなキーサポート/レジスタンス検出を追加し,悪いエントリーポジションを避けるためにキーレベル周辺のみ信号を生成します.

  3. コンボ効果を改善するために,EMAとAOパラメータの組み合わせを最適化します.例えば,最適なパラメータペアを見つけるために遺伝アルゴリズムを使用します.

  4. ストップ・ロスの出口を追加します. 価格が最近のスウィング・ハイ/ローを突破すると,単一の取引損失を制御します.

  5. 戦略の業績を評価するための 過去データによるバックテスト 安定した収益性が期待に応えるかどうかを確認する

  6. パラメータを徐々に調整し,ライブパフォーマンスを向上させる. より安定したパラメータセットを見つけるためにパラメータの安定性をテストします.

結論

戦略のアイデアは明確で,全体的なトレンドとシグナルフィルタリングのためのAOを組み合わせます.トレンドを効果的に識別し追跡できますが,安定性を向上させるためにさらなる最適化とテストのためのリスクと制限もあります.鍵は適切な取引原則とスタイルと組み合わせた適切な製品とパラメータを選択することです.全体的にこの戦略は健全な論理と実践的な価値を持っています.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA) =>
    pos = 0.0
    xSMA1_hl2 = ta.sma(hl2, nLengthFast)
    xSMA2_hl2 = ta.sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = ta.sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = ta.wma(nRes, nLengthWMA)
    xResMA = ta.sma(nRes, nLengthMA)
    xResEMA = ta.ema(nRes, nLengthEMA)
    xSignalSeries = bShowWMA ? xResWMA :
                     bShowMA ? xResMA : 
                      bShowEMA ? xResEMA : na
    pos :=  xSignalSeries[2] < 0 and xSignalSeries[1] > 0? 1:
    	     xSignalSeries[2] > 0 and xSignalSeries[1] < 0 ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & Bill  Awesome Oscillator (AC)', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Awesome Oscillator (AC) ═════●'
nLengthSlow = input.int(34, minval=1, title="Length Slow", group=I2)
nLengthFast = input.int(5, minval=1, title="Length Fast", group=I2)
nLengthMA = input.int(15, minval=1, title="MA", group=I2)
nLengthEMA = input.int(15, minval=1, title="EMA", group=I2)
nLengthWMA = input.int(15, minval=1, title="WMA", group=I2)
bShowWMA = input.bool( defval=true, title="trading WMA", group=I2)
bShowMA = input.bool( defval=false, title="trading MA", group=I2)
bShowEMA = input.bool( defval=false, title="trading EMA", group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosAC = AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA)
iff_1 = posEMA20 == -1 and prePosAC == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosAC == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

もっと