Advertisement
Infiniti_Inter

Hurst metod

Sep 30th, 2023
896
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.30 KB | None | 0 0
  1. import csv
  2. import datetime
  3. import math
  4. import numpy as np
  5. import matplotlib.pyplot as plt
  6. import pandas as pd
  7.  
  8. def plot(a, b):
  9.     # Создание данных для x и y
  10.     x = np.linspace(-10, 10, 100)  # Создание массива x от -10 до 10
  11.     y = a * x + b  # Вычисление значений y в соответствии с уравнением прямой
  12.    
  13.     # Построение графика
  14.     plt.plot(x, y)
  15.    
  16.     # Добавление осей и заголовка
  17.     plt.xlabel('x')
  18.     plt.ylabel('y')
  19.     plt.title('Апрокримезирующая прямая')
  20.    
  21.     # Отображение графика
  22.     plt.show()
  23.  
  24. def hurst(X):
  25.     L = len(X)
  26.     plt.plot(X)
  27.     plt.show()
  28.     if L < 20:
  29.         raise ValueError("Временной ряд должен содержать как минимум 20 точек данных.")
  30.     pmax = 10
  31.     dX = []
  32.     s = []
  33.     e = []
  34.     n = []
  35.     for p in range(1, pmax + 1):
  36.         for i in range (0, L - pmax):
  37.             dX.append(X[i+p]-X[i])
  38.         s.append(np.std(dX))
  39.         e.append(math.log(p))
  40.         n.append(math.log(s[-1]))
  41.     a, b = np.polyfit(e, n, 1)
  42.     print(f"a = {a:.07f}, b = {b:07f}")
  43.     plot(a, b)
  44.     #print("p\t s\t\t\t\t\t  e\t\t\t\t\t\t\ n" )
  45.     data = {'s': s, 'e': e, 'n': n}
  46.     df = pd.DataFrame(data)
  47.     #for f in range(0, 10):
  48.       #print(f+1, " ", s[f], " ", e[f], " ", n[f])
  49.     #return H
  50.     print(df)
  51.  
  52. val = []
  53. date = []
  54. r = []
  55. TEST = int(input("Введите год "))
  56. with open('JPY.csv', 'r') as cf:
  57.     reader = csv.reader(cf)
  58.     skip = True
  59.     for row in reader:
  60.         if skip:
  61.             skip = False
  62.             continue
  63.         s = row[0].split('\t')
  64.         t = s[0][6:10:1]
  65.         #t = int(t)
  66.         x = 1000
  67.         for it in t:
  68.           r.append(int(it)*x)
  69.           x = x/10
  70.         test = 0
  71.         for it in r:
  72.             test+=it
  73.         #print(test)
  74.         r.clear()
  75.         if test == TEST:
  76.             date.append(s[0])
  77.             val.append(float(s[-1].replace(',', '.')))
  78.             #print(s[0])
  79.             #print(s[-1].replace(',', '.'))
  80.     cf.close()
  81.  
  82. #for i in range(len(val)):
  83.    # print(date[i], " -- ", val[i])
  84. date.reverse()
  85. val.reverse()
  86. #print(date)
  87. hurst(val)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement