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])
この記事が気に入ったらサポートをしてみませんか?