xmd79

Accumulated P/C Ratio

Dec 31st, 2022
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 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. // © skiviz
  3.  
  4. //@version=5
  5. //Works in daily, weekly and monthly charts
  6. indicator("Accumulated P/C Ratio")
  7.  
  8. aggregation = input (5, title = "N bars of accumulation")
  9.  
  10. call_vol_lowerTF = request.security("CVOL", '', close)
  11. put_vol_lowerTF = request.security("PVOL", '', close)
  12.  
  13. //call_vol_higherTF & put_vol_higherTF only used for weekly and monthly timeframes
  14. call_vol_higherTF = request.security_lower_tf("CVOL", 'D', close)
  15. put_vol_higherTF = request.security_lower_tf("PVOL",'D',close)
  16.  
  17. higher_timeframe = timeframe.isweekly or timeframe.ismonthly
  18.  
  19. call_vol = higher_timeframe ? array.sum(call_vol_higherTF) : call_vol_lowerTF
  20. put_vol = higher_timeframe ? array.sum(put_vol_higherTF) : put_vol_lowerTF
  21.  
  22.  
  23. float call_agg = 0.0
  24. float put_agg = 0.0
  25.  
  26. for i = 0 to aggregation
  27. call_agg := call_agg + call_vol[i]
  28. put_agg := put_agg + put_vol[i]
  29.  
  30. PCR = put_agg/call_agg //Put Call Ratio
  31.  
  32.  
  33. PCR_array = array.new_float(0)
  34. lookback = input(20, title = "Lookback Period")
  35.  
  36. for i = 0 to lookback
  37. array.push(PCR_array, PCR[i])
  38.  
  39. max = array.max(PCR_array)
  40. min = array.min(PCR_array)
  41.  
  42. diff_max = max - PCR //when this approaches 0, P/C ratio is near max, which is bearish;
  43. diff_min = min - PCR //when this approaches 0, P/C ratio is near min, which is bullish;
  44.  
  45. STDEV_period = input (200, title = "STDEV Period")
  46.  
  47. diffmax_array = array.new_float(0)
  48. diffmin_array = array.new_float(0)
  49.  
  50. for i = 0 to STDEV_period
  51. array.push(diffmax_array, diff_max[i])
  52. array.push(diffmin_array, diff_min[i])
  53.  
  54. diffmax_STDEV = array.stdev(diffmax_array)
  55. diffmin_STDEV = array.stdev(diffmin_array)
  56.  
  57. diffmax_mean = array.avg(diffmax_array)
  58. diffmin_mean =array.avg(diffmin_array)
  59.  
  60. //Color for difference from max
  61. diffmax_in_1stdev = diff_max > diffmax_mean and diff_max < diffmax_mean + diffmax_STDEV
  62. diffmax_in_2stdev = diff_max > diffmax_mean + diffmax_STDEV and diff_max < diffmax_mean + 2*diffmax_STDEV
  63. diffmax_in_3stdev = diff_max > diffmax_mean + 2*diffmax_STDEV and diff_max < diffmax_mean + 3*diffmax_STDEV
  64. diffmax_in_mean = diff_max < diffmax_mean
  65.  
  66. color_max = if diffmax_in_mean
  67. color.new(color.green, 80)
  68. else if diffmax_in_1stdev
  69. color.new(color.green, 60)
  70. else if diffmax_in_2stdev
  71. color.new(color.green, 40)
  72. else if diffmax_in_3stdev
  73. color.new(color.green, 20)
  74. else
  75. color.new(color.green, 0) //Beyond 3 STDEV
  76.  
  77. //Color for difference from min
  78. diffmin_in_1stdev = diff_min < diffmin_mean and diff_min > diffmin_mean - diffmin_STDEV
  79. diffmin_in_2stdev = diff_min < diffmin_mean - diffmin_STDEV and diff_min > diffmin_mean - 2*diffmin_STDEV
  80. diffmin_in_3stdev = diff_min < diffmin_mean - 2*diffmin_STDEV and diff_min > diffmin_mean - 3*diffmin_STDEV
  81. diffmin_in_mean = diff_min > diffmin_mean
  82.  
  83. color_min = if diffmin_in_mean
  84. color.new(color.red, 80)
  85. else if diffmin_in_1stdev
  86. color.new(color.red, 60)
  87. else if diffmin_in_2stdev
  88. color.new(color.red, 40)
  89. else if diffmin_in_3stdev
  90. color.new(color.red, 20)
  91. else
  92. color.new(color.red, 0) //Beyond 3 STDEV
  93.  
  94. plot (diff_max , color=color_max, style = plot.style_columns, title="Diff. From Max")
  95. plot (diff_min , color=color_min, style = plot.style_columns, title="Diff. From Min")
  96.  
  97. total = diff_max + diff_min
  98. plot (total,"Total", color=color.black)
  99.  
Advertisement
Add Comment
Please, Sign In to add comment