├── .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 |
12 |
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 | 
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 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
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
--------------------------------------------------------------------------------