Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
- // © yatrader2
- //@version=4
- study("autocorrelation_plot", max_bars_back=360)
- src_in=input(close)
- c_len=input(defval=250, minval=10, maxval=500,title="correlation length")
- a_len_min=input(defval=1, minval=1, maxval=220, title="Min lag for autocorrelation")-1
- a_len=input(defval=55, minval=1, maxval=55, title="Max delta over min lag for autocorrelation")
- a_len_max=a_len_min+a_len
- override_src_with_test_signal=false//input(false)
- plot_test_signal=false//input(false)
- period=43//input(43)
- src = override_src_with_test_signal?5*sin((1/period)*bar_index*4*asin(1))+sin(bar_index):src_in
- plot(plot_test_signal and override_src_with_test_signal?src-10:na, title="Test Signal", color=color.red)
- plot(plot_test_signal and override_src_with_test_signal?-10:na, title="Test Signal Zero", color=color.gray)
- offset_plot=input(true)
- len(_min,_max,_i)=>
- out = _min+_i
- out := out > _max ? na: out
- // Set up lengths to test by default 1 to 55, but can be 56 to 110 or whatever
- var l1=len(a_len_min,a_len_max,1), var l2=len(a_len_min,a_len_max,2),
- var l3=len(a_len_min,a_len_max,3), var l4=len(a_len_min,a_len_max,4),
- var l5=len(a_len_min,a_len_max,5), var l6=len(a_len_min,a_len_max,6),
- var l7=len(a_len_min,a_len_max,7), var l8=len(a_len_min,a_len_max,8),
- var l9=len(a_len_min,a_len_max,9), var l10=len(a_len_min,a_len_max,10),
- var l11=len(a_len_min,a_len_max,11), var l12=len(a_len_min,a_len_max,12),
- var l13=len(a_len_min,a_len_max,13), var l14=len(a_len_min,a_len_max,14),
- var l15=len(a_len_min,a_len_max,15), var l16=len(a_len_min,a_len_max,16),
- var l17=len(a_len_min,a_len_max,17), var l18=len(a_len_min,a_len_max,18),
- var l19=len(a_len_min,a_len_max,19), var l20=len(a_len_min,a_len_max,20),
- var l21=len(a_len_min,a_len_max,21), var l22=len(a_len_min,a_len_max,22),
- var l23=len(a_len_min,a_len_max,23), var l24=len(a_len_min,a_len_max,24),
- var l25=len(a_len_min,a_len_max,25), var l26=len(a_len_min,a_len_max,26),
- var l27=len(a_len_min,a_len_max,27), var l28=len(a_len_min,a_len_max,28),
- var l29=len(a_len_min,a_len_max,29), var l30=len(a_len_min,a_len_max,30),
- var l31=len(a_len_min,a_len_max,31), var l32=len(a_len_min,a_len_max,32),
- var l33=len(a_len_min,a_len_max,33), var l34=len(a_len_min,a_len_max,34),
- var l35=len(a_len_min,a_len_max,35), var l36=len(a_len_min,a_len_max,36),
- var l37=len(a_len_min,a_len_max,37), var l38=len(a_len_min,a_len_max,38),
- var l39=len(a_len_min,a_len_max,39), var l40=len(a_len_min,a_len_max,40),
- var l41=len(a_len_min,a_len_max,41), var l42=len(a_len_min,a_len_max,42),
- var l43=len(a_len_min,a_len_max,43), var l44=len(a_len_min,a_len_max,44),
- var l45=len(a_len_min,a_len_max,45), var l46=len(a_len_min,a_len_max,46),
- var l47=len(a_len_min,a_len_max,47), var l48=len(a_len_min,a_len_max,48),
- var l49=len(a_len_min,a_len_max,49), var l50=len(a_len_min,a_len_max,50),
- var l51=len(a_len_min,a_len_max,51), var l52=len(a_len_min,a_len_max,52),
- var l53=len(a_len_min,a_len_max,53), var l54=len(a_len_min,a_len_max,54),
- var l55=len(a_len_min,a_len_max,55)
- l(i)=>
- i==1?l1: i==2?l2: i==3?l3: i==4?l4: i==5?l5: i==6?l6: i==7?l7:
- i==8?l8: i==9?l9: i==10?l10: i==11?l11: i==12?l12: i==13?l13:
- i==14?l14: i==15?l15: i==16?l16: i==17?l17: i==18?l18: i==19?l19:
- i==20?l20: i==21?l21: i==22?l22: i==23?l23: i==24?l24: i==25?l25:
- i==26?l26: i==27?l27: i==28?l28: i==29?l29: i==30?l30: i==31?l31:
- i==32?l32: i==33?l33: i==34?l34: i==35?l35: i==36?l36: i==37?l37:
- i==38?l38: i==39?l39: i==40?l40: i==41?l41: i==42?l42: i==43?l43:
- i==44?l44: i==45?l45: i==46?l46: i==47?l47: i==48?l48: i==49?l49:
- i==50?l50: i==51?l51: i==52?l52: i==53?l53: i==54?l54: i==55?l55:
- na
- // Calculate correletion by lag
- y1=not na(l1)?correlation(src,src[l1],c_len):na
- y2=not na(l2)?correlation(src,src[l2],c_len):na
- y3=not na(l3)?correlation(src,src[l3],c_len):na
- y4=not na(l4)?correlation(src,src[l4],c_len):na
- y5=not na(l5)?correlation(src,src[l5],c_len):na
- y6=not na(l6)?correlation(src,src[l6],c_len):na
- y7=not na(l7)?correlation(src,src[l7],c_len):na
- y8=not na(l8)?correlation(src,src[l8],c_len):na
- y9=not na(l9)?correlation(src,src[l9],c_len):na
- y10=not na(l10)?correlation(src,src[l10],c_len):na
- y11=not na(l11)?correlation(src,src[l11],c_len):na
- y12=not na(l12)?correlation(src,src[l12],c_len):na
- y13=not na(l13)?correlation(src,src[l13],c_len):na
- y14=not na(l14)?correlation(src,src[l14],c_len):na
- y15=not na(l15)?correlation(src,src[l15],c_len):na
- y16=not na(l16)?correlation(src,src[l16],c_len):na
- y17=not na(l17)?correlation(src,src[l17],c_len):na
- y18=not na(l18)?correlation(src,src[l18],c_len):na
- y19=not na(l19)?correlation(src,src[l19],c_len):na
- y20=not na(l20)?correlation(src,src[l20],c_len):na
- y21=not na(l21)?correlation(src,src[l21],c_len):na
- y22=not na(l22)?correlation(src,src[l22],c_len):na
- y23=not na(l23)?correlation(src,src[l23],c_len):na
- y24=not na(l24)?correlation(src,src[l24],c_len):na
- y25=not na(l25)?correlation(src,src[l25],c_len):na
- y26=not na(l26)?correlation(src,src[l26],c_len):na
- y27=not na(l27)?correlation(src,src[l27],c_len):na
- y28=not na(l28)?correlation(src,src[l28],c_len):na
- y29=not na(l29)?correlation(src,src[l29],c_len):na
- y30=not na(l30)?correlation(src,src[l30],c_len):na
- y31=not na(l31)?correlation(src,src[l31],c_len):na
- y32=not na(l32)?correlation(src,src[l32],c_len):na
- y33=not na(l33)?correlation(src,src[l33],c_len):na
- y34=not na(l34)?correlation(src,src[l34],c_len):na
- y35=not na(l35)?correlation(src,src[l35],c_len):na
- y36=not na(l36)?correlation(src,src[l36],c_len):na
- y37=not na(l37)?correlation(src,src[l37],c_len):na
- y38=not na(l38)?correlation(src,src[l38],c_len):na
- y39=not na(l39)?correlation(src,src[l39],c_len):na
- y40=not na(l40)?correlation(src,src[l40],c_len):na
- y41=not na(l41)?correlation(src,src[l41],c_len):na
- y42=not na(l42)?correlation(src,src[l42],c_len):na
- y43=not na(l43)?correlation(src,src[l43],c_len):na
- y44=not na(l44)?correlation(src,src[l44],c_len):na
- y45=not na(l45)?correlation(src,src[l45],c_len):na
- y46=not na(l46)?correlation(src,src[l46],c_len):na
- y47=not na(l47)?correlation(src,src[l47],c_len):na
- y48=not na(l48)?correlation(src,src[l48],c_len):na
- y49=not na(l49)?correlation(src,src[l49],c_len):na
- y50=not na(l50)?correlation(src,src[l50],c_len):na
- y51=not na(l51)?correlation(src,src[l51],c_len):na
- y52=not na(l52)?correlation(src,src[l52],c_len):na
- y53=not na(l53)?correlation(src,src[l53],c_len):na
- y54=not na(l54)?correlation(src,src[l54],c_len):na
- y55=not na(l55)?correlation(src,src[l55],c_len):na
- // lookup function to get the values by index
- y(i)=>
- i==1?y1: i==2?y2: i==3?y3: i==4?y4: i==5?y5: i==6?y6: i==7?y7:
- i==8?y8: i==9?y9: i==10?y10: i==11?y11: i==12?y12: i==13?y13:
- i==14?y14: i==15?y15: i==16?y16: i==17?y17: i==18?y18: i==19?y19:
- i==20?y20: i==21?y21: i==22?y22: i==23?y23: i==24?y24: i==25?y25:
- i==26?y26: i==27?y27: i==28?y28: i==29?y29: i==30?y30: i==31?y31:
- i==32?y32: i==33?y33: i==34?y34: i==35?y35: i==36?y36: i==37?y37:
- i==38?y38: i==39?y39: i==40?y40: i==41?y41: i==42?y42: i==43?y43:
- i==44?y44: i==45?y45: i==46?y46: i==47?y47: i==48?y48: i==49?y49:
- i==50?y50: i==51?y51: i==52?y52: i==53?y53: i==54?y54: i==55?y55:
- na
- // Plot the auto correlation plot
- line li = na
- for x=(a_len_max-a_len_min)-1 to 1
- li := line.new(bar_index[x+1+(offset_plot?a_len_min:0)], y(x+1), bar_index[x+(offset_plot?a_len_min:0)], y(x))
- // clean up from last bar's plot
- line.delete(li[1])
- // Add labels so we can read it.
- lb55 = label.new(bar_index[55+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+55), color=color.white,style=label.style_label_up)
- lb50 = label.new(bar_index[50+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+50), color=color.white,style=label.style_label_up)
- lb45 = label.new(bar_index[45+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+45), color=color.white,style=label.style_label_up)
- lb40 = label.new(bar_index[40+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+40), color=color.white,style=label.style_label_up)
- lb35 = label.new(bar_index[35+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+35), color=color.white,style=label.style_label_up)
- lb30 = label.new(bar_index[30+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+30), color=color.white,style=label.style_label_up)
- lb25 = label.new(bar_index[25+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+25), color=color.white,style=label.style_label_up)
- lb20 = label.new(bar_index[20+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+20), color=color.white,style=label.style_label_up)
- lb15 = label.new(bar_index[15+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+15), color=color.white,style=label.style_label_up)
- lb10 = label.new(bar_index[10+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+10), color=color.white,style=label.style_label_up)
- lb05 = label.new(bar_index[5+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+5), color=color.white,style=label.style_label_up)
- lb01 = label.new(bar_index[1+(offset_plot?a_len_min:0)], -1, tostring(a_len_min+1), color=color.white,style=label.style_label_up)
- // So labels are visible
- hline(-2)// So labels show
- // clean up from last bar's plot
- label.delete(lb55[1])
- label.delete(lb50[1])
- label.delete(lb45[1])
- label.delete(lb40[1])
- label.delete(lb35[1])
- label.delete(lb30[1])
- label.delete(lb25[1])
- label.delete(lb20[1])
- label.delete(lb15[1])
- label.delete(lb10[1])
- label.delete(lb05[1])
- label.delete(lb01[1])
Advertisement
Add Comment
Please, Sign In to add comment