レンコ平均真の範囲に基づくトレンド反転戦略


作成日: 2024-02-01 14:30:24 最終変更日: 2024-02-01 14:30:24
コピー: 0 クリック数: 1467
1
フォロー
1617
フォロワー

レンコ平均真の範囲に基づくトレンド反転戦略

概要

レンコ平均真波幅のトレンド逆転戦略 (Renko ATR Trend Reversal Strategy) は,レンコグラフと平均真波幅 (ATR) の指標を組み合わせて,金融市場のトレンド逆転点を識別することを目的としたユニークな取引戦略である.この戦略は,レンコグラフの遅滞描画の問題を取り除き,ターニングポイントを正確に捕捉し,取引決定に明確な信号を提供します.

戦略原則

レンコブロックの生成

この戦略は,まず,一定の周期内のATRの値を計算し,このATRを基準としてRenko図のブロックサイズを設定する.価格が1つのATRを超えると新しいRenkoブロックが描かれます.この方法で,Renko図は,市場の波動程度に自動的に適応し,高い波動時に大きなブロックサイズを設定し,低い波動時に小さなブロックサイズを設定します.

信号生成の買取と販売

レンコの開値が閉値を下に突破すると,買入シグナルが生成され,レンコの開値が閉値に突破すると,売り出シグナルが生成されます.これらのシグナルは潜在的トレンドの逆転点を示すものです.

停止と停止の設定

この戦略は,ユーザが定義したストップ・ロス・パーセントとストップ・ストップ・パーセントに基づいて,Renkoの開場価格を基準として,各取引のストップ・ロス・価格とストップ・ストップ・価格を動的に設定し,各取引のリスクと利益を制御する.

優位分析

落書きの解消

この戦略は,手動でレンコの開値と閉値を計算することで,遅滞描写の問題を取り除き,信号の生成をより正確かつタイムリーにします.

市場変動に自動的に適応する

ATR指数に基づくRenkoブロックサイズ設定により,戦略は異なる市場条件下での価格変動率に自動的に適応できます.

ダイナミック・ストップ・ダメージ・ストップを設定する

この戦略は,各取引ごとにダイナミックな止損と停止メカニズムを設定し,市場の波動程度に応じてリスクを制御します.

簡略化されたグラフビュー

レンコのグラフは市場騒音を消去し,トレンドの逆転を識別する明確な簡潔な視覚効果を提供します.

リスク分析

パラメータ最適化のリスク

ユーザは,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))