unconscious line
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Unjuno
//に皆が相場の動く向きを予想するが相場は、買いたい人が買いたいところで買って売りたい人が売りたいときに売ってということをし続けるとこれは、希望価格の生存時間は、短いと考えるのでこれは移動圧力がその方向に移
//動するので、最終的には、一番意識されていない領域に収束する。
//意識されていない領域を見分けることによって、相場の収束する点がわかるということになる。
//問題は意識されていない領域をどう定義するかである。ここでは、その領域を高値と高値安値と安値を結んだ領域ではない場所と考える。
//@version=5
indicator("unconscious line")
arrybaf = input(10000,title = "arybuf")
var array<float> a = array.new<float>(arrybaf,0)
var array<float> aa = array.new<float>(arrybaf,0)
int count  = 0
array.set(a,count,close[1]-close[2])
//傾きを見て現在の位置における延長した価格帯を見て、線が通っていないところに、しるしをつける。
for int i = 0 to count
    getval = array.get(a,i)
    //この微分値により、現在の価格を求格納する。
    setval = close[count]+(getval*(count-i))
    array.set(aa,i,setval)
///
array.sort(aa)
var float Biggest_difference = 0
var float tempval = 0
tempval := 0
var float tempval2 = 0
tempval2 := 0
Biggest_difference := 0
for int i = 0 to count
    tempval := (array.get(aa,i) - array.get(aa,i+1)) < 0 ? (-1)*(array.get(aa,i) - array.get(aa,i+1)) : (array.get(aa,i) - array.get(aa,i+1))
    if(Biggest_difference < tempval)
        Biggest_difference := tempval
     
var float plotprice1 = 0
var float plotprice2 = 0

for int i = 0 to count
    tempval := (array.get(aa,i) - array.get(aa,i+1)) < 0 ? (-1)*(array.get(aa,i) - array.get(aa,i+1)) : (array.get(aa,i) - array.get(aa,i+1))
    if(tempval == Biggest_difference)
        plotprice1 := array.get(aa,i)
        plotprice2 := array.get(aa,i+1)

///
count += 1
///plot
plot(array.get(aa,0),title = "1",color = color.blue,linewidth = 2)
plot(array.get(aa,count),title = "2",color = color.white,linewidth = 2)
plot(plotprice1,title = "3",color = color.yellow,linewidth = 2)
plot(plotprice2,title = "4",color = color.green,linewidth = 2)
//収束なので、時間がかかるほど、近付く可能性が高くなるので、バーごとにカウントして、値が下抜け又は上抜けした場合に、０に初期化する変数を定義し、数値のみ見れる形で、描画する。
//収束していないバーの数の変数
var int countbarnonconvergence = 0
countbarnonconvergence += 1
if(ta.crossover(high,plotprice1 > plotprice2 ? plotprice2 : plotprice1) or ta.crossunder(low,plotprice1 > plotprice2 ? plotprice1 : plotprice2))
    countbarnonconvergence := 0

plot(countbarnonconvergence,title = "period of nonconcentration",color = color.white,display = display.status_line)
