SHARE
TWEET

hurst

a guest Jul 16th, 2019 87 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //@version=4
  2. study(
  3.      title="Function - Hurst Exponent",
  4.      shorttitle="H",
  5.      overlay=false
  6.      )
  7. //  https://www.financialwisdomforum.org/gummy-stuff/hurst.htm
  8. //  https://robotwealth.com/demystifying-the-hurst-exponent-part-2/
  9. //  another method: https://blog.quantinsti.com/hurst-exponent/
  10. //                  http://analytics-magazine.org/the-hurst-exponent-predictability-of-time-series/
  11. //  original He: http://mosaic.mpi-cbg.de/docs/Racine2011.pdf
  12. //  were:
  13. //      R(n) = range = max(dataset) - min(dataset)
  14. //      S(n) = stdev(dataset)
  15. //      C = arbitrary constant?
  16.  
  17. f_sum(_src, _length)=>
  18.     _length_adjusted = _length < 1 ? 1 : _length
  19.     _sum = 0.0
  20.     for _i = 0 to (_length_adjusted - 1)
  21.         _sum := _sum + _src[_i]
  22.     _return = _sum
  23.  
  24. f_sma(_src, _length)=>
  25.     _length_adjusted = _length < 1 ? 1 : _length
  26.     _sum = 0.0
  27.     for _i = 0 to (_length_adjusted - 1)
  28.         _sum := _sum + _src[_i]
  29.     _return = _sum / _length_adjusted
  30.  
  31. f_stdev(src, len, average) =>
  32.     if false//not barstate.islast
  33.         na
  34.     else
  35.         sumOfSquares = 0.0
  36.         for i = 0 to len - 1
  37.             deltaSrc = src[i] - average
  38.             sumOfSquares := sumOfSquares + deltaSrc * deltaSrc
  39.         sqrt(sumOfSquares / len)
  40.  
  41. f_highest(_src, _length)=>
  42.     _adjusted_length = _length < 1 ? 1 : _length
  43.     _value = _src
  44.     for _i = 0 to (_adjusted_length-1)
  45.         _value := _src[_i] >= _value ? _src[_i] : _value
  46.     _return = _value
  47.  
  48. f_lowest(_src, _length)=>
  49.     _adjusted_length = _length < 1 ? 1 : _length
  50.     _value = _src
  51.     for _i = 0 to (_adjusted_length-1)
  52.         _value := _src[_i] <= _value ? _src[_i] : _value
  53.     _return = _value
  54.  
  55. f_draw_line(_x1, _y1, _x2, _y2, _color, _width)=>
  56.     var line _li = na
  57.     line.delete(_li)
  58.     _li := line.new(
  59.              x1=bar_index[100] + _x1, y1=_y1,
  60.              x2=bar_index[100] + _x2, y2=_y2,
  61.              xloc=xloc.bar_index, extend=extend.none,
  62.              color=_color, style=line.style_solid, width=_width
  63.              )
  64.  
  65. f_hurst_exponent(_src, _length)=>
  66.     _mean = f_sma(_src, _length)
  67.     _dif = _src-_mean
  68.     _sum_of_dif = sum(_dif, _length)
  69.     _h = f_highest(_dif, _length)
  70.     _l = f_lowest(_dif, _length)
  71.     _range = _h - _l
  72.     _s = f_stdev(_src, _length, _mean)
  73.     _rescaled = _range / _s
  74.     _log_r = log(_rescaled)
  75.     _log_n = log(_length)
  76.     _log_r / _log_n
  77.  
  78.  
  79. f_hurst_estimate(_src, _length)=>
  80.     _dif = close - close[_length]
  81.     _mean = cum(abs(_dif)) / (bar_index + 1)
  82.     _delta = _dif - _mean
  83.     _std = sqrt(cum(_delta * _delta) / (bar_index + 1))
  84.     var float _max = na
  85.     var float _min = na
  86.     _max := max(nz(_max, _dif), _dif)
  87.     _min := min(nz(_min, _dif), _dif)
  88.     _r = _max - _min
  89.     _rs = _r / _std
  90.     _log = log(_rs) / log(_length)
  91.  
  92. f_hurst_exponent_m1(_src, _length)=>
  93.     //described here:
  94.     //https://www.financialwisdomforum.org/gummy-stuff/hurst.htm
  95.     //calculate range:
  96.     _mean = f_sma(_src, _length)
  97.     _deviation = _src-_mean
  98.     _sum_of_dev = f_sum(_deviation, _length)
  99.     _h = f_highest(_sum_of_dev, _length)
  100.     _l = f_lowest(_sum_of_dev, _length)
  101.     _range = _h - _l
  102.     //calculate stdev:
  103.     _s = f_stdev(_src, _length, _mean)
  104.     //rescale
  105.     _rescaled = _range / _s
  106.     //log the values
  107.     _log_r = log(_rescaled)
  108.     _log_n = log(_length)
  109.     _log_r / _log_n
  110.  
  111. src = close, length = input(100), step = input(10)
  112.  
  113. he = f_hurst_exponent(close, length)
  114. plot(he, color=color.blue)
  115. he1 = f_hurst_exponent_m1(close, length)
  116. plot(he1, color=color.orange)
  117. plot(linreg(he, 100, 0), color=color.red)
  118.  
  119. he2 = f_hurst_estimate(close, length)
  120. plot(he2, color=color.teal)
  121.  
  122. f_iterate_hurst_exponent(_src, _length, _step)=>
  123.     _text = ""
  124.     _sh = 0.0
  125.     _se = 0.0
  126.     _sh1 = 0.0
  127.     for _i=0 to _length by _step
  128.         _h = f_hurst_exponent(_src, max(1, _i))
  129.         _e = f_hurst_estimate(_src, max(1, _i))
  130.         _h1 = f_hurst_exponent_m1(_src, max(1, _i))
  131.         _sh := _sh + nz(_h, 0.0)
  132.         _se := _se + nz(_e, 0.0)
  133.         _sh1 := _sh1 + nz(_h1, 0.0)
  134.         _text := _text + "\n" + tostring(_i, "#") + " : " + tostring(_h, "#.###") + ": " + tostring(_h1, "#.###") + " : " + tostring(_e, "#.###")
  135.     _sh := _sh / ((1+_length)/step)
  136.     _se := _se / ((1+_length)/step)
  137.     _sh1 := _sh1 / ((1+_length)/step)
  138.     _text := _text + "\n" + "He: " + tostring(_sh, "#.###") + " : " + tostring(_sh1, "#.###") + " : " + tostring(_se, "#.###")
  139.  
  140. tex = "h - : " + tostring(he, "#.###") + " : " + tostring(he1, "#.###") + " : " + tostring(he2, "#.###")
  141. tex := tex + f_iterate_hurst_exponent(close, length, step)
  142. var label _la = na
  143. label.delete(_la)
  144. _la := label.new(
  145.          x= bar_index, y=0.0,
  146.          text=tex, xloc=xloc.bar_index, yloc=yloc.price,
  147.          color=color.new(color.silver, 80), style=label.style_labeldown, textcolor=color.black, size=size.small
  148.          )
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top