
この戦略は,三重超トレンド指標,イチモク雲指標,平均リアル波幅 (ATR) 指数,インデックス移動平均 (EMA) を組み合わせた定量取引戦略である. この戦略は,三重超トレンドによって市場のトレンド方向を判断し,イチモク雲によってサポート圧力を判断し,ATR指標でストップロスを設定し,EMA指標でトレンドを確認し,より完全な取引システムを構成する.
この戦略の核心的な論理は,三重超トレンド指標の判断に基づいています.超トレンド指標は,価格と特定の周期内の平均実際の波幅の大きさの関係を比較して,トレンドの方向を判断します.価格が上位軌道より高いとき,看板信号,価格が下位軌道より低いとき,看板信号です.この戦略は,3つの異なるパラメータの超トレンド指標を使用し,三つの超トレンド指標が同時に看板または看板信号を発信すると,取引信号を発信します.
また,イチモク雲指数は,現在のトレンドの強さや弱さを判断し,偽の信号を排除します.ATR指数は,ストップ・ロスを設定するために使用されます.EMA指数は,中長線トレンドを確認するために使用されます.
具体的には,価格が3組の超トレンド指標の上線より高いときは,多めに行い,価格が3組の超トレンド指標の下線より低いときは,空きをする.同時に,価格がイチモク雲より高いか低いかを要求し,不確実な信号をフィルターする.ストップポイントは,ポジション開設価格をATR指標の値減算として設定し,ダイナミック・トラッキングを実現する.
三重超トレンド指標のパラメータ設定は異なるため,市場のノイズを効果的にフィルターし,トレンドの方向を判断する精度が高い.
イチモク・クラウド・インディケータは,強弱なトレンドを判断し,偽突破を避ける.ATRの止損設定は合理的で,最大限の大規模な損失を避ける.
EMA指標は中長線傾向方向の判断を補助し,超傾向判断と相互検証し,信号の信頼性をさらに高めます.
複数の指標を組み合わせて,異なる指標の間で相互検証し,市場動向を総合的に判断し,信号はより信頼性が高い.
イチモク雲指標の判断に加入しても,雲の厚さを突破して無効領域に入るリスクもある.この場合ATR指標は部分的な損失を一定範囲で制御する.
市場が激しく波動すると,ATR指標の設定のストップポイントが直接触発され,戦略の損失率を増加させることがあります.このとき,ATRパラメータを適切に調整したり,ストップ範囲を増加させることができます.
三重超トレンド指標のパラメータが正しく設定されていない場合,多くの無効信号が生成される可能性があります.これは,大量の反射で最適な組み合わせのパラメータを見つける必要があります.
波動率指数,ブリン帯指数などの他の指標判断をさらに追加して,フィルタリング信号を補助し,信頼性を向上させることができる.
ATR指標の計算方法の改善により,大きな変動の際のストップ・ローズ範囲を動的に調整して,損失率を下げることができる.
機械学習モデルを組み込むことで,歴史データへのトレーニングによって買賣シグナルを判断し,人工パラメータの設定の影響を軽減し,シグナル精度を向上させることができる.
この戦略は,三重の超トレンド,イチモク雲,ATR指標,EMA指標の4つの部分を総合的に使用する.異なる指標によって信号が相互を検証し,市場トレンドの方向性を判断する.イチモク雲とATRのストップ・ローズ・コントロールリスク,EMAは,中長線トレンドを補助的に確認する.この戦略信号は,中長線保持に適した信頼性がある.ストップ・ローズ・メカニズムをさらに最適化し,他の補助指標の判断を追加することで,よりよい戦略効果を得ることができる.
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true )
//
float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100
// ichimoku Cloud
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku")
basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku")
displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7,
title="Leading Span A", display = display.none)
p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a,
title="Leading Span B", display = display.none)
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none)
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none)
fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70))
// three supertrend
//1
atrPeriod1 = input(10, "ATR Length1", group="SuperTrend")
factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend")
[supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrend1 := barstate.isfirst ? na : supertrend1
bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend1 = plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red, style = plot.style_linebr)
//2
atrPeriod2 = input(11, "ATR Length2", group="SuperTrend")
factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend")
[supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrend2 := barstate.isfirst ? na : supertrend2
bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend2 = plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red, style = plot.style_linebr)
//3
atrPeriod3 = input(12, "ATR Length2", group="SuperTrend")
factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend")
[supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrend3 := barstate.isfirst ? na : supertrend3
bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend", color = color.green, style = plot.style_linebr)
downTrend3 = plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red, style = plot.style_linebr)
// ATR
lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR")
smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")
ma_function(sourceATR, lengthATR) =>
switch smoothingATR
"RMA" => ta.rma(sourceATR, lengthATR)
"SMA" => ta.sma(sourceATR, lengthATR)
"EMA" => ta.ema(sourceATR, lengthATR)
=> ta.wma(sourceATR, lengthATR)
ATR = ma_function(ta.tr(true), lengthATR)
plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none)
// EMA
lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA")
srcEMA = input(close, title="Source of EMA", group="EMA")
offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA")
outEMA = ta.ema(srcEMA, lenEMA)
plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none)
ma(sourceEMA, lengthEMA, type) =>
switch type
"SMA" => ta.sma(sourceEMA, lengthEMA)
"EMA" => ta.ema(sourceEMA, lengthEMA)
"SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA)
"WMA" => ta.wma(sourceEMA, lengthEMA)
"VWMA" => ta.vwma(sourceEMA, lengthEMA)
typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA")
smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA")
smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none)
//logic
if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3)
strategy.entry("L", strategy.long)
else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR)
strategy.entry("S", strategy.short)
else
strategy.close_all("C")