xmd79

autocorrelation_plot

Nov 13th, 2022
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.42 KB | None | 0 0
  1. // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
  2. // © yatrader2
  3.  
  4. //@version=4
  5. study("autocorrelation_plot", max_bars_back=360)
  6. src_in=input(close)
  7. c_len=input(defval=250, minval=10, maxval=500,title="correlation length")
  8. a_len_min=input(defval=1, minval=1, maxval=220, title="Min lag for autocorrelation")-1
  9. a_len=input(defval=55, minval=1, maxval=55, title="Max delta over min lag for autocorrelation")
  10. a_len_max=a_len_min+a_len
  11. override_src_with_test_signal=false//input(false)
  12. plot_test_signal=false//input(false)
  13. period=43//input(43)
  14. src = override_src_with_test_signal?5*sin((1/period)*bar_index*4*asin(1))+sin(bar_index):src_in
  15. plot(plot_test_signal and override_src_with_test_signal?src-10:na, title="Test Signal", color=color.red)
  16. plot(plot_test_signal and override_src_with_test_signal?-10:na, title="Test Signal Zero", color=color.gray)
  17. offset_plot=input(true)
  18.  
  19.  
  20. len(_min,_max,_i)=>
  21. out = _min+_i
  22. out := out > _max ? na: out
  23.  
  24. // Set up lengths to test by default 1 to 55, but can be 56 to 110 or whatever
  25. var l1=len(a_len_min,a_len_max,1), var l2=len(a_len_min,a_len_max,2),
  26. var l3=len(a_len_min,a_len_max,3), var l4=len(a_len_min,a_len_max,4),
  27. var l5=len(a_len_min,a_len_max,5), var l6=len(a_len_min,a_len_max,6),
  28. var l7=len(a_len_min,a_len_max,7), var l8=len(a_len_min,a_len_max,8),
  29. var l9=len(a_len_min,a_len_max,9), var l10=len(a_len_min,a_len_max,10),
  30. var l11=len(a_len_min,a_len_max,11), var l12=len(a_len_min,a_len_max,12),
  31. var l13=len(a_len_min,a_len_max,13), var l14=len(a_len_min,a_len_max,14),
  32. var l15=len(a_len_min,a_len_max,15), var l16=len(a_len_min,a_len_max,16),
  33. var l17=len(a_len_min,a_len_max,17), var l18=len(a_len_min,a_len_max,18),
  34. var l19=len(a_len_min,a_len_max,19), var l20=len(a_len_min,a_len_max,20),
  35. var l21=len(a_len_min,a_len_max,21), var l22=len(a_len_min,a_len_max,22),
  36. var l23=len(a_len_min,a_len_max,23), var l24=len(a_len_min,a_len_max,24),
  37. var l25=len(a_len_min,a_len_max,25), var l26=len(a_len_min,a_len_max,26),
  38. var l27=len(a_len_min,a_len_max,27), var l28=len(a_len_min,a_len_max,28),
  39. var l29=len(a_len_min,a_len_max,29), var l30=len(a_len_min,a_len_max,30),
  40. var l31=len(a_len_min,a_len_max,31), var l32=len(a_len_min,a_len_max,32),
  41. var l33=len(a_len_min,a_len_max,33), var l34=len(a_len_min,a_len_max,34),
  42. var l35=len(a_len_min,a_len_max,35), var l36=len(a_len_min,a_len_max,36),
  43. var l37=len(a_len_min,a_len_max,37), var l38=len(a_len_min,a_len_max,38),
  44. var l39=len(a_len_min,a_len_max,39), var l40=len(a_len_min,a_len_max,40),
  45. var l41=len(a_len_min,a_len_max,41), var l42=len(a_len_min,a_len_max,42),
  46. var l43=len(a_len_min,a_len_max,43), var l44=len(a_len_min,a_len_max,44),
  47. var l45=len(a_len_min,a_len_max,45), var l46=len(a_len_min,a_len_max,46),
  48. var l47=len(a_len_min,a_len_max,47), var l48=len(a_len_min,a_len_max,48),
  49. var l49=len(a_len_min,a_len_max,49), var l50=len(a_len_min,a_len_max,50),
  50. var l51=len(a_len_min,a_len_max,51), var l52=len(a_len_min,a_len_max,52),
  51. var l53=len(a_len_min,a_len_max,53), var l54=len(a_len_min,a_len_max,54),
  52. var l55=len(a_len_min,a_len_max,55)
  53.  
  54. l(i)=>
  55. i==1?l1: i==2?l2: i==3?l3: i==4?l4: i==5?l5: i==6?l6: i==7?l7:
  56. i==8?l8: i==9?l9: i==10?l10: i==11?l11: i==12?l12: i==13?l13:
  57. i==14?l14: i==15?l15: i==16?l16: i==17?l17: i==18?l18: i==19?l19:
  58. i==20?l20: i==21?l21: i==22?l22: i==23?l23: i==24?l24: i==25?l25:
  59. i==26?l26: i==27?l27: i==28?l28: i==29?l29: i==30?l30: i==31?l31:
  60. i==32?l32: i==33?l33: i==34?l34: i==35?l35: i==36?l36: i==37?l37:
  61. i==38?l38: i==39?l39: i==40?l40: i==41?l41: i==42?l42: i==43?l43:
  62. i==44?l44: i==45?l45: i==46?l46: i==47?l47: i==48?l48: i==49?l49:
  63. i==50?l50: i==51?l51: i==52?l52: i==53?l53: i==54?l54: i==55?l55:
  64. na
  65.  
  66. // Calculate correletion by lag
  67. y1=not na(l1)?correlation(src,src[l1],c_len):na
  68. y2=not na(l2)?correlation(src,src[l2],c_len):na
  69. y3=not na(l3)?correlation(src,src[l3],c_len):na
  70. y4=not na(l4)?correlation(src,src[l4],c_len):na
  71. y5=not na(l5)?correlation(src,src[l5],c_len):na
  72. y6=not na(l6)?correlation(src,src[l6],c_len):na
  73. y7=not na(l7)?correlation(src,src[l7],c_len):na
  74. y8=not na(l8)?correlation(src,src[l8],c_len):na
  75. y9=not na(l9)?correlation(src,src[l9],c_len):na
  76. y10=not na(l10)?correlation(src,src[l10],c_len):na
  77. y11=not na(l11)?correlation(src,src[l11],c_len):na
  78. y12=not na(l12)?correlation(src,src[l12],c_len):na
  79. y13=not na(l13)?correlation(src,src[l13],c_len):na
  80. y14=not na(l14)?correlation(src,src[l14],c_len):na
  81. y15=not na(l15)?correlation(src,src[l15],c_len):na
  82. y16=not na(l16)?correlation(src,src[l16],c_len):na
  83. y17=not na(l17)?correlation(src,src[l17],c_len):na
  84. y18=not na(l18)?correlation(src,src[l18],c_len):na
  85. y19=not na(l19)?correlation(src,src[l19],c_len):na
  86. y20=not na(l20)?correlation(src,src[l20],c_len):na
  87. y21=not na(l21)?correlation(src,src[l21],c_len):na
  88. y22=not na(l22)?correlation(src,src[l22],c_len):na
  89. y23=not na(l23)?correlation(src,src[l23],c_len):na
  90. y24=not na(l24)?correlation(src,src[l24],c_len):na
  91. y25=not na(l25)?correlation(src,src[l25],c_len):na
  92. y26=not na(l26)?correlation(src,src[l26],c_len):na
  93. y27=not na(l27)?correlation(src,src[l27],c_len):na
  94. y28=not na(l28)?correlation(src,src[l28],c_len):na
  95. y29=not na(l29)?correlation(src,src[l29],c_len):na
  96. y30=not na(l30)?correlation(src,src[l30],c_len):na
  97. y31=not na(l31)?correlation(src,src[l31],c_len):na
  98. y32=not na(l32)?correlation(src,src[l32],c_len):na
  99. y33=not na(l33)?correlation(src,src[l33],c_len):na
  100. y34=not na(l34)?correlation(src,src[l34],c_len):na
  101. y35=not na(l35)?correlation(src,src[l35],c_len):na
  102. y36=not na(l36)?correlation(src,src[l36],c_len):na
  103. y37=not na(l37)?correlation(src,src[l37],c_len):na
  104. y38=not na(l38)?correlation(src,src[l38],c_len):na
  105. y39=not na(l39)?correlation(src,src[l39],c_len):na
  106. y40=not na(l40)?correlation(src,src[l40],c_len):na
  107. y41=not na(l41)?correlation(src,src[l41],c_len):na
  108. y42=not na(l42)?correlation(src,src[l42],c_len):na
  109. y43=not na(l43)?correlation(src,src[l43],c_len):na
  110. y44=not na(l44)?correlation(src,src[l44],c_len):na
  111. y45=not na(l45)?correlation(src,src[l45],c_len):na
  112. y46=not na(l46)?correlation(src,src[l46],c_len):na
  113. y47=not na(l47)?correlation(src,src[l47],c_len):na
  114. y48=not na(l48)?correlation(src,src[l48],c_len):na
  115. y49=not na(l49)?correlation(src,src[l49],c_len):na
  116. y50=not na(l50)?correlation(src,src[l50],c_len):na
  117. y51=not na(l51)?correlation(src,src[l51],c_len):na
  118. y52=not na(l52)?correlation(src,src[l52],c_len):na
  119. y53=not na(l53)?correlation(src,src[l53],c_len):na
  120. y54=not na(l54)?correlation(src,src[l54],c_len):na
  121. y55=not na(l55)?correlation(src,src[l55],c_len):na
  122.  
  123.  
  124. // lookup function to get the values by index
  125. y(i)=>
  126. i==1?y1: i==2?y2: i==3?y3: i==4?y4: i==5?y5: i==6?y6: i==7?y7:
  127. i==8?y8: i==9?y9: i==10?y10: i==11?y11: i==12?y12: i==13?y13:
  128. i==14?y14: i==15?y15: i==16?y16: i==17?y17: i==18?y18: i==19?y19:
  129. i==20?y20: i==21?y21: i==22?y22: i==23?y23: i==24?y24: i==25?y25:
  130. i==26?y26: i==27?y27: i==28?y28: i==29?y29: i==30?y30: i==31?y31:
  131. i==32?y32: i==33?y33: i==34?y34: i==35?y35: i==36?y36: i==37?y37:
  132. i==38?y38: i==39?y39: i==40?y40: i==41?y41: i==42?y42: i==43?y43:
  133. i==44?y44: i==45?y45: i==46?y46: i==47?y47: i==48?y48: i==49?y49:
  134. i==50?y50: i==51?y51: i==52?y52: i==53?y53: i==54?y54: i==55?y55:
  135. na
  136.  
  137. // Plot the auto correlation plot
  138. line li = na
  139. for x=(a_len_max-a_len_min)-1 to 1
  140. 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))
  141.  
  142. // clean up from last bar's plot
  143. line.delete(li[1])
  144.  
  145. // Add labels so we can read it.
  146. 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)
  147. 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)
  148. 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)
  149. 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)
  150. 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)
  151. 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)
  152. 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)
  153. 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)
  154. 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)
  155. 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)
  156. 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)
  157. 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)
  158.  
  159. // So labels are visible
  160. hline(-2)// So labels show
  161.  
  162. // clean up from last bar's plot
  163. label.delete(lb55[1])
  164. label.delete(lb50[1])
  165. label.delete(lb45[1])
  166. label.delete(lb40[1])
  167. label.delete(lb35[1])
  168. label.delete(lb30[1])
  169. label.delete(lb25[1])
  170. label.delete(lb20[1])
  171. label.delete(lb15[1])
  172. label.delete(lb10[1])
  173. label.delete(lb05[1])
  174. label.delete(lb01[1])
  175.  
Advertisement
Add Comment
Please, Sign In to add comment