見出し画像

RCI3Lineマルチタイム ver0.6本体

//RCI3lines multi ver0.6 last 2024-03-23 / since 2023-09-12 @issei0008


//@version=5

indicator(title = "RCI3lines mul v0.6", shorttitle = "RCI3lines mul")//, format=format.price, precision=2, timeframe="", timeframe_gaps=true

IptPeriod = input.timeframe(defval="",title="マルチタイムフレーム(MT)",

  tooltip = 'RCI : 株価(終値)に上昇順位をつけ、その期間の日数との相関関係を指数化したもので「上がり始め」「下がり始め」の時期とタイミングを捉える指標')// マルチタイムフレームのデータを取得


itvs = input.int(8, "short interval",

  tooltip = "押し目、押し目 短期線ではトレンド分らぬ" +"\n"+ "世間一般では9が標準")

itvm = input.int(25, "middle interval",

  tooltip = '長期線とのGC・DCでトレンド転換の兆し、高値圏、安値圏抜けでトレンド示唆、世間一般では26が標準')

itvl = input.int(50, "long interval",

  tooltip = '長期線の±0より上、下でトレンド確認')

src = input(close, "source")

upperband = input.int(title = "高値圏指示", maxval=99,minval=1,defval = 80)

lowerband = input.int(title = "安値圏指示", maxval=-1,minval=-99,defval = -80)


length = input.int(300, minval=2, maxval=3000, title='中期線集計足数' , group=" ▼ ▼ ▼ 集計用", tooltip="RCI中期線のサイクル統計 長期×4程度 and 中期線サンプル平均 4-8回程度" + "\n" +

  "集計多すぎると平均に帰属するので、直近への感度性が無くなる" + "\n" +

  "「トレンドがなく、周期的である」を前提にしているので、BB+2 の枠内に収まらないときはトレンドが出ている、または保ち合い中で切り返し前と考えられる" + "\n" +

  "\n" +

  "設定例 先物 5分足 ザラ場8:45-15:15 :78本、夜間 16:30-6:00 :174本"  + "\n" +

  "先物 30分足 ザラ場8:45-15:15 :13本、夜間 16:30-6:00 :29本"  + "\n" +

  "\n" +

  "自分設定用 先物 5分足:240(1日)   15分足:240(3日) 30分足:220(1週間)")

s_cycle = input.bool(true, title='短期線サイクル表示',tooltip="",inline = "101")

s_bb = input.float(defval = 3,maxval=5,minval=1, title='偏差',tooltip="短期線サイクルの表示、標準偏差の範囲の指定",inline = "101")

m_cycle = input.bool(true, title='中期線サイクル表示',tooltip="",inline = "201")

m_bb = input.float(defval = 2,maxval=5,minval=1, title='偏差',tooltip="中期線サイクルの表示、標準偏差の範囲の指定",inline = "201")

l_cycle = input.bool(true, title='長期線サイクル表示',tooltip="",inline = "301")

l_bb = input.float(defval = 1,maxval=5,minval=1, title='偏差',tooltip="長期線サイクルの表示、標準偏差の範囲の指定、長期線は±0の転換範囲",inline = "301")


alert = input.bool(true, title='中期線+短期線でアラート',tooltip="中期線高値圏、安値圏割れ + 短期線の押し目位置",group=" ▼ ▼ ▼ アラート設定")

itvm_alart = input.int(30, "",

  tooltip = '短期戦押し目から中期線の高値割れ遡る足数' + "\n" +

  "上で抽出されたサイクル数と相談して設定すること" + "\n" +

  "遡りすぎると関係性が薄れる")


GCDC = input(true, "中長期ゴールデンクロス、デッドクロス",group=" ▼ ▼ ▼ サポート表示")

push_mark = input(false , "短期線押し目")

HiLow = input(true, "中長期Hi、lowライン越境")



ord(seq, idx, itv) =>

    p = seq[idx]

    o = 1

    s = 0

    for i = 0 to itv - 1

        if i != idx

            if p < seq[i]

                o := o + 1

            else

                if p == seq[i]

                    s := s + 1

                    o + (s - 1) / 2.0

    o


d(itv) =>

    sum = 0.0

    for i = 0 to itv - 1

        sum := sum + math.pow((i + 1) - ord(src, i, itv), 2)

    sum


rci(itv) => (1.0 - 6.0 * d(itv) / (itv * (itv * itv - 1.0))) * 100.0


hline(upperband, color = color.gray, linestyle = hline.style_dashed)

hline(lowerband, color = color.gray, linestyle = hline.style_dashed)

midline = hline(0, "RCI zero", color=color.new(#787B86, 50))


rci_itvl = request.security(syminfo.tickerid, IptPeriod, rci(itvl),barmerge.gaps_on,barmerge.lookahead_on)

rci_itvm = request.security(syminfo.tickerid, IptPeriod, rci(itvm),barmerge.gaps_on,barmerge.lookahead_on)

rci_itvs = request.security(syminfo.tickerid, IptPeriod, rci(itvs),barmerge.gaps_on,barmerge.lookahead_on)


plot(rci_itvs, title = "RCI short", color = color.red )

plot(rci_itvm, title = "RCI middle", color = color.yellow)

plot(rci_itvl, title = "RCI long", color = color.blue)


// デッドクロス(DC)とゴールデンクロス(GC)の条件を追加

is_dc = ta.crossover(rci_itvl, rci_itvm)

is_gc = ta.crossunder(rci_itvl, rci_itvm)


plotshape(rci_itvm[1]>=0 and GCDC and is_dc ? rci_itvl[1] :na ,

  style=shape.triangledown, location=location.absolute, color=color.yellow, size=size.tiny, title="DC", text="DC",textcolor=color.yellow)

plotshape(rci_itvm[1]<=0 and GCDC and is_gc ? rci_itvl[1] :na ,

  style=shape.triangleup, location=location.absolute, color=color.green, size=size.tiny, title="GC", text="GC",textcolor=color.green)


plotshape(rci_itvm[1]>=upperband and rci_itvm<upperband and HiLow ? upperband : na ,

  offset=-1,  location=location.absolute, style=shape.xcross, color=color.yellow,  size=size.tiny, title="中期", text="80",textcolor=color.yellow)

plotshape(rci_itvl[1]>=upperband and rci_itvl<upperband and HiLow ? upperband : na  ,

  offset=-1,  location=location.absolute, style=shape.xcross, color=color.blue,  size=size.tiny, title="長期", text="80",textcolor=color.blue)


plotshape(rci_itvm[1]<=lowerband and rci_itvm>lowerband and HiLow ? lowerband : na  ,

  offset=-1,  location=location.absolute, style=shape.xcross, color=color.yellow,  size=size.tiny, title="中期", text="-80",textcolor=color.yellow)

plotshape(rci_itvl[1]<=lowerband and rci_itvl>lowerband and HiLow ? lowerband : na  ,

  offset=-1,  location=location.absolute, style=shape.xcross, color=color.blue,  size=size.tiny, title="長期", text="-80",textcolor=color.blue)


plotshape((rci_itvl[1]<0 and rci_itvl>=0 and HiLow) or

  (rci_itvl[1]>0 and rci_itvl<=0 and HiLow ) ? 0 : na,

  location=location.absolute , style=shape.circle, color=color.blue, size=size.tiny, title="長期0")


//短期線押し目

plotshape(rci_itvl[1]>=30  and rci_itvm[1]>=0 and

  rci_itvs[2] >= request.security(syminfo.tickerid, IptPeriod, rci(itvs)[1]) and rci_itvs[1] < rci_itvs and

  rci_itvs[1] < -30 and push_mark ?

  rci_itvs[1] :na ,

  style=shape.triangleup, location=location.absolute, color=color.red, size=size.tiny, title="押目", textcolor=color.red,offset=-1)

//短期線押し目

plotshape(rci_itvm[1]<=0 and

  rci_itvs[2] <= request.security(syminfo.tickerid, IptPeriod, rci(itvs)[1]) and rci_itvs[1] > rci_itvs and

  rci_itvs[1] > 30 and push_mark ?

  rci_itvs[1] :na ,

  style=shape.triangledown, location=location.absolute, color=color.red, size=size.tiny, title="押目",textcolor=color.red,offset=-1)



// 信頼度計測 正弦波を10地点で観測して、個数から標準偏差を求める

var int[] array_s = array.new_int(10,0) // length 足中の RCI上値基準線 ^2 (80なら64、70なら49)の越境回数、ゼロの越境回数から分散度合を求める

var int[] array_m = array.new_int(10,0)

var int[] array_l = array.new_int(10,0)



// ▼ ▼ ▼ ▼ RCI-S

if rci_itvs > 0 and rci_itvs[1] <= 0 and last_bar_index - bar_index < length

    array.set(array_s , 0 , array.get(array_s, 0) + 1)

if rci_itvs > upperband * upperband / 100 and rci_itvs[1] <= upperband * upperband / 100  and last_bar_index - bar_index < length

    array.set(array_s , 1 , array.get(array_s, 1) + 1)

if rci_itvs > upperband  / 100 and rci_itvs[1] <= upperband  / 100  and last_bar_index - bar_index < length

    array.set(array_s , 2 , array.get(array_s, 2) + 1)

if rci_itvs < upperband  / 100 and rci_itvs[1] >= upperband  / 100  and last_bar_index - bar_index < length

    array.set(array_s , 3 , array.get(array_s, 3) + 1)

if rci_itvs < upperband * upperband / 100 and rci_itvs[1] >= upperband * upperband / 100  and last_bar_index - bar_index < length

    array.set(array_s , 4 , array.get(array_s, 4) + 1)

if rci_itvs < 0 and rci_itvs[1] >= 0 and last_bar_index - bar_index < length

    array.set(array_s , 5 , array.get(array_s, 5) + 1)

if rci_itvs < lowerband * lowerband / -100 and rci_itvs[1] >= lowerband * lowerband / -100  and last_bar_index - bar_index < length

    array.set(array_s , 6 , array.get(array_s, 6) + 1)

if rci_itvs < lowerband  / -100 and rci_itvs[1] >= lowerband  / -100  and last_bar_index - bar_index < length

    array.set(array_s , 7 , array.get(array_s, 7) + 1)

if rci_itvs > lowerband  / -100 and rci_itvs[1] <= lowerband  / -100  and last_bar_index - bar_index < length

    array.set(array_s , 8 , array.get(array_s, 8) + 1)

if rci_itvs > lowerband * lowerband / -100 and rci_itvs[1] <= lowerband * lowerband / -100  and last_bar_index - bar_index < length

    array.set(array_s , 9 , array.get(array_s, 9) + 1)


// ▼ ▼ ▼ ▼ RCI-M

if rci_itvm > 0 and rci_itvm[1] <= 0 and last_bar_index - bar_index < length

    array.set(array_m , 0 , array.get(array_m, 0) + 1)

if rci_itvm > upperband * upperband / 100 and rci_itvm[1] <= upperband * upperband / 100  and last_bar_index - bar_index < length

    array.set(array_m , 1 , array.get(array_m, 1) + 1)

if rci_itvm > upperband  / 100 and rci_itvm[1] <= upperband  / 100  and last_bar_index - bar_index < length

    array.set(array_m , 2 , array.get(array_m, 2) + 1)

if rci_itvm < upperband  / 100 and rci_itvm[1] >= upperband  / 100  and last_bar_index - bar_index < length

    array.set(array_m , 3 , array.get(array_m, 3) + 1)

if rci_itvm < upperband * upperband / 100 and rci_itvm[1] >= upperband * upperband / 100  and last_bar_index - bar_index < length

    array.set(array_m , 4 , array.get(array_m, 4) + 1)

if rci_itvm < 0 and rci_itvm[1] >= 0 and last_bar_index - bar_index < length

    array.set(array_m , 5 , array.get(array_m, 5) + 1)

if rci_itvm < lowerband * lowerband / -100 and rci_itvm[1] >= lowerband * lowerband / -100  and last_bar_index - bar_index < length

    array.set(array_m , 6 , array.get(array_m, 6) + 1)

if rci_itvm < lowerband  / -100 and rci_itvm[1] >= lowerband  / -100  and last_bar_index - bar_index < length

    array.set(array_m , 7 , array.get(array_m, 7) + 1)

if rci_itvm > lowerband  / -100 and rci_itvm[1] <= lowerband  / -100  and last_bar_index - bar_index < length

    array.set(array_m , 8 , array.get(array_m, 8) + 1)

if rci_itvm > lowerband * lowerband / -100 and rci_itvm[1] <= lowerband * lowerband / -100  and last_bar_index - bar_index < length

    array.set(array_m , 9 , array.get(array_m, 9) + 1)


// ▼ ▼ ▼ ▼ RCI-L

if rci_itvl > 0 and rci_itvl[1] <= 0 and last_bar_index - bar_index < length

    array.set(array_l , 0 , array.get(array_l, 0) + 1)

if rci_itvl > upperband * upperband / 100 and rci_itvl[1] <= upperband * upperband / 100  and last_bar_index - bar_index < length

    array.set(array_l , 1 , array.get(array_l, 1) + 1)

if rci_itvl > upperband  / 100 and rci_itvl[1] <= upperband  / 100  and last_bar_index - bar_index < length

    array.set(array_l , 2 , array.get(array_l, 2) + 1)

if rci_itvl < upperband  / 100 and rci_itvl[1] >= upperband  / 100  and last_bar_index - bar_index < length

    array.set(array_l , 3 , array.get(array_l, 3) + 1)

if rci_itvl < upperband * upperband / 100 and rci_itvl[1] >= upperband * upperband / 100  and last_bar_index - bar_index < length

    array.set(array_l , 4 , array.get(array_l, 4) + 1)

if rci_itvl < 0 and rci_itvl[1] >= 0 and last_bar_index - bar_index < length

    array.set(array_l , 5 , array.get(array_l, 5) + 1)

if rci_itvl < lowerband * lowerband / -100 and rci_itvl[1] >= lowerband * lowerband / -100  and last_bar_index - bar_index < length

    array.set(array_l , 6 , array.get(array_l, 6) + 1)

if rci_itvl < lowerband  / -100 and rci_itvl[1] >= lowerband  / -100  and last_bar_index - bar_index < length

    array.set(array_l , 7 , array.get(array_l, 7) + 1)

if rci_itvl > lowerband  / -100 and rci_itvl[1] <= lowerband  / -100  and last_bar_index - bar_index < length

    array.set(array_l , 8 , array.get(array_l, 8) + 1)

if rci_itvl > lowerband * lowerband / -100 and rci_itvl[1] <= lowerband * lowerband / -100  and last_bar_index - bar_index < length

    array.set(array_l , 9 , array.get(array_l, 9) + 1)


//右上にマルチタイムの表示

var table mainTrending = table.new(position.top_right, 1, 3, border_width=1)

strtime = timeframe.period =="D" ? "1Day": timeframe.period =="W" ? "1Week"  : timeframe.period =="M" ? "1Mon" : timeframe.period + "min"

str_cycle_s = timeframe.period =="D" ? str.tostring(length/array.avg(array_s), "#.#")  + "Day": timeframe.period =="W" ? str.tostring(length/array.avg(array_s), "#.#")  + "Week"  :

  timeframe.period =="M" ? str.tostring(length/array.avg(array_s), "#.#")  + "Mon" :

  str.tostring(int((time-time[1])*length/array.avg(array_s)/1000/60/60), "#時間") + str.tostring((((time-time[1])*length/array.avg(array_s)/1000/60)%60), "#.#分")

str_cycle_m = timeframe.period =="D" ? str.tostring(length/array.avg(array_m), "#.#")  + "Day": timeframe.period =="W" ? str.tostring(length/array.avg(array_m), "#.#")  + "Week"  :

  timeframe.period =="M" ? str.tostring(length/array.avg(array_m), "#.#")  + "Mon" :

  str.tostring(int((time-time[1])*length/array.avg(array_m)/1000/60/60), "#時間") + str.tostring((((time-time[1])*length/array.avg(array_m)/1000/60)%60), "#.#分")

str_cycle_l = timeframe.period =="D" ? str.tostring(length/array.avg(array_l), "#.#")  + "Day": timeframe.period =="W" ? str.tostring(length/array.avg(array_l), "#.#")  + "Week"  :

  timeframe.period =="M" ? str.tostring(length/array.avg(array_l), "#.#")  + "Mon" :

  str.tostring(int((time-time[1])*length/array.avg(array_l)/1000/60/60), "#時間") + str.tostring((((time-time[1])*length/array.avg(array_l)/1000/60)%60), "#.#分")


Period_txt=

  IptPeriod=="1D" ? "MT:1Day":

  IptPeriod=="1W"? "MT:1Week":

  IptPeriod=="1M" ? "MT:1mon":

  IptPeriod=="" ? "MT:" + strtime:

             "MT:"+IptPeriod+"min"

             

str_cycletime_s=

  IptPeriod=="1D" ? str.tostring(length/array.avg(array_s), "#.#")  + "Day":

  IptPeriod=="1W" ? str.tostring(length/array.avg(array_s), "#.#")  + "Week":

  IptPeriod=="1M" ? str.tostring(length/array.avg(array_s), "#.#") + "Mon" :

  IptPeriod=="" ? str_cycle_s:

             str.tostring(length/array.avg(array_s), "#.#") +"×"+IptPeriod +"min"

str_cycletime_m=

  IptPeriod=="1D" ? str.tostring(length/array.avg(array_m), "#.#")  + "Day":

  IptPeriod=="1W" ? str.tostring(length/array.avg(array_m), "#.#")  + "Week":

  IptPeriod=="1M" ? str.tostring(length/array.avg(array_m), "#.#") + "Mon" :

  IptPeriod=="" ? str_cycle_m:

             str.tostring(length/array.avg(array_m), "#.#") +"×"+IptPeriod +"min"

str_cycletime_l=

  IptPeriod=="1D" ? str.tostring(length/array.avg(array_l), "#.#")  + "Day":

  IptPeriod=="1W" ? str.tostring(length/array.avg(array_l), "#.#")  + "Week":

  IptPeriod=="1M" ? str.tostring(length/array.avg(array_l), "#.#") + "Mon" :

  IptPeriod=="" ? str_cycle_l:

             str.tostring(length/array.avg(array_l), "#.#") +"×"+IptPeriod +"min"

 

table.cell(mainTrending, 0, 0,Period_txt,

  text_color=color.new(color.white,  transp = 50),

  bgcolor=color.new(color.black, 80),

  text_halign=text.align_right,

  text_size=size.small

  )


table.cell(mainTrending, 0, 1,

  "RCI-M : " +  str.tostring(rci_itvm, "#.#") +" / S : " + str.tostring(rci_itvs, "#.#") ,

  text_color=color.new(color.white,  transp = 20),

  bgcolor=color.new(color.black, 80),

  text_halign=text.align_right,

  text_size=size.small

  )

//array.covariance(array_s,array_m)/(array.stdev(array_s)*array.stdev(array_m)) 共分散 相関係数

table.cell(mainTrending, 0, 2,

  last_bar_index - bar_index < length ? "RCI 信頼度 : " +

  str.tostring((1-array.stdev(array_s)/array.avg(array_s))*(1-array.stdev(array_m)/array.avg(array_m))*100, "#.#") + " %": na ,

  text_color=color.new(color.white,  transp = 20),

  bgcolor=color.new(color.black, 80),

  text_halign=text.align_right,

  text_size=size.small,

  tooltip=str.tostring(str.format_time(time[length], "M/d H:mm (E)", syminfo.timezone)) +  " (" + "サンプル "+ str.tostring(length) + ")  " + "\n" +

  "90.25点以上はサイクル性信用あり" +  "\n" +

  "46.24点以下は強いトレンド出てるはず" +  "\n" +  "\n" +

  "(1-" + str.tostring(array.stdev(array_s)/array.avg(array_s), "#.##") +") × (1-"+str.tostring(array.stdev(array_m)/array.avg(array_m), "#.##")  +  ") ×100  \n" +

  "周期的評価です(長期線はサンプル長さの参照用)、RCIの性能自体の評価ではないです"+ "\n" +

  "0 - 64 - 80 - 80 - 64 - 0 - ▼64 - ▼80 ▼80 ▼64 の正弦波と仮定したサンプリング個数" + "\n"+ "\n" +

  "RCI-S 標準偏差:" + str.tostring(array.stdev(array_s), "#.#") + "/ 平均:" + str.tostring(array.avg(array_s), "#.#") + " :" + str.tostring(array.stdev(array_s)/array.avg(array_s), "#.###") + "\n" +

  str.tostring(array.get(array_s, 0)) +"/"+

  str.tostring(array.get(array_s, 1)) +"/"+  str.tostring(array.get(array_s, 2))  +"/"+  str.tostring(array.get(array_s, 3)) +"/"+

  str.tostring(array.get(array_s, 4)) +"/"+  str.tostring(array.get(array_s, 5)) +"/"+  str.tostring(array.get(array_s, 6)) +"/"+

  str.tostring(array.get(array_s, 7)) +"/"+  str.tostring(array.get(array_s, 8)) +"/"+  str.tostring(array.get(array_s, 9)) + "\n" +

  "短期サイクル " + str_cycletime_s + "\n" + "\n" +


  "RCI-M 標準偏差:" + str.tostring(array.stdev(array_m), "#.#") + "/ 平均:" + str.tostring(array.avg(array_m), "#.#") + " :" + str.tostring(array.stdev(array_m)/array.avg(array_m), "#.###") + "\n" +

  str.tostring(array.get(array_m, 0)) +"/"+

  str.tostring(array.get(array_m, 1)) +"/"+  str.tostring(array.get(array_m, 2))  +"/"+  str.tostring(array.get(array_m, 3)) +"/"+

  str.tostring(array.get(array_m, 4)) +"/"+  str.tostring(array.get(array_m, 5)) +"/"+  str.tostring(array.get(array_m, 6)) +"/"+

  str.tostring(array.get(array_m, 7)) +"/"+  str.tostring(array.get(array_m, 8)) +"/"+  str.tostring(array.get(array_m, 9)) + "\n" +

  "中期サイクル " + str_cycletime_m + "\n" + "\n" +


  "RCI-L 標準偏差:" + str.tostring(array.stdev(array_l), "#.#") + "/ 平均:" + str.tostring(array.avg(array_l), "#.#")  + " :" + str.tostring(array.stdev(array_l)/array.avg(array_l), "#.###") + "\n" +

  str.tostring(array.get(array_l, 0)) +"/"+

  str.tostring(array.get(array_l, 1)) +"/"+  str.tostring(array.get(array_l, 2))  +"/"+  str.tostring(array.get(array_l, 3)) +"/"+

  str.tostring(array.get(array_l, 4)) +"/"+  str.tostring(array.get(array_l, 5)) +"/"+  str.tostring(array.get(array_l, 6)) +"/"+

  str.tostring(array.get(array_l, 7)) +"/"+  str.tostring(array.get(array_l, 8)) +"/"+  str.tostring(array.get(array_l, 9)) + "\n" +

  "長期サイクル " + str_cycletime_l

  )



// 偏差ライン

var line line_s_center_up = na

var line line_s_center_down = na

var line line_s_up = na

var line line_s_down = na

var line line_m_center_up = na

var line line_m_center_down = na

var line line_m_up = na

var line line_m_down = na

var line line_l = na

var line line_l_center = na



// ▼  ▼  ▼  RCI-S Line

if s_cycle and rci_itvs < 80 and rci_itvs[1] >= 80 and last_bar_index - bar_index < length - length / array.avg(array_s)

    bbs = length / array.avg(array_s) * array.stdev(array_s)/array.avg(array_s)


    line_s_up := line.new(bar_index -1 + math.round(length / array.avg(array_s) - s_bb * bbs), 92,

      bar_index - 1  +  math.round(length / array.avg(array_s) + s_bb * bbs ),92, xloc=xloc.bar_index , style=line.style_dotted,color =color.red, width =2,extend=extend.none)

    line_s_down := line.new(bar_index -1 + math.round(length / array.avg(array_s) * 0.5 - s_bb * bbs ), -92,

      bar_index - 1  + math.round(length / array.avg(array_s) * 0.5 + s_bb * bbs ) ,-92, xloc=xloc.bar_index , style=line.style_dotted,color =color.red, width =2,extend=extend.none)

    line_s_center_up := line.new(bar_index -1 + math.round(length / array.avg(array_s)) -1, 90,

      bar_index - 1  + math.round(length / array.avg(array_s)) +1,95, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.red, width =3,extend=extend.none)

    line_s_center_down := line.new(bar_index -1 + math.round(length / array.avg(array_s) * 0.5) -1, -90,

      bar_index - 1  + math.round(length / array.avg(array_s) * 0.5) +1,-95, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.red, width =3,extend=extend.none)

     

    line.delete(line_s_up[1])

    line.delete(line_s_down[1])

    line.delete(line_s_center_up[1])

    line.delete(line_s_center_down[1])


if s_cycle and rci_itvs > -80 and rci_itvs[1] <= -80 and last_bar_index - bar_index < length - length / array.avg(array_s)

    bbs = length / array.avg(array_s) * array.stdev(array_s)/array.avg(array_s)


    line_s_up := line.new(bar_index -1 + math.round(length / array.avg(array_s) - s_bb * bbs), -92,

      bar_index - 1  +  math.round(length / array.avg(array_s) + s_bb * bbs ),-92, xloc=xloc.bar_index , style=line.style_dotted,color =color.red, width =2,extend=extend.none)

    line_s_down := line.new(bar_index -1 + math.round(length / array.avg(array_s) * 0.5 - s_bb * bbs ), 92,

      bar_index - 1  + math.round(length / array.avg(array_s) * 0.5 + s_bb * bbs ) ,92, xloc=xloc.bar_index , style=line.style_dotted,color =color.red, width =2,extend=extend.none)

    line_s_center_up := line.new(bar_index -1 + math.round(length / array.avg(array_s)) -1, -90,

      bar_index - 1  + math.round(length / array.avg(array_s)) +1,-95, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.red, width =3,extend=extend.none)

    line_s_center_down := line.new(bar_index -1 + math.round(length / array.avg(array_s) * 0.5) -1, 90,

      bar_index - 1  + math.round(length / array.avg(array_s) * 0.5) +1,95, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.red, width =3,extend=extend.none)

     

    line.delete(line_s_up[1])

    line.delete(line_s_down[1])

    line.delete(line_s_center_up[1])

    line.delete(line_s_center_down[1])


// ▼  ▼  ▼  RCI-M Line

if m_cycle and rci_itvm < 80 and rci_itvm[1] >= 80 and last_bar_index - bar_index < length - length / array.avg(array_m)

    bbm = length / array.avg(array_m) * array.stdev(array_m)/array.avg(array_m)


    line_m_up := line.new(bar_index -1 + math.round(length / array.avg(array_m) - m_bb * bbm), 85,

      bar_index - 1  +  math.round(length / array.avg(array_m) + m_bb * bbm ),85, xloc=xloc.bar_index , style=line.style_dotted,color =color.yellow, width =2,extend=extend.none)

    line_m_down := line.new(bar_index -1 + math.round(length / array.avg(array_m) * 0.5 - m_bb * bbm ), -85,

      bar_index - 1  + math.round(length / array.avg(array_m) * 0.5 + m_bb * bbm ) ,-85, xloc=xloc.bar_index , style=line.style_dotted,color =color.yellow, width =2,extend=extend.none)

    line_m_center_up := line.new(bar_index -1 + math.round(length / array.avg(array_m)) -1, 82,

      bar_index - 1  + math.round(length / array.avg(array_m)) +1,88, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.yellow, width =3,extend=extend.none)

    line_m_center_down := line.new(bar_index -1 + math.round(length / array.avg(array_m) * 0.5) -1, -82,

      bar_index - 1  + math.round(length / array.avg(array_m) * 0.5) +1,-88, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.yellow, width =3,extend=extend.none)

     

    line.delete(line_m_up[1])

    line.delete(line_m_down[1])

    line.delete(line_m_center_up[1])

    line.delete(line_m_center_down[1])


if m_cycle and rci_itvm > -80 and rci_itvm[1] <= -80 and last_bar_index - bar_index < length - length / array.avg(array_m)

    bbm = length / array.avg(array_m) * array.stdev(array_m)/array.avg(array_m)


    line_m_up := line.new(bar_index -1 + math.round(length / array.avg(array_m) - m_bb * bbm), -85,

      bar_index - 1  +  math.round(length / array.avg(array_m) + m_bb * bbm ),-85, xloc=xloc.bar_index , style=line.style_dotted,color =color.yellow, width =2,extend=extend.none)

    line_m_down := line.new(bar_index -1 + math.round(length / array.avg(array_m) * 0.5 - m_bb * bbm ), 85,

      bar_index - 1  + math.round(length / array.avg(array_m) * 0.5 + m_bb * bbm ) ,85, xloc=xloc.bar_index , style=line.style_dotted,color =color.yellow, width =2,extend=extend.none)

    line_m_center_up := line.new(bar_index -1 + math.round(length / array.avg(array_m)) -1, -82,

      bar_index - 1  + math.round(length / array.avg(array_m)) +1,-88, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.yellow, width =3,extend=extend.none)

    line_m_center_down := line.new(bar_index -1 + math.round(length / array.avg(array_m) * 0.5) -1, 82,

      bar_index - 1  + math.round(length / array.avg(array_m) * 0.5) +1,88, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.yellow, width =3,extend=extend.none)

     

    line.delete(line_m_up[1])

    line.delete(line_m_down[1])

    line.delete(line_m_center_up[1])

    line.delete(line_m_center_down[1])


// ▼  ▼  ▼  RCI-L Line

if l_cycle and ta.cross(rci_itvl , 0) and last_bar_index - bar_index < length - length / array.avg(array_l)

    bbl = length / array.avg(array_l) * array.stdev(array_l)/array.avg(array_l)


    line_l := line.new(bar_index -1 + math.round(length / array.avg(array_l) - l_bb * bbl), 0,

      bar_index - 1  +  math.round(length / array.avg(array_l) + l_bb * bbl ),0, xloc=xloc.bar_index , style=line.style_dotted,color =color.blue, width =2,extend=extend.none)

    line_l_center := line.new(bar_index -1 + math.round(length / array.avg(array_l)) -1, 1,

      bar_index - 1  + math.round(length / array.avg(array_l)) +1,-1, xloc=xloc.bar_index , style=line.style_arrow_both,color =color.blue, width =3,extend=extend.none)

     

    line.delete(line_l[1])

    line.delete(line_l_center[1])

この記事が気に入ったらサポートをしてみませんか?