以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- 求助:转化代码 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=12299) |
-- 作者:neowang007 -- 发布时间:2012/6/8 10:19:00 -- 求助:转化代码 这是一个HURET指数的代码,请求您: 1、能不能转化成金字塔中能够计算和运行的代码吗? 2、这个是VB代码,这个和金字塔语言的转换的关键是什么呢?
\'This program calculates an estimate of the Hurst coefficient. \'Written by Martin Sewell <martin@martinsewell.com> Sub Hurst() Dim Data() Dim Array1() Dim Array2() Dim Mean Dim Result()
Dim NoOfDataPoints As Integer
Dim NoOfPlottedPoints As Integer Dim PlottedPointNo As Integer
Dim NoOfPeriods As Integer Dim PeriodNo As Integer
Dim N As Integer Dim i As Integer Dim m As Integer Dim logten Dim R Dim S Dim RS Dim SumSquared
logten = Log(10)
\'Delete any previous results Worksheets("Data").Range("C3").Value = Null Worksheets("Data").Range("D:D").Value = Null Worksheets("Data").Range("E:E").Value = Null
\'Get total number of data points NoOfDataPoints = Worksheets("Data").Range("C1").Value
ReDim Data(NoOfDataPoints)
\'Get data, ignoring any spaces i = 1 counter = 1 Do While counter <= NoOfDataPoints Set curCell = Worksheets("Data").Cells(i, 1) If Application.WorksheetFunction.IsNumber(curCell.Value) Then Data(counter) = curCell.Value counter = counter + 1 End If i = i + 1 Loop
NoOfPlottedPoints = NoOfDataPoints - 2 ReDim Result(NoOfPlottedPoints, 2)
\'Begin main loop For N = 3 To NoOfDataPoints
totalR = 0 totalS = 0
NoOfPeriods = NoOfDataPoints - N + 1
For PeriodNo = 1 To NoOfPeriods ReDim Array1(N) ReDim Array2(N)
For i = 1 To N Array1(i) = Data((PeriodNo - 1) + i) Array2(i) = 0 Next i Summ = 0 SumSquared = 0 For i = 1 To N Summ = Summ + Array1(i) SumSquared = SumSquared + ((Array1(i)) * (Array1(i)))
Next i Mean = Summ / N \'STDEV \'S = Sqr((SumSquared - (Summ * Summ) / N) / (N - 1))
\'STDEVP S = Sqr((SumSquared - (Summ * Summ) / N) / N)
For i = 1 To N Array1(i) = Array1(i) - Mean Next i
For i = 1 To N For j = 1 To i Array2(i) = Array2(i) + Array1(j) Next j Next i
Maxi = Array2(1) Mini = Array2(1) For i = 1 To N If Array2(i) > Maxi Then Maxi = Array2(i) If Array2(i) < Mini Then Mini = Array2(i) Next i
R = Maxi - Mini totalR = totalR + R totalS = totalS + S
Next PeriodNo
R = totalR / NoOfPeriods S = totalS / NoOfPeriods RS = R / S
PlottedPointNo = N - 2 Result(PlottedPointNo, 1) = (Log(N)) / logten Result(PlottedPointNo, 2) = (Log(RS)) / logten
Next N
Sumx = 0 Sumy = 0 Sumxy = 0 Sumxx = 0
For i = 1 To NoOfPlottedPoints Worksheets("Data").Cells(i + 6, 4).Value = Result(i, 1) Worksheets("Data").Cells(i + 6, 5).Value = Result(i, 2) Sumx = Sumx + Result(i, 1) Sumy = Sumy + Result(i, 2) Sumxy = Sumxy + (Result(i, 1)) * (Result(i, 2)) Sumxx = Sumxx + (Result(i, 1)) * (Result(i, 1)) Next i
\'Calculate Hurst coefficient H = (Sumxy - ((Sumx * Sumy) / NoOfPlottedPoints)) / (Sumxx - ((Sumx * Sumx) / NoOfPlottedPoints)) Worksheets("Data").Range("C3").Value = H
End Sub |
-- 作者:rushtaotao -- 发布时间:2012/6/8 10:26:41 -- 能不能把思路写出来? |