[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: EL code for H ?



PureBytes Links

Trading Reference Links

Robert L Roper wrote:
>> Is anybody willing to share his Easy Language (EL) code for calculation
>> of Hurst Exponent (H) ?

The relation between the Hurst exponent and the fractal dimension is
simply D=2-H, where D is the fractal dimension and H is the Hurst
exponent.

I have a method for calculating D, so you can easily get H=2-D from
that.  This is a VBA macro function, but it should be trivial to
port it to EasyLanguage.  I abandoned it a while ago so I never
bothered, but I might do it if I have the time.

I got the algorithm from a technical paper at
http://www.csu.edu.au/ci/vol05/sevcik/sevcik.html if you're
interested in reading up on it.  -Alex


' ************ Program to Calculate Fractal Dimension of Waveforms
'
'See the following article:
'http://www.csu.edu.au/ci/vol05/sevcik/sevcik.html
'"A procedure to Estimate the Fractal Dimension of Waveforms"
' by Carlos Sevcik
' Laboratory on Cellular Neuropharmacology
' Centro de Biofísica y Bioquímica
' Instituto Venezolano de Investigaciones Científicas (IVIC)
' Apartado 21827, Caracas 1020A
' Venezuela.
' Email: csevcik@ ivic.ivic.ve
'
'Arguments:
' xx = Excel range of x values dimension (1 to n, 1 to 1)
'      (the X values would be bar numbers or dates)
' yy = Excel range of y values dimension (1 to n, 1 to 1) (e.g. prices)
'Returns: fractal dimension of the time series

Function fractaldim(xx As Variant, yy As Variant) As Double

Dim n As Integer, i As Integer, lngth As Double, x As Variant, y As Variant
Dim ymax As Double, ymin As Double, xmax As Double, xmin As Double
Dim xscl As Double, yscl As Double
Dim yt As Double, xt As Double, yl As Double, xl As Double
Dim xd As Double, yd As Double

x = xx.Value 'convert Excel range to array
y = yy.Value
n = UBound(x, 1)
xmin = Application.WorksheetFunction.Min(x)
xmax = Application.WorksheetFunction.Max(x)
xscl = xmax - xmin
ymin = Application.WorksheetFunction.Min(y)
ymax = Application.WorksheetFunction.Max(y)
yscl = ymax - ymin
If n < 2 Or ymax = ymin Or xmax = xmin Then
    fractaldim = 1
    Exit Function
End If

' *** calculate length of curve ***
lngth = 0#
yl = (y(1, 1) - ymin) / yscl
xl = (x(1, 1) - xmin) / xscl
For i = 2 To n
    yt = (y(i, 1) - ymin) / yscl
    xt = (x(i, 1) - xmin) / xscl
    If i > 1 Then
        xd = xt - xl: yd = yt - yl
        lngth = lngth + Sqr(xd * xt + yd * yd)
    End If
    xl = xt: yl = yt
Next

fractaldim = 1 + Log(lngth) / Log(2# * (n - 1)) 'Log()=natural log
End Function