レンコATR トレンド逆転戦略

作者: リン・ハーンチャオチャン開催日:2024年2月1日 (月) 14時30分24秒
タグ:

img

概要

レンコATRトレンド逆転戦略は,金融市場のトレンド逆転点を特定するために,レンコチャートと平均真差 (ATR) インジケーターを組み合わせて利用するユニークな取引アプローチです.この戦略は,レンコチャートの再塗装問題を排除することで,ターニングポイントを正確に把握し,取引決定のための明確な信号を提供します.

戦略の論理

レンコ・ブリック・ジェネレーション

この戦略は,最初に定義された期間におけるATR値を計算し,このATRをレンコチャートのブロックサイズとして使用する.価格変動が1ATRを超えると新しいレンコブロックが引き出されます.この方法で,レンコチャートは市場の変動に自動的に適応することができ,より高い変動のために大きなブロックサイズと,より低い変動期間のために小さなブロックサイズがあります.

買って売る信号生成

レンコチャートのオープン価格が閉値を下回ると購入信号が生成される.逆に,オープン価格が閉値を下回ると販売信号が生成される.これらの信号は潜在的なトレンド逆転点をマークする.

損失 を 止めて 利益 を 取る 設定

この戦略は,ユーザーによって定義された入力パラメータに基づいて,Renkoのオープン価格の割合として,各取引のストップ・ロストとテイク・プロフィートのレベルを動的に設定します.これは,各取引のリスクと報酬を制御します.

利点分析

塗り替え を 排除 する

手動で開閉価格を計算することで,再塗装はなくなり,信号がより正確でタイムリーになります.

波動性 に 自動 適応 する

ATRベースのブロックサイズにより,戦略は異なる市場変動条件に自動的に適応できます.

ダイナミックストップ・ロストとテイク・プロフィート

ストップ・ロースとテイク・プロフィートのレベルを設定するダイナミックメカニズムは,市場の変動に基づいてよりよいリスク管理を可能にします.

グラフ表示をクリーンにする

市場騒音をフィルタリングし,トレンド逆転を検出するための 明確な視覚を提供します.

リスク分析

パラメータ最適化リスク

ユーザーには,異なる市場環境のためにATR期間,ストップ損失%および利益%を最適化する必要があります. 悪いパラメータ設定は戦略のパフォーマンスを低下させることができます.

事件リスク

主要なニュースイベントや政策発表は,ストップ損失を超えた急速な滑りや利益レベルを引き上げ,大きな損失を引き起こす可能性があります.

逆転 が 失敗 する リスク

取引が損をする場合もありますが 取引が損をする場合もあります

増進 の 機会

複数のタイムフレームを使用する

より長いタイムフレームは,全体的なトレンドの方向性を測定するために使用できます.より短いタイムフレームは,誤った信号をフィルタリングすることができます.

他の指標を組み合わせる

動力,波動性,その他の指標を組み合わせることで,信号の質が向上し,誤った信号を避けることができます.

ダイナミック・テイク・プロフィート調整

市場変動とエントリー価格と現在の価格の間の距離に基づいて,収益率を動的に調整することができます.

結論

レンコATRトレンド逆転戦略は,ATR指標のレンコチャートを使用して,金融市場でトレンド逆転点を自動的に検出する.主な利点には,再塗装の除去,変動の変化への自動適応性,およびダイナミックストップ損失/利益の引き上げが含まれます.しかし,ユーザーはパラメータ最適化リスク,イベントリスク,失敗した逆転リスクに注意する必要があります.さらなる強化には,複数のタイムフレームを使用し,他の指標を組み合わせ,ダイナミックな利益の引き上げ調整が含まれます.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='[tradinghook] - Renko Trend Reversal Strategy', shorttitle='[tradinghook] - Renko TRS', overlay=true ,initial_capital = 100, commission_value = 0.05, default_qty_value = 5)

// INPUTS
renkoATRLength = input.int(10, minval=1, title='ATR Length')
stopLossPct = input.float(3, title='Stop Loss Percentage', step=0.1)
takeProfitPct = input.float(20, title='Take Profit Percentage', step=0.1)
startDate = input(timestamp("01 July 2023 00:00"), title="Start Date")
endDate = input(timestamp("31 Dec 2025 23:59"), title="End Date")
enableShorts = input.bool(true, title="Enable Shorts")

var float stopLossPrice = na
var float takeProfitPrice = na

atr = ta.atr(renkoATRLength)

// thanks to https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/ for manually calculating renkoClose and renkoOpen in order to remove repaint
getRenkoClose() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

getRenkoOpen() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

renkoOpen = getRenkoOpen()
renkoClose = getRenkoClose()

// COLORS
colorGreen = #089981
colorRed = #F23645
bgTransparency = 95
bgColorRed = color.new(colorRed, bgTransparency)
bgColorGreen = color.new(colorGreen, bgTransparency)
lineColor = renkoClose < renkoOpen ?  colorRed : colorGreen 
bgColor = renkoClose < renkoOpen ?  bgColorRed : bgColorGreen 

// PLOTS
plot(renkoOpen, title="Renko Open", style=plot.style_line, linewidth=2, color=lineColor)
bgcolor(bgColor)

// SIGNALS
isWithinTimeRange = true
buySignal = ta.crossunder(renkoOpen, renkoClose) and isWithinTimeRange
sellSignal = ta.crossover(renkoOpen, renkoClose) and isWithinTimeRange and enableShorts

if (buySignal)
    stopLossPrice := renkoOpen * (1 - stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 + takeProfitPct / 100)
    strategy.entry("Long", strategy.long)
    strategy.exit("ExitLong", "Long", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))
if (sellSignal)
    stopLossPrice := renkoOpen * (1 + stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 - takeProfitPct / 100)
    strategy.entry("Short", strategy.short)
    strategy.exit("ExitShort", "Short", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))


もっと