レンコと相対活力指数の傾向 戦略をフォローする

作者: リン・ハーンチャオチャン, 日付: 2024-02-04 15:49:19
タグ:

img

概要

この戦略は,Renkoチャートと相対活力指数 (RVI) を組み合わせて,主要な市場トレンドのほとんどを把握しています. BTCUSD,HSIなどの主要なシンボルでうまく動作します.

戦略の論理

この戦略は9期ATRに基づいてレンコブロックを構築する. 閉じる価格が前のレンガの高値を超えると新しい緑色のレンガが構築される. 閉じる価格が前のレンガの低値を下回ると新しい赤いレンガが構築される. トレンド方向はRVI指標によって決定される.

RVIは,購入・販売圧力の相対的な強さを測定するために0-1の間を振動する.0.5以上の値はより強い購入圧力を表し,0.5以下の値はより強い販売圧力を表す.RVIがスムーズな移動平均値を超越すると,販売圧力が緩和されるにつれて購入信号が伝わります.RVIを下回ると,購入圧力が緩和されるにつれて販売信号が伝わります.

レンコブロックの方向とRVI信号を組み合わせて 順応的にロングまたはショートポジションを入力します

利点

  1. レンコブロックは通常の市場騒音をフィルターし 重要な価格変動にのみ反応し ストップを避けます
  2. RVIは,トレンド逆転を特定し,取引信号をさらに確認するのに役立ちます.
  3. 2つの指標を組み合わせると 騒音が消され 主要な傾向が把握できます

リスク

  1. ブロックの大きさは取引頻度に直接影響します.大きすぎるブロックは機会を逃す一方,小さすぎるブロックはコストを増加させます.
  2. 誤ったRVIパラメータにより 信号が欠落したり 誤った信号が増える可能性があります
  3. ダブルフィルタリングは 取引の機会を逃す

強化

  1. 変化する変動に対応する ダイナミックブロックサイズ
  2. RVIパラメータを最適化して 最適なバランスを求めます
  3. 異なるシンボルと時間枠で安定性をテストする

結論

この戦略は,主要なトレンドを把握するために,2種類の異なる指標を組み合わせます.レンコとRVIパラメータのさらなる最適化は安定性を向上させることができます.どのモデルも完璧ではありません.一部のトレードが欠けていることは避けられません.ユーザーは自分のリスク偏好を評価し,適切なシンボル/パラメータコンボを選択する必要があります.


/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Lancelot RR Strategy", overlay=false)
p=9
CO=close-open
HL=high-low
value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6
value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6
num=sum(value1,p)
denom=sum(value2,p)
RVI=denom!=0?num/denom:0
RVIsig=(RVI+ 2*RVI[1] + 2*RVI[2] + RVI[3])/6

rvicloselongcondition = crossunder(RVI, RVIsig)
rvicloseshortcondition = crossover(RVI, RVIsig)

plot(RVI,color=green,style=line,linewidth=1)
plot(RVIsig,color=red,style=line,linewidth=1)
bgcolor(rvicloseshortcondition ? green : na, transp = 75)
bgcolor(rvicloselongcondition ? red : na, transp = 75)

///Renko///
TF = input(title='TimeFrame', defval="D")
ATRlength = input(title="ATR length",  defval=9, minval=2, maxval=100)
SMAlength = input(title="SMA length",  defval=5, minval=2, maxval=100)
SMACurTFlength = input(title="SMA CurTF length",  defval=20, minval=2, maxval=100)

HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, atr(ATRlength))
SMA = request.security(syminfo.tickerid, TF, sma(close, SMAlength))
SMACurTF = sma(close, SMACurTFlength)

RENKOUP = na
RENKODN = na
H = na
COLOR = na
BUY = na
SELL = na
UP = na
DN = na
CHANGE = na

RENKOUP := na(RENKOUP[1]) ? ((HIGH+LOW)/2)+(ATR/2) : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? ((HIGH+LOW)/2)-(ATR/2) : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP-RENKODN : RENKOUP[1]-RENKODN[1]
COLOR := na(COLOR[1]) ? white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

if(not CHANGE and close >= RENKOUP[1]+H*3)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR*3
    RENKODN := RENKOUP[1]+ATR*2
    COLOR := lime
    SELL := 0
    BUY := BUY+3

if(not CHANGE and close >= RENKOUP[1]+H*2)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR*2
    RENKODN := RENKOUP[1]+ATR
    COLOR := lime
    SELL := 0
    BUY := BUY+2

if(not CHANGE and close >= RENKOUP[1]+H)
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1]+ATR
    RENKODN := RENKOUP[1]
    COLOR := lime
    SELL := 0
    BUY := BUY+1

if(not CHANGE and close <= RENKODN[1]-H*3)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR*3
    RENKOUP := RENKODN[1]-ATR*2
    COLOR := red
    BUY := 0
    SELL := SELL+3

if(not CHANGE and close <= RENKODN[1]-H*2)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR*2
    RENKOUP := RENKODN[1]-ATR
    COLOR := red
    BUY := 0
    SELL := SELL+2

if(not CHANGE and close <= RENKODN[1]-H)
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1]-ATR
    RENKOUP := RENKODN[1]
    COLOR := red
    BUY := 0
    SELL := SELL+1
    
plotshape(UP, style=shape.arrowup, location=location.bottom, size=size.normal)

renkolongcondition = UP
renkoshortcondition = DN

///Long Entry///
longcondition = UP
if (longcondition)
    strategy.entry("Long", strategy.long)
    
///Long exit///
closeconditionlong = rvicloselongcondition
if (closeconditionlong)
    strategy.close("Long")

もっと