EMAの強化されたスーパートレンド戦略

作者: リン・ハーンチャオチャン開催日:2023年10月7日 10:07:15
タグ:

概要

この戦略は,移動平均アシスタント判断と組み合わせて,ATRと価格を比較して価格傾向の方向性を判断する.他のトレンド判断方法と比較して,小さな引き下げで価格傾向の変化をより早く把握することができます.

戦略原則

価格動向を決定するためのこの戦略の主なステップは次のとおりです.

  1. 最近の N 日間の ATR を,現在の市場変動をよりよく反映できる Wilder の ATR 計算方法を使用して計算する.

  2. ATRとATK係数に基づいて上下帯を計算します.上帯 =価格 - (atk x ATR);下帯 =価格 + (atk x ATR). atkは通常2-3の間で設定されます.

  3. トレンド方向を決定するために,価格を上位帯と下位帯と比較します.上位帯の価格ブレイクは上昇信号であり,下位帯の価格ブレイクは下位信号です.

  4. トレーディング・シグナルが発生すると,ロングまたはショートを取ります.シグナル品質を決定するために移動平均がここで使用されます.

  5. リスク管理にストップ・ロスの戦略を追加します

  6. 判断を助けるために戦略の状態の色マークを使用します.

この戦略は,ATRの利点を完全に利用し,価格傾向の変化を迅速に把握し,低引き上げ操作を達成します.これは非常に実践的な傾向戦略です.

利点

この戦略の利点は以下の通りです.

  1. 価格変動に迅速な対応 ATRは最新の市場に迅速に対応し,トレンドの変化を迅速に把握するのに役立ちます

  2. 小幅の引き下げ 上の帯と下の帯の間のバッファゾーンは,ストップ・ロスの突破と低い引き下げの確率を減らすことができます

  3. 明確な取引シグナルです 範囲のブレイクは 長い方向と短い方向の 高品質のシグナルです

  4. 高度なカスタマイズ可能性.ATR期間と倍数は,異なる市場環境に適応するために調整可能である.

  5. 強力な視覚化 グラフィックツールは戦略の状態を直感的に表示します

  6. 移動ストップ損失,フィルターなどのモジュールは,さらなる最適化のために追加することができます.

一般的にこの戦略は,少量の引き上げなどの優れた利点があり,トレンドフォロー戦略に非常に適しています.

リスク

リスクもあります:

  1. 傾向決定の誤りリスク.価格統合中に誤った信号が発生する可能性があります.

  2. 出口ポイント選択リスク 早期出口を避けるために,ストップ・ロスは合理的に設定する必要があります.

  3. パラメータ最適化リスク.ATR期間と倍数は繰り返しテストと最適化が必要で,不適切な設定はパフォーマンスに影響します.

  4. 取引頻度が高いリスク. 市場が極端に不安定なときに取引頻度があまりにも高くなる可能性があります.

  5. 業績リスクは中等です. 明確な傾向がない市場では,業績が不満足かもしれません.

  6. ライブ取引リスクの調整です. ライブ取引のスライドや手数料の調整が必要です.

  7. 体系的リスク: この戦略だけに頼るのではなく,全体的なシステムリスク管理を検討すべきです.

リスクは以下の方法で制御できます.

  1. ATRパラメータを最適化して 精度を向上させる

  2. 複数の時間枠の分析を使用して 傾向を特定します

  3. ストップ・ロスを移動して 利益を固定し 引き下げを減らす

  4. 取引頻度を制御するフィルターを追加します

  5. 異なる市場のためのパラメータの調整

  6. 最適な応用シナリオを見つけるために 異なる製品をテストする

  7. ライブ・トレーディングにおける全ての取引リスクを全面的に考慮します

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

戦略は以下の側面で最適化できます.

  1. MACD,KDJは補助判断に使用できます.

  2. ATRパラメータを最適化して,最適な値を見つけるために異なる期間をテストする.

  3. 信号生成の感度を決定するための倍数パラメータの最適化

  4. ATRや波動性に基づいて動的ストップロスの戦略を追加します.これは引き下げをさらに減らすことができます.

  5. 分析のためにより長い時間枠の指標を使用して 偶発的な誤った信号をフィルターします

  6. RNNのような機械学習モデルを採用して 信号判断を改善します

  7. 製品特性に基づいてパラメータを調整する.例えば,不安定なストックに対してより短いATR期間を使用する.

  8. より良いエントリーを見つけるために 脱出の引き戻しアプローチを使用してエントリーポイントを最適化します

  9. 音量指標を組み合わせて信号強さを判断する

  10. トレンド・モメント・インディケーターに基づいて 収益戦略を追加します

結論

一般的には,このスーパートレンド戦略は,迅速な応答と小さな引き下げなどの利点で非常に実践的です.これは典型的なトレンドフォローシステムです.しかし,判断の誤りやパラメータ最適化などのリスクは,ライブ取引で注意を払い,包括的なリスク管理を実施する必要があります.さらなる最適化は,より多くの市場で戦略をより堅牢かつ収益性の高いものにすることができます.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 6h
basePeriod: 15m
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/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => true
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

//@version=3
//study(title="3 Moving Average Exponential", shorttitle="3 EMA", overlay=true)
//len1 = input(17, minval=1, title="Fast")
//len2 = input(72, minval=1, title="Medium")
len3 = input(305, minval=1, title="Slow")
//src1 = input(close, title="Source Fast")
//src2 = input(close, title="Source Medium")
src3 = input(close, title="Source Slow")
//out1 = ema(src1, len1)
//out2 = ema(src2, len2)
out3 = ema(src3, len3)
//plot(out1, title="EMA1", color=fuchsia)
//plot(out2, title="EMA2", color=orange)
plot(out3, title="EMA3", color=color.blue)

もっと