├── .gitignore ├── inpredo_logo.png ├── .idea ├── markdown-navigator │ └── profiles_settings.xml ├── vcs.xml ├── misc.xml ├── modules.xml ├── inpredo.iml └── markdown-navigator.xml ├── requirements.txt ├── LICENSE ├── README.md ├── src ├── predict-binary.py ├── graphwerk.py └── train-binary.py └── financial_data └── btcusd-1h.csv /.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | -------------------------------------------------------------------------------- /inpredo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cderinbogaz/inpredo/HEAD/inpredo_logo.png -------------------------------------------------------------------------------- /.idea/markdown-navigator/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/inpredo.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | absl-py==0.8.0 2 | astor==0.8.0 3 | cycler==0.10.0 4 | gast==0.3.2 5 | google-pasta==0.1.7 6 | grpcio==1.24.0 7 | h5py==2.10.0 8 | Keras==2.3.0 9 | Keras-Applications==1.0.8 10 | Keras-Preprocessing==1.1.0 11 | kiwisolver==1.1.0 12 | Markdown==3.1.1 13 | matplotlib==3.1.1 14 | mpl-finance==0.10.0 15 | numpy==1.17.2 16 | Pillow==6.2.0 17 | protobuf==3.9.2 18 | pyparsing==2.4.2 19 | python-dateutil==2.8.0 20 | PyYAML==5.1.2 21 | scipy==1.3.1 22 | six==1.12.0 23 | tensorboard==1.14.0 24 | tensorflow==1.15.4 25 | tensorflow-estimator==1.14.0 26 | termcolor==1.1.0 27 | Werkzeug==0.16.0 28 | wrapt==1.11.2 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Ceyhun 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![image](inpredo_logo.png) 2 | 3 | Inpredo (INtelligent PREDictions) is an AI which literally looks into financial charts and predicts stock movements. 4 | 5 | ### First Step - Create Training Data: 6 | 7 | Before start to train a Convolutional Neural Network, first you need to create a 8 | training dataset. As a starting point you can use one of the following timeseries financial data: 9 | 10 | - BTC-USD Hourly price data; btcusd-1h.csv 11 | - EUR-USD Hourly price data; eurusd.csv 12 | - Gold-USD Hourly price data; xausd.csv 13 | 14 | Since I am too lazy to automate all this, you need to enter your CSV file into the following line: 15 | For example, if you wanna train your AI on euro dollar prices: 16 | 17 | `ad = genfromtxt('/financial_data/eurusd.csv', delimiter=',' ,dtype=str)` 18 | 19 | This code line is found under `graphwerk.py` which is the factory that produces images out of time series financial data. 20 | After running `graphwerk.py` it will take some time to write single jpg files under data/train folder. 21 | When script is done writing, then you need to take randomly roughly 20 percent of the training data and put it into validation data. 22 | You need this to be able to train a neural network and yes, I was too lazy to automate that as well. 23 | 24 | ## Second Step - Train the AI! 25 | 26 | Now we have the training and validation datasets in place, you can start training the AI model. 27 | For this you just need to run `train-binary.py` and this script will start using the dataset make a AI model out of it. 28 | When the model training is complete, it will generate a model and weights file under the models directory. 29 | 30 | ## Third Step - Load Models and Predict 31 | 32 | You can run predictions using `predict-binary.py` script. Use the `predict(file)` 33 | and use the path of the jpg file you want to predict. Result of the script will be a buy, sell or not confident message. 34 | 35 | ## Last words 36 | 37 | Actually this project is much bigger, but for some reasons I only put the training and data generation part here. 38 | There is another part of the project which actually trades in real time using nothing but AI Models from this project. 39 | 40 | For people who wants to go experimental, don't forget that you can lose money in real markets and I am not accountable for your stupitidy if you choose to use this project to trade with your own money. 41 | 42 | Medium article for in depth explanation of the project: https://medium.com/@cderinbogaz/making-a-i-that-looks-into-trade-charts-62e7d51edcba -------------------------------------------------------------------------------- /src/predict-binary.py: -------------------------------------------------------------------------------- 1 | import os 2 | import numpy as np 3 | #os.environ["KERAS_BACKEND"] = "plaidml.keras.backend" 4 | 5 | from keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array 6 | from keras.models import Sequential, load_model 7 | 8 | 9 | img_width, img_height = 150, 150 10 | model_path = '../src/models/model.h5' 11 | weights_path = '../src/models/weights' 12 | model = load_model(model_path) 13 | test_path = '../data/validation' 14 | 15 | def predict(file): 16 | x = load_img(file, target_size=(img_width,img_height)) 17 | x = img_to_array(x) 18 | x = np.expand_dims(x, axis=0) 19 | array = model.predict(x) 20 | result = array[0] 21 | if result[0] > result[1]: 22 | if result[0] > 0.9: 23 | print("Predicted answer: Buy") 24 | answer = 'buy' 25 | print(result) 26 | print(array) 27 | else: 28 | print("Predicted answer: Not confident") 29 | answer = 'n/a' 30 | print(result) 31 | else: 32 | if result[1] > 0.9: 33 | print("Predicted answer: Sell") 34 | answer = 'sell' 35 | print(result) 36 | else: 37 | print("Predicted answer: Not confident") 38 | answer = 'n/a' 39 | print(result) 40 | 41 | return answer 42 | 43 | 44 | tb = 0 45 | ts = 0 46 | fb = 0 47 | fs = 0 48 | na = 0 49 | 50 | for i, ret in enumerate(os.walk(data_path + '/test/buy')): 51 | for i, filename in enumerate(ret[2]): 52 | if filename.startswith("."): 53 | continue 54 | print("Label: buy") 55 | result = predict(ret[0] + '/' + filename) 56 | if result == "buy": 57 | tb += 1 58 | elif result == 'n/a': 59 | print('no action') 60 | na += 1 61 | else: 62 | fb += 1 63 | 64 | for i, ret in enumerate(os.walk(data_path + '/test/sell')): 65 | for i, filename in enumerate(ret[2]): 66 | if filename.startswith("."): 67 | continue 68 | print("Label: sell") 69 | result = predict(ret[0] + '/' + filename) 70 | if result == "sell": 71 | ts += 1 72 | elif result == 'n/a': 73 | print('no action') 74 | na += 1 75 | else: 76 | fs += 1 77 | 78 | """ 79 | Check metrics 80 | """ 81 | print("True buy: ", tb) 82 | print("True sell: ", ts) 83 | print("False buy: ", fb) # important 84 | print("False sell: ", fs) 85 | print("No action", na) 86 | 87 | precision = (tb+ts) / (tb + ts + fb + fs) 88 | recall = tb / (tb + fs) 89 | print("Precision: ", precision) 90 | print("Recall: ", recall) 91 | 92 | f_measure = (2 * recall * precision) / (recall + precision) 93 | print("F-measure: ", f_measure) 94 | -------------------------------------------------------------------------------- /src/graphwerk.py: -------------------------------------------------------------------------------- 1 | from numpy import genfromtxt 2 | import matplotlib.pyplot as plt 3 | import mpl_finance 4 | import numpy as np 5 | import uuid 6 | 7 | # Input your csv file here with historical data 8 | 9 | ad = genfromtxt('../financial_data/eurusd.csv', delimiter=',' ,dtype=str) 10 | pd = np.flipud(ad) 11 | 12 | buy_dir = '../data/train/buy/' 13 | sell_dir = '../data/train/sell/' 14 | 15 | def convolve_sma(array, period): 16 | return np.convolve(array, np.ones((period,))/period, mode='valid') 17 | 18 | def graphwerk(start, finish): 19 | open = [] 20 | high = [] 21 | low = [] 22 | close = [] 23 | volume = [] 24 | date = [] 25 | for x in range(finish-start): 26 | 27 | # Below filtering is valid for eurusd.csv file. Other financial data files have different orders so you need to find out 28 | # what means open, high and close in their respective order. 29 | 30 | open.append(float(pd[start][1])) 31 | high.append(float(pd[start][2])) 32 | low.append(float(pd[start][3])) 33 | close.append(float(pd[start][4])) 34 | volume.append(float(pd[start][5])) 35 | date.append(pd[start][0]) 36 | start = start + 1 37 | 38 | close_next = float(pd[finish][4]) 39 | 40 | sma = convolve_sma(close, 5) 41 | smb = list(sma) 42 | diff = sma[-1] - sma[-2] 43 | 44 | for x in range(len(close)-len(smb)): 45 | smb.append(smb[-1]+diff) 46 | 47 | fig = plt.figure(num=1, figsize=(3, 3), dpi=50, facecolor='w', edgecolor='k') 48 | dx = fig.add_subplot(111) 49 | #mpl_finance.volume_overlay(ax, open, close, volume, width=0.4, colorup='b', colordown='b', alpha=1) 50 | mpl_finance.candlestick2_ochl(dx,open, close, high, low, width=1.5, colorup='g', colordown='r', alpha=0.5) 51 | 52 | plt.autoscale() 53 | plt.plot(smb, color="blue", linewidth=10, alpha=0.5) 54 | plt.axis('off') 55 | comp_ratio = close_next / close[-1] 56 | print(comp_ratio) 57 | 58 | if close[-1] > close_next: 59 | print('close value is bigger') 60 | print('last value: ' + str(close[-1])) 61 | print('next value: ' + str(close_next)) 62 | print('sell') 63 | plt.savefig(sell_dir + str(uuid.uuid4()) +'.jpg', bbox_inches='tight') 64 | else: 65 | print('close value is smaller') 66 | print('last value: '+ str(close[-1])) 67 | print('next value: ' + str(close_next)) 68 | print('buy') 69 | plt.savefig(buy_dir + str(uuid.uuid4())+'.jpg', bbox_inches='tight') 70 | 71 | 72 | #plt.show() 73 | open.clear() 74 | close.clear() 75 | volume.clear() 76 | high.clear() 77 | low.clear() 78 | plt.cla() 79 | plt.clf() 80 | 81 | 82 | 83 | iter_count = int(len(pd)/4) 84 | print(iter_count) 85 | iter = 0 86 | 87 | 88 | for x in range(len(pd)-4): 89 | graphwerk(iter, iter+12) 90 | iter = iter + 2 -------------------------------------------------------------------------------- /src/train-binary.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # If you like to speed up training process with GPU, first install PlaidML and then uncomment the following line. 5 | # Otherwise it will fallback to tensorflow. 6 | 7 | # os.environ["KERAS_BACKEND"] = "plaidml.keras.backend" 8 | 9 | from keras import optimizers 10 | from keras.layers import Dropout, Flatten, Dense, Activation, BatchNormalization 11 | from keras.layers.convolutional import Convolution2D, MaxPooling2D, Conv2D 12 | from keras.models import Sequential 13 | from keras.preprocessing.image import ImageDataGenerator 14 | from keras.callbacks import ModelCheckpoint 15 | 16 | DEV = False 17 | argvs = sys.argv 18 | argc = len(argvs) 19 | 20 | if argc > 1 and (argvs[1] == "--development" or argvs[1] == "-d"): 21 | DEV = True 22 | 23 | if DEV: 24 | epochs = 10 25 | else: 26 | epochs = 1000 27 | 28 | # BEFORE STARTING TRAINING YOU NEED TO MANUALLY TAKE 20 PERCENENT OF THE TRAINING DATA AND PUT IT INTO VALIDATION FOLDER 29 | # I was too lazy to do it in the code. 30 | 31 | train_data_dir = './data/train/' 32 | validation_data_dir = './data/validation/' 33 | 34 | # Input the size of your sample images 35 | img_width, img_height = 150, 150 36 | # Enter the number of samples, training + validation 37 | nb_train_samples = 13204 38 | nb_validation_samples = 1412 39 | nb_filters1 = 32 40 | nb_filters2 = 32 41 | nb_filters3 = 64 42 | conv1_size = 3 43 | conv2_size = 2 44 | conv3_size = 5 45 | pool_size = 2 46 | # We have 2 classes, buy and sell 47 | classes_num = 2 48 | batch_size = 128 49 | lr = 0.001 50 | chanDim =3 51 | 52 | model = Sequential() 53 | model.add(Convolution2D(nb_filters1, conv1_size, conv1_size, border_mode ='same', input_shape=(img_height, img_width , 3))) 54 | model.add(Activation('relu')) 55 | model.add(MaxPooling2D(pool_size=(pool_size, pool_size))) 56 | 57 | model.add(Convolution2D(nb_filters2, conv2_size, conv2_size, border_mode ="same")) 58 | model.add(Activation('relu')) 59 | model.add(MaxPooling2D(pool_size=(pool_size, pool_size), dim_ordering='th')) 60 | 61 | model.add(Convolution2D(nb_filters3, conv3_size, conv3_size, border_mode ='same')) 62 | model.add(Activation('relu')) 63 | model.add(MaxPooling2D(pool_size=(pool_size, pool_size), dim_ordering='th')) 64 | 65 | model.add(Flatten()) 66 | model.add(Dense(1024)) 67 | model.add(Activation('relu')) 68 | model.add(Dropout(0.5)) 69 | model.add(Dense(classes_num, activation='softmax')) 70 | 71 | model.summary() 72 | model.compile(loss='categorical_crossentropy', 73 | optimizer=optimizers.rmsprop(), 74 | metrics=['accuracy']) 75 | 76 | train_datagen = ImageDataGenerator( 77 | #rescale=1. / 255, 78 | horizontal_flip=False) 79 | 80 | test_datagen = ImageDataGenerator( 81 | #rescale=1. / 255, 82 | horizontal_flip=False) 83 | 84 | train_generator = train_datagen.flow_from_directory( 85 | train_data_dir, 86 | target_size=(img_height, img_width), 87 | #shuffle=True, 88 | batch_size=batch_size, 89 | class_mode='categorical' 90 | ) 91 | 92 | validation_generator = test_datagen.flow_from_directory( 93 | validation_data_dir, 94 | target_size=(img_height, img_width), 95 | batch_size=batch_size, 96 | #shuffle=True, 97 | class_mode='categorical') 98 | 99 | """ 100 | Tensorboard log 101 | """ 102 | target_dir = "./models/weights-improvement-{epoch:02d}-{val_acc:.2f}.hdf5" 103 | if not os.path.exists(target_dir): 104 | os.mkdir(target_dir) 105 | model.save('./src/models/model.h5') 106 | model.save_weights('./src/models/weights.h5') 107 | 108 | checkpoint = ModelCheckpoint(target_dir, monitor='val_acc', verbose=1, save_best_only=True, mode='max') 109 | callbacks_list = [checkpoint] 110 | 111 | model.fit_generator( 112 | train_generator, 113 | steps_per_epoch=nb_train_samples//batch_size, 114 | epochs=epochs, 115 | shuffle=True, 116 | validation_data=validation_generator, 117 | callbacks=callbacks_list, 118 | validation_steps=nb_validation_samples//batch_size) 119 | 120 | 121 | -------------------------------------------------------------------------------- /.idea/markdown-navigator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 36 | 37 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /financial_data/btcusd-1h.csv: -------------------------------------------------------------------------------- 1 | 2018-12-05 01-AM,BTCUSD,3905.47,3907.1,3902.63,3903.18,8.48,33111.98 2 | 2018-12-05 12-AM,BTCUSD,3903.52,3913.62,3891.64,3905.47,240.65,939903.88 3 | 2018-12-04 11-PM,BTCUSD,3895.7,3905.8,3874.69,3903.52,257.14,999721.58 4 | 2018-12-04 10-PM,BTCUSD,3900.46,3907.05,3873.6,3895.7,179.34,697923.69 5 | 2018-12-04 09-PM,BTCUSD,3871.11,3918.77,3853.55,3900.46,273.8,1061946.25 6 | 2018-12-04 08-PM,BTCUSD,3907.99,3911.35,3863.18,3871.11,713.47,2774536.28 7 | 2018-12-04 07-PM,BTCUSD,3908.63,3927.95,3899.66,3907.99,274.9,1075579.71 8 | 2018-12-04 06-PM,BTCUSD,3910.4,3922.75,3882.52,3908.63,296.13,1155830.7 9 | 2018-12-04 05-PM,BTCUSD,3944.62,3944.62,3892.23,3910.4,715.74,2796837.82 10 | 2018-12-04 04-PM,BTCUSD,3975.28,3975.97,3915.54,3944.62,553.78,2179291.37 11 | 2018-12-04 03-PM,BTCUSD,3997,4033.98,3953.52,3975.28,825.06,3298196.87 12 | 2018-12-04 02-PM,BTCUSD,3957.5,3997,3950.71,3997,511.76,2032443.51 13 | 2018-12-04 01-PM,BTCUSD,3947.7,3989.6,3934.25,3957.5,680.96,2700311.26 14 | 2018-12-04 12-PM,BTCUSD,3959.99,3963.39,3935,3947.7,299.17,1180883.45 15 | 2018-12-04 11-AM,BTCUSD,3940,3959.99,3930,3959.99,263.6,1039089.19 16 | 2018-12-04 10-AM,BTCUSD,3962.12,3994,3930,3940,558.6,2208130.87 17 | 2018-12-04 09-AM,BTCUSD,3949.75,3974.47,3947.07,3962.12,344.3,1363403.66 18 | 2018-12-04 08-AM,BTCUSD,3972.67,3980.69,3937.42,3949.75,445.52,1760926.29 19 | 2018-12-04 07-AM,BTCUSD,3934.03,3973.63,3925.03,3972.67,471.72,1860930.92 20 | 2018-12-04 06-AM,BTCUSD,3773.51,3970.23,3730,3934.03,1743.09,6755575.13 21 | 2018-12-04 05-AM,BTCUSD,3815,3822.13,3750,3773.51,356.54,1352396.12 22 | 2018-12-04 04-AM,BTCUSD,3817.23,3837.97,3793.76,3815,314.68,1201631.13 23 | 2018-12-04 03-AM,BTCUSD,3832.93,3845.9,3771.18,3817.23,763.73,2911283.69 24 | 2018-12-04 02-AM,BTCUSD,3856,3860.55,3832.85,3832.93,362.0,1392500.55 25 | 2018-12-04 01-AM,BTCUSD,3849.25,3875.88,3846.73,3856,312.51,1206142.11 26 | 2018-12-04 12-AM,BTCUSD,3834.34,3872.84,3789.5,3849.25,732.39,2814061.15 27 | 2018-12-03 11-PM,BTCUSD,3843.29,3861.46,3828.12,3834.34,413.84,1590662.78 28 | 2018-12-03 10-PM,BTCUSD,3871.29,3882.51,3832.81,3843.29,410.7,1581393.52 29 | 2018-12-03 09-PM,BTCUSD,3831.76,3871.29,3821.62,3871.29,248.34,954255.29 30 | 2018-12-03 08-PM,BTCUSD,3813.78,3831.84,3790,3831.76,311.52,1188138.48 31 | 2018-12-03 07-PM,BTCUSD,3835.49,3840.53,3809.52,3813.78,259.56,992647.46 32 | 2018-12-03 06-PM,BTCUSD,3827.62,3846.18,3819.48,3835.49,305.75,1172840.36 33 | 2018-12-03 05-PM,BTCUSD,3820,3828.01,3803.93,3827.62,335.18,1279087.61 34 | 2018-12-03 04-PM,BTCUSD,3823.02,3834.22,3747,3820,901.98,3420004.49 35 | 2018-12-03 03-PM,BTCUSD,3947.39,3948.05,3789.95,3823.02,2312.21,8858723.28 36 | 2018-12-03 02-PM,BTCUSD,3977.9,3996.33,3938.04,3947.39,436.07,1730313.26 37 | 2018-12-03 01-PM,BTCUSD,3986.08,3994.41,3963.8,3977.9,237.07,942860.81 38 | 2018-12-03 12-PM,BTCUSD,3969,4030.4,3961,3986.08,622.63,2490899.23 39 | 2018-12-03 11-AM,BTCUSD,3979.31,3981.12,3950.98,3969,219.7,871020.89 40 | 2018-12-03 10-AM,BTCUSD,3975.19,4000.62,3968.66,3979.31,287.63,1146472.67 41 | 2018-12-03 09-AM,BTCUSD,3984.57,3990.64,3965,3975.19,309.26,1230613.04 42 | 2018-12-03 08-AM,BTCUSD,3965.3,3990.64,3905.5,3984.57,519.71,2053856.77 43 | 2018-12-03 07-AM,BTCUSD,3954.02,3967.6,3931.47,3965.3,233.79,923227.76 44 | 2018-12-03 06-AM,BTCUSD,3958.51,3961.87,3928.72,3954.02,101.36,400238.27 45 | 2018-12-03 05-AM,BTCUSD,3968.88,3971.42,3947.61,3958.51,206.39,817853.13 46 | 2018-12-03 04-AM,BTCUSD,3959.05,3980.65,3936.99,3968.88,196.36,776819.17 47 | 2018-12-03 03-AM,BTCUSD,3943.29,3968.14,3935.15,3959.05,174.8,691351.96 48 | 2018-12-03 02-AM,BTCUSD,4083.54,4083.54,3913,3943.29,1070.04,4247898.49 49 | 2018-12-03 01-AM,BTCUSD,4072.14,4103.16,4055.49,4083.54,238.46,972334.75 50 | 2018-12-03 12-AM,BTCUSD,4102.05,4115.15,4042.7,4072.14,374.33,1525295.39 51 | 2018-12-02 11-PM,BTCUSD,4110,4134.86,4061,4102.05,394.77,1615752.91 52 | 2018-12-02 10-PM,BTCUSD,4148.87,4154.17,4092.22,4110,171.31,704846.73 53 | 2018-12-02 09-PM,BTCUSD,4157.23,4184.47,4138.52,4148.87,423.18,1758845.39 54 | 2018-12-02 08-PM,BTCUSD,4117.23,4172.23,4104.16,4157.23,357.8,1484166.39 55 | 2018-12-02 07-PM,BTCUSD,4098.06,4124.99,4073.88,4117.23,143.28,587678.82 56 | 2018-12-02 06-PM,BTCUSD,4101.84,4115,4080.23,4098.06,127.68,523084.89 57 | 2018-12-02 05-PM,BTCUSD,4117.74,4119.51,4064.76,4101.84,222.77,910878.94 58 | 2018-12-02 04-PM,BTCUSD,4116.61,4132.63,4090.32,4117.74,340.73,1400929.33 59 | 2018-12-02 03-PM,BTCUSD,4116.11,4139.41,4073.7,4116.61,435.09,1787577.73 60 | 2018-12-02 02-PM,BTCUSD,4084.99,4137.68,4071.91,4116.11,313.0,1287783.9 61 | 2018-12-02 01-PM,BTCUSD,4099.67,4115.92,4061.35,4084.99,240.2,982063.75 62 | 2018-12-02 12-PM,BTCUSD,4072.77,4117.87,4060,4099.67,279.46,1142848.31 63 | 2018-12-02 11-AM,BTCUSD,4066.3,4086.35,4030,4072.77,271.93,1104641.08 64 | 2018-12-02 10-AM,BTCUSD,4153.85,4153.85,4031.21,4066.3,513.75,2099206.72 65 | 2018-12-02 09-AM,BTCUSD,4118.11,4184.52,4118.01,4153.85,337.64,1404365.72 66 | 2018-12-02 08-AM,BTCUSD,4113.88,4135.37,4092.54,4118.11,129.5,532569.31 67 | 2018-12-02 07-AM,BTCUSD,4089.99,4138.15,4072.95,4113.88,119.06,489710.43 68 | 2018-12-02 06-AM,BTCUSD,4072.84,4103.45,4049.6,4089.99,146.47,598163.67 69 | 2018-12-02 05-AM,BTCUSD,4127.09,4127.09,4043.46,4072.84,501.47,2045910.68 70 | 2018-12-02 04-AM,BTCUSD,4138.5,4157.46,4120.56,4127.09,176.04,729563.23 71 | 2018-12-02 03-AM,BTCUSD,4217.03,4218.98,4110,4138.5,565.01,2347345.06 72 | 2018-12-02 02-AM,BTCUSD,4229.85,4265,4205.12,4217.03,431.84,1826550.3 73 | 2018-12-02 01-AM,BTCUSD,4162.16,4242.82,4151.83,4229.85,251.74,1062534.17 74 | 2018-12-02 12-AM,BTCUSD,4140.39,4180.05,4139.79,4162.16,125.46,522944.84 75 | 2018-12-01 11-PM,BTCUSD,4174.28,4181.6,4134.13,4140.39,151.0,626881.25 76 | 2018-12-01 10-PM,BTCUSD,4174.9,4196.2,4153,4174.28,70.74,295213.85 77 | 2018-12-01 09-PM,BTCUSD,4147.45,4179.89,4128.81,4174.9,275.73,1145325.11 78 | 2018-12-01 08-PM,BTCUSD,4231.16,4234.16,4122.3,4147.45,400.23,1667464.15 79 | 2018-12-01 07-PM,BTCUSD,4202.88,4236.77,4196.68,4231.16,114.84,483924.44 80 | 2018-12-01 06-PM,BTCUSD,4217.81,4238.73,4195.2,4202.88,115.08,485815.95 81 | 2018-12-01 05-PM,BTCUSD,4233,4248.26,4195.08,4217.81,163.89,691817.26 82 | 2018-12-01 04-PM,BTCUSD,4169.58,4264.47,4169.58,4233,495.46,2096958.14 83 | 2018-12-01 03-PM,BTCUSD,4150.07,4182.08,4132.52,4169.58,183.16,761098.39 84 | 2018-12-01 02-PM,BTCUSD,4131.66,4157.64,4119.52,4150.07,149.58,618922.15 85 | 2018-12-01 01-PM,BTCUSD,4132.94,4165.52,4122.42,4131.66,188.31,781260.53 86 | 2018-12-01 12-PM,BTCUSD,4131.65,4182.78,4126.76,4132.94,356.41,1480684.15 87 | 2018-12-01 11-AM,BTCUSD,4115.43,4146.26,4105,4131.65,634.96,2615163.58 88 | 2018-12-01 10-AM,BTCUSD,3969.3,4146.26,3958.41,4115.43,1765.68,7197622.7 89 | 2018-12-01 09-AM,BTCUSD,3951.86,3976.22,3944.84,3969.3,107.55,426572.29 90 | 2018-12-01 08-AM,BTCUSD,3940,3984.89,3940,3951.86,221.7,880288.39 91 | 2018-12-01 07-AM,BTCUSD,3923.77,3943.79,3913.48,3940,74.24,291792.61 92 | 2018-12-01 06-AM,BTCUSD,3942.98,3950.62,3904.34,3923.77,149.14,585112.98 93 | 2018-12-01 05-AM,BTCUSD,3947.47,3957.96,3910.02,3942.98,139.57,548396.78 94 | 2018-12-01 04-AM,BTCUSD,3969.8,3969.8,3920.84,3947.47,129.6,510379.9 95 | 2018-12-01 03-AM,BTCUSD,3950.83,3973.5,3934.69,3969.8,166.96,660277.07 96 | 2018-12-01 02-AM,BTCUSD,3968.71,3973,3943.32,3950.83,107.0,423540.23 97 | 2018-12-01 01-AM,BTCUSD,3975.85,3990,3965.6,3968.71,174.2,693542.05 98 | 2018-12-01 12-AM,BTCUSD,3971.06,3980.33,3946.98,3975.85,77.18,305679.34 99 | 2018-11-30 11-PM,BTCUSD,3944.95,3992.43,3937.09,3971.06,231.26,918138.43 100 | 2018-11-30 10-PM,BTCUSD,3934.69,3950,3883.1,3944.95,288.47,1128423.47 101 | 2018-11-30 09-PM,BTCUSD,3950,3980.89,3872.84,3934.69,710.0,2786301.84 102 | 2018-11-30 08-PM,BTCUSD,3969.62,3979.63,3939.82,3950,550.6,2183367.08 103 | 2018-11-30 07-PM,BTCUSD,3970.2,3998,3957.82,3969.62,272.15,1082333.15 104 | 2018-11-30 06-PM,BTCUSD,3992.22,4002.48,3955.48,3970.2,489.36,1948360.67 105 | 2018-11-30 05-PM,BTCUSD,4011.9,4024.57,3975.8,3992.22,472.42,1887269.78 106 | 2018-11-30 04-PM,BTCUSD,3968.97,4020.64,3955,4011.9,504.98,2013626.17 107 | 2018-11-30 03-PM,BTCUSD,3973.16,3980,3906.71,3968.97,888.1,3507807.73 108 | 2018-11-30 02-PM,BTCUSD,3983.38,3989.51,3931.11,3973.16,464.7,1842159.72 109 | 2018-11-30 01-PM,BTCUSD,3970.94,4019.3,3950.71,3983.38,836.27,3327442.87 110 | 2018-11-30 12-PM,BTCUSD,3941.68,3990.62,3861,3970.94,1745.14,6840980.76 111 | 2018-11-30 11-AM,BTCUSD,4023.02,4035.06,3920.35,3941.68,1509.48,5982723.51 112 | 2018-11-30 10-AM,BTCUSD,4166.11,4171.52,4020.64,4023.02,1385.82,5641758.18 113 | 2018-11-30 09-AM,BTCUSD,4167.53,4188.07,4146.02,4166.11,357.69,1490816.94 114 | 2018-11-30 08-AM,BTCUSD,4166.37,4200.34,4134.74,4167.53,509.97,2128262.04 115 | 2018-11-30 07-AM,BTCUSD,4226.16,4235.35,4148.71,4166.37,800.74,3342425.79 116 | 2018-11-30 06-AM,BTCUSD,4262.16,4281.19,4226.16,4226.16,236.38,1007180.75 117 | 2018-11-30 05-AM,BTCUSD,4270.32,4300,4256.81,4262.16,251.81,1078343.27 118 | 2018-11-30 04-AM,BTCUSD,4255,4289.82,4225.78,4270.32,256.86,1091975.47 119 | 2018-11-30 03-AM,BTCUSD,4269.53,4290.32,4241.19,4255,401.53,1711561.37 120 | 2018-11-30 02-AM,BTCUSD,4203.09,4280,4193.43,4269.53,534.42,2268228.41 121 | 2018-11-30 01-AM,BTCUSD,4200.42,4221.75,4168.08,4203.09,402.37,1688808.75 122 | 2018-11-30 12-AM,BTCUSD,4249.8,4265,4174.08,4200.42,264.11,1112753.33 123 | 2018-11-29 11-PM,BTCUSD,4222.79,4264.47,4210.23,4249.8,369.57,1567063.18 124 | 2018-11-29 10-PM,BTCUSD,4186.06,4234.13,4157.83,4222.79,291.65,1225414.11 125 | 2018-11-29 09-PM,BTCUSD,4193,4201.65,4112.02,4186.06,789.63,3276918.5 126 | 2018-11-29 08-PM,BTCUSD,4187.37,4224.35,4161.52,4193,358.63,1504002.05 127 | 2018-11-29 07-PM,BTCUSD,4217.52,4217.52,4144.98,4187.37,1253.64,5234711.24 128 | 2018-11-29 06-PM,BTCUSD,4274.03,4308.89,4174.08,4217.52,962.28,4085943.33 129 | 2018-11-29 05-PM,BTCUSD,4299.09,4348.77,4263.37,4274.03,583.18,2513072.84 130 | 2018-11-29 04-PM,BTCUSD,4243.15,4322.58,4239.92,4299.09,461.23,1975977.05 131 | 2018-11-29 03-PM,BTCUSD,4254.46,4291,4219.92,4243.15,999.36,4248574.53 132 | 2018-11-29 02-PM,BTCUSD,4248,4311.89,4248,4254.46,769.17,3297600.33 133 | 2018-11-29 01-PM,BTCUSD,4234.25,4288.35,4198.63,4248,649.03,2751744.8 134 | 2018-11-29 12-PM,BTCUSD,4347.9,4360.15,4219.36,4234.25,992.57,4276369.98 135 | 2018-11-29 11-AM,BTCUSD,4301.87,4409.77,4296.62,4347.9,1149.2,5009186.62 136 | 2018-11-29 10-AM,BTCUSD,4315.6,4341.97,4279.62,4301.87,462.08,1991463.04 137 | 2018-11-29 09-AM,BTCUSD,4205.95,4380,4204.5,4315.6,1640.85,7066194.88 138 | 2018-11-29 08-AM,BTCUSD,4161.43,4220,4148.96,4205.95,541.09,2268465.84 139 | 2018-11-29 07-AM,BTCUSD,4180.17,4181.14,4122.05,4161.43,517.19,2146982.96 140 | 2018-11-29 06-AM,BTCUSD,4188.71,4204.4,4155.55,4180.17,279.8,1167975.87 141 | 2018-11-29 05-AM,BTCUSD,4149.48,4206.34,4134.65,4188.71,484.36,2023344.36 142 | 2018-11-29 04-AM,BTCUSD,4126.54,4165.39,4090.66,4149.48,486.01,2005319.63 143 | 2018-11-29 03-AM,BTCUSD,4160.16,4160.16,4115.78,4126.54,241.26,997933.66 144 | 2018-11-29 02-AM,BTCUSD,4124.61,4170,4106.77,4160.16,622.75,2577415.34 145 | 2018-11-29 01-AM,BTCUSD,4218.47,4218.47,4086.97,4124.61,822.38,3405233.24 146 | 2018-11-29 12-AM,BTCUSD,4220.16,4246.42,4192.69,4218.47,217.1,915697.87 147 | 2018-11-28 11-PM,BTCUSD,4186.05,4241.99,4174.54,4220.16,477.23,2008252.87 148 | 2018-11-28 10-PM,BTCUSD,4222.47,4230,4153.29,4186.05,470.67,1972895.86 149 | 2018-11-28 09-PM,BTCUSD,4307.16,4311.5,4222.47,4222.47,833.38,3561434.59 150 | 2018-11-28 08-PM,BTCUSD,4277.22,4355.08,4265.41,4307.16,2048.28,8844034.4 151 | 2018-11-28 07-PM,BTCUSD,4233,4333.38,4218.33,4277.22,2129.62,9136584.22 152 | 2018-11-28 06-PM,BTCUSD,4183.29,4237.09,4183.29,4233,1023.43,4306620.79 153 | 2018-11-28 05-PM,BTCUSD,4139.47,4226.52,4128,4183.29,1105.24,4620492.21 154 | 2018-11-28 04-PM,BTCUSD,4210.12,4210.12,4135,4139.47,651.41,2711923.26 155 | 2018-11-28 03-PM,BTCUSD,4211.86,4216.2,4141.01,4210.12,648.16,2704924.31 156 | 2018-11-28 02-PM,BTCUSD,4137.65,4237,4121.73,4211.86,1084.13,4532567.52 157 | 2018-11-28 01-PM,BTCUSD,4127.85,4205.47,4103.76,4137.65,2043.48,8480284.8 158 | 2018-11-28 12-PM,BTCUSD,4006.84,4157,3973.6,4127.85,1056.74,4301303.39 159 | 2018-11-28 11-AM,BTCUSD,4006.51,4026.49,3982.83,4006.84,460.27,1842662.65 160 | 2018-11-28 10-AM,BTCUSD,3970.14,4014.44,3959.06,4006.51,567.81,2267273.03 161 | 2018-11-28 09-AM,BTCUSD,3961,3987.99,3958.42,3970.14,212.63,845407.36 162 | 2018-11-28 08-AM,BTCUSD,4020.41,4039.41,3950.98,3961,665.04,2658186.89 163 | 2018-11-28 07-AM,BTCUSD,3975.17,4035.9,3973.82,4020.41,735.58,2939826.26 164 | 2018-11-28 06-AM,BTCUSD,3984.06,4015.98,3969.45,3975.17,596.66,2379750.35 165 | 2018-11-28 05-AM,BTCUSD,4033.37,4069.29,3974.8,3984.06,1306.68,5263371.71 166 | 2018-11-28 04-AM,BTCUSD,3846.6,4044.47,3824.3,4033.37,2229.34,8825478.74 167 | 2018-11-28 03-AM,BTCUSD,3802.84,3863.18,3802.84,3846.6,792.34,3034493.17 168 | 2018-11-28 02-AM,BTCUSD,3798.09,3833.13,3794.02,3802.84,587.32,2239563.51 169 | 2018-11-28 01-AM,BTCUSD,3788.21,3813.6,3778.86,3798.09,424.73,1611882.28 170 | 2018-11-28 12-AM,BTCUSD,3771.01,3834.35,3771,3788.21,833.53,3168493.63 171 | 2018-11-27 11-PM,BTCUSD,3790.84,3809.06,3754.01,3771.01,458.87,1732844.95 172 | 2018-11-27 10-PM,BTCUSD,3771.93,3834.35,3743.92,3790.84,687.54,2607196.39 173 | 2018-11-27 09-PM,BTCUSD,3728.97,3790,3690.66,3771.93,474.1,1775110.9 174 | 2018-11-27 08-PM,BTCUSD,3716.16,3728.97,3677.38,3728.97,377.59,1399172.35 175 | 2018-11-27 07-PM,BTCUSD,3725.55,3763.17,3691.64,3716.16,512.69,1909636.34 176 | 2018-11-27 06-PM,BTCUSD,3681.33,3738,3672.09,3725.55,477.55,1772406.21 177 | 2018-11-27 05-PM,BTCUSD,3704.69,3719.14,3658.64,3681.33,522.53,1925780.08 178 | 2018-11-27 04-PM,BTCUSD,3663.66,3711.89,3638.58,3704.69,553.52,2029403.39 179 | 2018-11-27 03-PM,BTCUSD,3700.6,3702,3634.82,3663.66,850.55,3116344.79 180 | 2018-11-27 02-PM,BTCUSD,3709.69,3731.7,3693.51,3700.6,518.8,1924780.57 181 | 2018-11-27 01-PM,BTCUSD,3678.56,3750,3656.71,3709.69,1191.86,4410881.82 182 | 2018-11-27 12-PM,BTCUSD,3653.36,3692.99,3629.41,3678.56,716.21,2622401.36 183 | 2018-11-27 11-AM,BTCUSD,3674.95,3696.4,3640.97,3653.36,507.0,1860320.63 184 | 2018-11-27 10-AM,BTCUSD,3655.16,3730.47,3548.76,3674.95,1768.31,6453125.3 185 | 2018-11-27 09-AM,BTCUSD,3642.52,3687.14,3611.33,3655.16,569.68,2081651.52 186 | 2018-11-27 08-AM,BTCUSD,3735.27,3744.38,3629.42,3642.52,1026.04,3777973.07 187 | 2018-11-27 07-AM,BTCUSD,3780,3800,3718,3735.27,666.81,2501327.71 188 | 2018-11-27 06-AM,BTCUSD,3732.72,3780,3708.88,3780,865.57,3243334.73 189 | 2018-11-27 05-AM,BTCUSD,3693,3767.92,3693,3732.72,875.62,3268410.58 190 | 2018-11-27 04-AM,BTCUSD,3681.46,3725.63,3656.7,3693,597.46,2204613.97 191 | 2018-11-27 03-AM,BTCUSD,3718.42,3750,3674.9,3681.46,661.98,2454729.3 192 | 2018-11-27 02-AM,BTCUSD,3681.54,3730.47,3640.88,3718.42,561.16,2069016.32 193 | 2018-11-27 01-AM,BTCUSD,3735.43,3738.75,3647.58,3681.54,718.96,2652456.03 194 | 2018-11-27 12-AM,BTCUSD,3727.34,3768,3677.68,3735.43,653.59,2432323.79 195 | 2018-11-26 11-PM,BTCUSD,3649.32,3749.15,3611.33,3727.34,1137.25,4204579.94 196 | 2018-11-26 10-PM,BTCUSD,3662.39,3710.96,3622.43,3649.32,724.46,2661673.2 197 | 2018-11-26 09-PM,BTCUSD,3635.26,3690,3566.52,3662.39,1982.58,7205148.63 198 | 2018-11-26 08-PM,BTCUSD,3779.58,3779.58,3575.44,3635.26,1721.21,6334584.78 199 | 2018-11-26 07-PM,BTCUSD,3813.65,3868.78,3760,3779.58,1467.06,5585697.55 200 | 2018-11-26 06-PM,BTCUSD,3731.74,3829.99,3700,3813.65,1110.3,4184202.31 201 | 2018-11-26 05-PM,BTCUSD,3752.99,3805.74,3712.66,3731.74,1010.91,3798971.28 202 | 2018-11-26 04-PM,BTCUSD,3685.37,3786.78,3522.28,3752.99,2232.85,8158045.47 203 | 2018-11-26 03-PM,BTCUSD,3753.69,3766.52,3684.19,3685.37,799.65,2981993.46 204 | 2018-11-26 02-PM,BTCUSD,3827.93,3849.6,3700,3753.69,1772.87,6665174.57 205 | 2018-11-26 01-PM,BTCUSD,3903.89,3921.36,3818.7,3827.93,910.04,3530181.98 206 | 2018-11-26 12-PM,BTCUSD,3931.92,3931.92,3872.84,3903.89,584.78,2284242.75 207 | 2018-11-26 11-AM,BTCUSD,3917.37,3958.81,3891.96,3931.92,670.66,2635450.57 208 | 2018-11-26 10-AM,BTCUSD,3891.53,3950.98,3887.96,3917.37,623.78,2446155.46 209 | 2018-11-26 09-AM,BTCUSD,3924.54,3950,3843.94,3891.53,1113.49,4343988.2 210 | 2018-11-26 08-AM,BTCUSD,3973.3,3982.53,3855,3924.54,1672.9,6551442.79 211 | 2018-11-26 07-AM,BTCUSD,4045.4,4049.54,3967.89,3973.3,516.02,2068950.69 212 | 2018-11-26 06-AM,BTCUSD,3970.17,4069.59,3957.21,4045.4,1051.45,4227565.74 213 | 2018-11-26 05-AM,BTCUSD,3931.35,3994,3903.01,3970.17,494.16,1953901.16 214 | 2018-11-26 04-AM,BTCUSD,3981.3,3982.63,3910,3931.35,578.6,2278876.44 215 | 2018-11-26 03-AM,BTCUSD,3963.65,4000.61,3944.96,3981.3,429.73,1707535.31 216 | 2018-11-26 02-AM,BTCUSD,3945.06,3975.63,3903,3963.65,361.64,1422484.56 217 | 2018-11-26 01-AM,BTCUSD,3994.99,4000.39,3920.7,3945.06,506.8,2004365.67 218 | 2018-11-26 12-AM,BTCUSD,3938.89,4043.76,3930.04,3994.99,884.71,3537378.45 219 | 2018-11-25 11-PM,BTCUSD,3953.81,3981.76,3911.72,3938.89,1133.18,4482001.89 220 | 2018-11-25 10-PM,BTCUSD,4047.53,4091.53,3941.13,3953.81,1148.1,4628333.92 221 | 2018-11-25 09-PM,BTCUSD,3926.73,4120,3892.23,4047.53,2087.63,8345169.92 222 | 2018-11-25 08-PM,BTCUSD,3790.11,4010.62,3773.96,3926.73,1804.45,7058724.42 223 | 2018-11-25 07-PM,BTCUSD,3694.66,3863.18,3694.66,3790.11,1142.39,4341522.37 224 | 2018-11-25 06-PM,BTCUSD,3671.89,3740,3671.89,3694.66,726.14,2689123.2 225 | 2018-11-25 05-PM,BTCUSD,3709.83,3725.47,3630.03,3671.89,626.11,2297156.69 226 | 2018-11-25 04-PM,BTCUSD,3726.95,3756.83,3671.65,3709.83,622.36,2313537.9 227 | 2018-11-25 03-PM,BTCUSD,3804.08,3805.99,3684.19,3726.95,886.39,3314368.54 228 | 2018-11-25 02-PM,BTCUSD,3821.07,3837.14,3780.73,3804.08,496.79,1888401.99 229 | 2018-11-25 01-PM,BTCUSD,3781.59,3882.51,3755.57,3821.07,889.76,3394216.51 230 | 2018-11-25 12-PM,BTCUSD,3779.7,3834.28,3721.47,3781.59,1155.93,4365895.04 231 | 2018-11-25 11-AM,BTCUSD,3649.24,3931.3,3649.24,3779.7,2538.92,9683817.55 232 | 2018-11-25 10-AM,BTCUSD,3608.2,3665.84,3474.73,3649.24,2620.86,9295420.5 233 | 2018-11-25 09-AM,BTCUSD,3681.95,3691.97,3589.43,3608.2,811.06,2944790.98 234 | 2018-11-25 08-AM,BTCUSD,3711.13,3725.2,3678.81,3681.95,664.49,2456549.14 235 | 2018-11-25 07-AM,BTCUSD,3649,3721.17,3648.79,3711.13,573.9,2116273.31 236 | 2018-11-25 06-AM,BTCUSD,3663.39,3702.64,3640.17,3649,482.42,1770103.08 237 | 2018-11-25 05-AM,BTCUSD,3634.97,3676.78,3607.02,3663.39,799.33,2911807.45 238 | 2018-11-25 04-AM,BTCUSD,3644.77,3702.62,3600.11,3634.97,776.08,2831256.13 239 | 2018-11-25 03-AM,BTCUSD,3743.28,3755.61,3611,3644.77,2032.81,7453879.12 240 | 2018-11-25 02-AM,BTCUSD,3781.3,3787.28,3692,3743.28,891.37,3332320.41 241 | 2018-11-25 01-AM,BTCUSD,3775.56,3812.09,3749.8,3781.3,783.51,2969047.94 242 | 2018-11-25 12-AM,BTCUSD,3785.65,3824.64,3739.8,3775.56,1275.99,4825572.08 --------------------------------------------------------------------------------