Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  1. import json
  2. from time import sleep
  3. from key import api_key, api_secret
  4. import sys
  5. from math import floor, exp
  6. from datetime import datetime
  7. import matplotlib.pyplot as plt
  8. import tensorflow as tf
  9. import numpy as np
  10. from binance.client import Client
  11.  
  12.  
  13. def dump_data(d, f):
  14. with open(f, 'w') as df:
  15. json.dump(d, df, indent=4)
  16.  
  17. def read_data(f):
  18. with open(f, 'r') as df:
  19. return json.load(df)
  20.  
  21. class DataCollector(object):
  22.  
  23. def __init__(self):
  24. self.training_data_file = 'data/training/train_data1.json'
  25. self.testing_data_file = 'data/testing/test_data1.json'
  26. self.sleeptime = .5
  27. self.model = tf.keras.models.Sequential()
  28. self.client = Client(api_key, api_secret)
  29. self.training_data = read_data(self.training_data_file)
  30. self.testing_data = read_data(self.testing_data_file)
  31. self.tr_x, self.tr_y = self.parse_data(self.training_data)
  32. self.te_x, self.te_y = self.parse_data(self.testing_data)
  33. self.prev = 40
  34. self.aft = 20
  35.  
  36. def collect(self, run=True, outfile=None):
  37. dp = 0
  38. data = dict()
  39. while run is True:
  40. try:
  41. time = str(datetime.now())[11:21]
  42. price = float(self.client.get_ticker(symbol='BTCUSDT')['lastPrice'])
  43. data[time] = price
  44. print('(Datapoint: {}) BTC-USD | {}: {}$'.format(dp, time, price))
  45. sleep(self.sleeptime)
  46. dp += 1
  47. except KeyboardInterrupt:
  48. print('\n KeyboardInterrupt Writing Data to Outfile')
  49. dump_data(data, outfile)
  50. sys.exit(1)
  51.  
  52. def get_point_array(self, a, p, prev=None, aft=None):
  53. if prev is None: prev = self.prev
  54. if aft is None: aft = self.aft
  55. return a[p-prev:p+aft+1]
  56.  
  57. def graph(self, max, min=0, interval=1):
  58. #not working
  59. x, y = self.parse_data(self.data)
  60. plt.plot(x, y)
  61. plt.show()
  62.  
  63. def parse_data(self, d):
  64. x = [i for i in range(len(d))]
  65. y = [d[x] for x in d]
  66. return x, y
  67.  
  68. def get_trend(self, array):
  69. trend = []
  70. for v in range(len(array)):
  71. if v != 0:
  72. avg = ((array[v]+array[v-1])/2)
  73. trend.append(round((array[v]-array[v-1]), 10))
  74. return trend
  75.  
  76. def get_training_set(self):
  77. x_set = []
  78. y_set = []
  79. for i in range(len(self.tr_y)):
  80. if i > self.prev and i < len(self.tr_y) - self.aft:
  81. x, y = self.training_certify(p=i)
  82. x_set.append(x)
  83. y_set.append(y)
  84. return x_set, y_set
  85.  
  86. def get_testing_set(self):
  87. x_set = []
  88. y_set = []
  89. for i in range(len(self.te_y)):
  90. if i > self.prev and i < len(self.te_y) - self.aft:
  91. x, y = self.testing_certify(p=i)
  92. x_set.append(x)
  93. y_set.append(y)
  94. return x_set, y_set
  95.  
  96. def create_model(self):
  97. x, y = self.get_training_set()
  98. x_train = tf.keras.utils.normalize(x, axis=1)
  99. y_train = np.array(y)
  100. self.model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
  101. self.model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
  102. self.model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))
  103. self.model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
  104. self.model.fit(x_train, y_train, epochs=3)
  105.  
  106. def test_model(self):
  107. x, y = self.get_testing_set()
  108. x_test = tf.keras.utils.normalize(x, axis=1)
  109. y_test = np.array(y)
  110. val_loss, val_acc = self.model.evaluate(x_test, y_test)
  111. print('LOST VALUES:', val_loss)
  112. print('ACCURACY:', val_acc)
  113.  
  114. def sigmoid(self, x):
  115. return 1 / (1 + exp(-x))
  116.  
  117. def training_certify(self, p):
  118. target_y = self.tr_y[p]
  119. sub_y = self.get_point_array(self.tr_y, p)
  120. div = len(sub_y) - self.aft - 1
  121. pre_y = sub_y[:div]
  122. post_y = sub_y[div::]
  123. post_trend = self.get_trend(post_y)
  124. worth = sum(post_trend)
  125. out_set = sub_y + [target_y]
  126. if worth > 0: worth = 1
  127. else: worth = 0
  128. return out_set, worth
  129.  
  130. def testing_certify(self, p):
  131. target_y = self.te_y[p]
  132. sub_y = self.get_point_array(self.te_y, p)
  133. div = len(sub_y) - self.aft - 1
  134. pre_y = sub_y[:div]
  135. post_y = sub_y[div::]
  136. post_trend = self.get_trend(post_y)
  137. worth = sum(post_trend)
  138. out_set = sub_y + [target_y]
  139. if worth > 0: worth = 1
  140. else: worth = 0
  141. return out_set, worth
  142.  
  143. dc = DataCollector()
  144.  
  145. #dc.collect(outfile='data/testing/test_data2.json')
  146. dc.create_model()
  147. #0.82490754
  148. dc.test_model()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement