Predicting Crypto Prices in Python
Вставка
- Опубліковано 20 лип 2024
- Today we learn how to predict cryptocurrency prices in Python.
Get Tabnine for FREE here: bit.ly/3cO76nS
DISCLAIMER: This is not investing advice. I am not a professional who is qualified in giving any financial advice. This is a video purely about programming using financial data.
◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾◾
📚 Programming Books & Merch 📚
💻 The Algorithm Bible Book: www.neuralnine.com/books/
🐍 The Python Bible Book: www.neuralnine.com/books/
👕 Programming Merch: www.neuralnine.com/shop
🌐 Social Media & Contact 🌐
📱 Website: www.neuralnine.com/
📷 Instagram: / neuralnine
🐦 Twitter: / neuralnine
🤵 LinkedIn: / neuralnine
📁 GitHub: github.com/NeuralNine
🎵 Outro Music From: www.bensound.com/
Timestamps:
0:00 Intro
2:33 Disclaimer
3:33 Loading Financial Data
8:37 Preparing Data
13:21 Neural Network Model
17:34 Testing The Model
27:03 Price Prediction
28:48 Predicting Into The Future
30:55 Outro - Наука та технологія
Amazing content as always, keep up the great work!
this channel is the real thing!! no bull shit, straight forward, well arranged information. Thank you so much for all the effort!
Please can you show us how to predict a month ahead and plot the graph? That would be nice to see!
vi user here! Yeah I remember when I used it in '88 or so! thanks for mentioning it - muscle memory is a weird thang. Great video! Subbed. I love the way you type as I do, yet explain so well. Keep going dude.
I don't know know why my fingures automatically tap on your video notification 😂 You are amazing with amazing projects 👍🏼
thanks brother :D
FIngre :)
You should include some indicators, eg EMA and its prediction for confirmation.
Thanks. Very interesting lessons, but I think you should follow and add more explanatory comments. This will allow you to analyze the code better over time.
you may not need to do a whole indepth theoretical video on neural networks, just explain what you're actually doing with the tensorflow stuff.
like what the units=50 values do if they're lower or higher, same with the Dropout(0.2), why you need the return_sequences and what does more layers give you, etc.
Can you show us how to feed the predicted data back into the model so the model can make actual predictions, please?
I think he does this near the end.
Liked and subscribed.. Thank you and keep them coming
Great work! Loved it!
Great video and thank you for explaining the way that you have.
Did anyone else have to remove "mode." from "model.Dense(units=1)" to get Dense to be recognized?
If you imported keras layers as in the video, just replace that line with model.add(Dense(units=1))
Dear Sir and class,
the range of your x_test should be
test_start=dt.datetime(2020,1,1)+dt.timedelta(days=-prediction_days)
test_end=dt.datetime.now()
I think the model_inputs should have data range:
(60 days prior to 2020,1,1 to 2020,1,1) plus (2020,1,1 to now)
,not (60 days prior to now to now) plus (2020,1,1 to now)
the mistake will be reflected at 25:30, since the btc has an increasing trend, your predicted price in the beginning should not be way higher than actual. The reason is you use (60 days prior to now) to predict (2020,1,1)
Please clarify
Thank you
Kai-
could you please write the model_inputs please? I can't figure it out please
@@gbagba81 To fix the first price, put this:
total_dataset = pd.concat((data["Close"], test_data["Close"]), axis = 0)
model_inputs = total_dataset[len(total_dataset) - len(test_data) - prediction_days:].values
support_array = total_dataset[len(total_dataset) - len(test_data)-prediction_days- len(test_data):len(total_dataset) - len(test_data)- len(test_data)]
support_array = np.array(support_array)
model_inputs2= model_inputs[prediction_days:]
support_array2 = np.concatenate([support_array, model_inputs2])
model_inputs = support_array2
model_inputs = model_inputs.reshape(-1, 1)
model_inputs = scaler.fit_transform(model_inputs)
x_test = []
@@junwen6020 it's not supposed to make sense. I've seen all courses in UA-cam not a single one explains why lstm, what the hell are the numbers, they just throw random parameters because science!
@@gbagba81
# Add This Line
data_before_test = web.DataReader(f"{crypto_currency}-{against_currency}", "yahoo", (test_start - datetime.timedelta(days=prediction_days)), test_start)
# Modify the line that you have to this
total_dataset = pd.concat((data_before_test['Close'], test_data['Close']), axis=0)
# Anddd you're done!
@@mirzarameezahmedbaig93 I'll try this today and be right back
Nice work! Do you have any documentation of this coding like a report or something?
Wooo awesome build ^^ When do you suppose you will upload the video for the zoom clone. I was asked for yt channels that I can prefer and your channel is one of all the channels coz you are one of the best coding tutors
this does not work : data = web.DataReader(f"{crypto_currency}-{against_currency}", 'yahoo', start, end), says "string indices must be integers"
extremely helpful and clear. thanks a lot
Awesome video bro thanks!
Okay watch it all that’s a very good tutorial thanks for all the work
I’m just wondering now how can we improve the model like are we going to run it over and over or there is a value we can change so the model can train longer and have a better accuracy?
And last question, if we are tuning it few times, is the model going to remember the error it may have made before ?
Sir, is there a way to program a speech recognition deep learning model???
If possible could you please make a guide on this???
Smart UA-cam, exposing your video on right time.
Hi man good work your coding is very educational and useful can you just tell me how to fix the error Sequential object has no attribute prediction
Traceback (most recent call last):
File "c:\Users\10001\Documents\import numpy as np.py", line 69, in
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
IndexError: tuple index out of range
I am having the same problem
Same problem
Did you solved that?
Great video Thank you!
Have problem with data = DataReader(f'{crypto}-{against}', 'yahoo', start=start_date, end=end_date) no conected from yahoo
Great tutorial, but would like to know what is it actually doing here. Is it looking at historical patterns? How many days is considered a pattern, 60? Also, when you offset the data by 60 days then is the same true when you had the data offset by 1 day? In other words, should the prediction line be shifted 1 day out?
Can anyone explain the graph a little more, like the difference between what its actually predicting? If I'm predicting off the last 60 days, why does the prediction price follow the chart the whole way? I'm not entirely understanding how it's predicting future prices when there is no extent beyond the actual prices graph.
Can you show us how to feed the prediction data into the model so we actually predict ahead? I mean not just one day. How can we predict the next month? Thanks 🙏
it's basically impossible to accurately predict the next month's btc price. Bitcoin is such a volatile market- anything can influence it _(like Elon Musk tweeting...)_
That was realy educative Thank you
when I attempt to fit the model im getting " TypeError: 'int' object is not iterablef". I'm guessing this has asomething to do with the input_shpe. I can't seem to figure out why its doing that though.
GREAT VIDEO!! Learned so much!!!
Do you have a video on where the code predicts say day 62 on previous 60 days and then day 63 on previous 60 as you mentioned in video?
He gets into that in the "Predicting into the Future" segment near the end of the video.
Saw your profile picture and just wanted to say GIG EM! WHOOP!
Every time I re-train my model and re-predict, I get completely different predictions. They are off by about 1000 each time, does anyone know why this is?
How would you run a string of predictions? Say I want to see what it predicts the price will be every minute for the next 5-10 minutes.
Hey, i tried your code. But I am getting a "ValueError: Found array with dim 3. Estimator expected
@neuralnine any idea how to do the training online/incrementally?
Great 👍 as always
Great tutorial! New subscriber. Now, what if the neurla network could take it´s own predictions compare them with the actual prices in the past, calculte the mistakes and sort of learn from them, and then do that again with the refined results and so on to finally obtain a better prediction? Is that also programable on your script? Do you think that would work?
I had the same thought. Have you figure anything about it?
I am guessing the way to do it is to log the same data on realtime but with prediction for example open, high, low, close, close_pred, and just retrain the model by loading the model using tensorflow and feeding it the features of realtime with making a backup of previous model for falling back in case of overfitting
yes, this is called transfer learning or incremental learning.
I have problem using tabnine in vim like it doesnt activate what should I do?
Hi,
I got an error at the last step. Could you guys explain it for me, please? the code stops at the line
prediction_prices = model.predict(x_test)
ValueError: in user code: ### there is a bunch of python files related to Keras I guess
ValueError: slice index 0 of dimension 0 out of bounds. for '{{node strided_slice_1}} = StridedSlice[Index=DT_INT32, T=DT_FLOAT, begin_mask=0, ellipsis_mask=0, end_mask=0, new_axis_mask=0, shrink_axis_mask=1](transpose, strided_slice_1/stack, strided_slice_1/stack_1, strided_slice_1/stack_2)' with input shapes: [0,?,1], [1], [1], [1] and with computed input tensors: input[1] = , input[2] = , input[3] = .
so where to find these data sets ?pip install numpy like that ????, where can i find these?
What is the meaning of 'Yahoo' in above code can we use another word on this place?
I have the following error message, does someone know how I could solve this?
ValueError Traceback (most recent call last)
99 real_data = np.reshape(real_data, (real_data.shape[0], real_data.shape[1], 1))
100
--> 101 prediction = model.predict(real_data)
102 prediction = scaler.inverse_transform(prediction)
103
..............
ValueError: Error when checking input: expected lstm_3_input to have shape (60, 1) but got array with shape (59, 1)
thanks!
Can you help me please? In line 32 I get 'tuple index out of range'
Hey bro. Your code seems to only care about the test data. The real data seems to be forgotten and is not being considered on the plotted values?
Do you use that script for coding predictions at Numeraire?
I'm stuck, how do I print the prediction?
Good job, thank's! :)
Why did you scale the entire dataset using MinMax Scaling.. It causes data leakage into the test set. The reason why your prediction looks similar to actual values is because there is data leakage.. We should always fit and transform the train set only to fit the test set.
Interesting subject! If this is suppose to be a tutorial you should probably explain more in general of what you're doing or give write more comments. Or both. Anyway, thanks for the video
hello Sir,
I would appreciate it if you make a video using Twitter API on sentiment analysis
I'm unable to get a window showing for the graph
Heyy bro first of all great video. I have a request, can you put your code on your github ?
am I confusing something or testing data overlaps with training data? Is it not a problem?
yes, it is.
interesting, thanks for the video
hi bro your code requires transaction variables where is this value actually taken thanks man
I was happy when I saw the video notification, although I don't care about bitcoin..
Brazilian here ✌
Thanks for this video...been working step by step on how you were doing it but after everything, I run the program and this was the error message I got "'Sequential' object has no attribute 'prediction'." Can you please help out in solving this error? Thanks
real_data = [model_inputs[len(model_inputs) - prediction_days:len(model_inputs) + 1, 0]]
copied from someone else. Might help you.
Great video, as always!🙌
🙏🏼
How Can I use this for future predicts?
I am a newbie, i just started learning programming yesterday. This seems almost impossible for me to learn I dont even know what he is doing.
i had a problem with line 8 and 9 importing keras from tensorflow. for me i needed to wirte from keras.layers import Dense, Dropout, LSTM thanks alot for everything men
instead of
tensorflow.keras.layers import Dense, Dropout, LSTM
go with
tensorflow.python.keras.layers import Dense, Dropout, LSTM
Is there any way we could predict future price like it went ahead the actual price graph instead of it overlapping the current graph?
Thank you in advance! :)
No ,there is no way ,u cannot get the next predicted price unless actual price is already given .So the prediction is a False Proposition to some extent.
I am lost, because I dont understand how I can see in the plot the prediction price for the future 30 days.
Hello
Im getting an error saying: TypeError: string indices must be integers, not 'str'
for data = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', start, end)
please help me out asap
Same here! Any fix to it?
you already have scaled the data then why did you reshape it again?
for x in range(prediction_days +1, len(scaled_data)):
x_train.append(scaled_data[x-prediction_days-1:x-1, 0]) # using [1:60] to predict [61], [1:60] to predict [60] wrong!
y_train.append(scaled_data[x,0])
Where can I find the code from the video?
best description
Great dude 👍. Your videos like adrenaline booster's
Waiting for next video 😁
hey im getting the error 'float' object is not subscriptable on line 22 of my code. Here is the code: scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1)) I have tried but idk how to fix. Please somebody help.
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1))
I get the same error for both your stock tutorials when predicting the price: "expected lstm input to have shape (60,1) but got array shape (59,1) any ideas?
I get the same error on both of them also
real_data = [model_inputs[len(model_inputs) - prediction_days:len(model_inputs) + 1, 0]]
Thank you so much sir
I am getting error for tensor flow
Hey, i got this error at timestamp 25:00. Please let me know why is this occuring
TypeError: only integer scalar arrays can be converted to a scalar index
Same error, if i figure it out i'il let you know
I solved it. You probably have writed the last x_test var wrong (like me). Just use this
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
I just want to say that what you are doing is awesome! We need more Americans like you my friend!
Which ide is being used
I want go as my second learnt by you, pls make a series. p.s. I have only done python the best and bec of you bro!
the code didn't work
any help would be appreciated
Why pip is not installing on my cmd?
why do you use prices (they are not stationary) and not use returns instead?
When using DL with LSTM, non-stationarity isn't really a issue. Unlike traditional time series analysis.
I need this thanks
6:12 i prefer gru and batchnormalisation.
It seems that the training data and test data overlap. As far as I know, that's wrong.
anyone has txt version of this code?
I just started this video and my initial reaction is “no way” because if it were this simple to accurately predict crypto this guy including every other ML programmer would be rich so this will most likely not work. However I’ll watch the rest of the video and edit this to include my thoughts after.
How to run this code?
Please, how to make it to predict more than one value at a time and instead make it to predict 30 or 60 values at once after it analyses past X values sequence? Thank you!
P.S.: Are you Romanian?
I mentioned how it would work. No.
apparently he's austrian from Vienna. But idk
can you post the codes on github or somewhere else ?
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import pandas_datareader as web
import datetime as dt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.layers import Dense, Dropout, LSTM
from tensorflow.keras.models import Sequential
crypto_currency = 'BTC'
against_currency = 'USD'
start = dt.datetime(2020, 1, 1)
end = dt.datetime.now()
data = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', start, end)
# Prepare Data
#print(data.head())
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1))
prediction_days = 60
x_train, y_train = [], []
for x in range(prediction_days, len(scaled_data)):
x_train.append(scaled_data[x-prediction_days:x, 0])
y_train.append(scaled_data[x, 0])
x_train , y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
# Create Neural Network
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(x_train, y_train, epochs=25, batch_size=32)
test_start = dt.datetime(2021, 1, 1)
test_end = dt.datetime.now()
test_data = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', test_start, test_end)
actual_prices = test_data['Close'].values
total_dataset = pd.concat((data['Close'], test_data['Close']), axis=0)
model_inputs = total_dataset[len(total_dataset) - len(test_data) - prediction_days:].values
model_inputs = model_inputs.reshape(-1, 1)
model_inputs = scaler.fit_transform(model_inputs)
x_test = []
for x in range(prediction_days, len(model_inputs)):
x_test.append(model_inputs[x-prediction_days:x, 0])
x_test = np.array(x_test)
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
prediction_prices = model.predict(x_test)
prediction_prices = scaler.inverse_transform(prediction_prices)
plt.plot(actual_prices, color='black', label='Actual Prices')
plt.plot(prediction_prices, color='green', label='Predicted Prices')
plt.title(f'{crypto_currency} price prediction')
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend(loc='upper left')
plt.show()
I am getting this error
TypeError: string indices must be integers
when I run get reader line
Any fix available found for this?
Hello there nice work. Tried to follow your code but my BTC or other currency prediction plot is a straight line one or two orders of magnitude above the real price... while training the model the loss is always 500k and I get this message: WARNING:tensorflow:Model was constructed with shape (None, 60, 1) for input KerasTensor(type_spec=TensorSpec(shape=(None, 60, 1), dtype=tf.float32, name='lstm_input'), name='lstm_input', description="created by layer 'lstm_input'"), but it was called on an input with incompatible shape (None, 59, 1).
Could you help or share your code please so I can see what I'm doing wrong?
Best regards and keep up the good work.
I have the same error, still looking for a fix :(
real_data = [model_inputs[len(model_inputs) - prediction_days:len(model_inputs) + 1, 0]]
@@dingdingdongbong921 up
I had an error with shaping in the real_data where I was getting errors stating expected shape=(None, 60, 1), found shape=(None, 59, 1). To fix this I had to remove the +1 in real_data = [model_inputs[len(model_inputs) + 1 - predict_days:len(model_inputs) + 1, 0]]. I changed it to real_data = [model_inputs[len(model_inputs) - predict_days:len(model_inputs) + 1, 0]], which changed the found shape to (1,60,1) instead of (1,59,1). Is this ok?
you know i actually believe that to put just real_data = [model_inputs[ - predict_days:, 0]] will just do it, because, think you have to place an input to the prediction model with only the 60 latest days so you can predict the 61th one. the ugly thing there is just to figure what on earth is the ":" doing. so i started playing with it until i figured what was that actually expressing. i'll be looking after your answer good luck
Why is line 17 giving me a syntaxerror: invalid syntax. Help
same here...
why does the description say "Today we learn how to code a simple snake game in Python." 😂?
oh boy thank you 😂
Couldn't possibly be further from the truth!
How can I get these codes
Interested!
1:51 is it better that kite?
the tensorflow command is giving me errors in anaconda. any help is greatly appreciated
hey same issue here did u find any fixes ???
you are testing the model with the same data you used to train it.
Сan I get the full code somewhere? Thanks for the videos 👍
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import pandas_datareader as web
import datetime as dt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.layers import Dense, Dropout, LSTM
from tensorflow.keras.models import Sequential
crypto_currency = 'BTC'
against_currency = 'USD'
start = dt.datetime(2020, 1, 1)
end = dt.datetime.now()
data = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', start, end)
# Prepare Data
#print(data.head())
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1,1))
prediction_days = 60
x_train, y_train = [], []
for x in range(prediction_days, len(scaled_data)):
x_train.append(scaled_data[x-prediction_days:x, 0])
y_train.append(scaled_data[x, 0])
x_train , y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
# Create Neural Network
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(x_train, y_train, epochs=25, batch_size=32)
test_start = dt.datetime(2021, 1, 1)
test_end = dt.datetime.now()
test_data = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', test_start, test_end)
actual_prices = test_data['Close'].values
total_dataset = pd.concat((data['Close'], test_data['Close']), axis=0)
model_inputs = total_dataset[len(total_dataset) - len(test_data) - prediction_days:].values
model_inputs = model_inputs.reshape(-1, 1)
model_inputs = scaler.fit_transform(model_inputs)
x_test = []
for x in range(prediction_days, len(model_inputs)):
x_test.append(model_inputs[x-prediction_days:x, 0])
x_test = np.array(x_test)
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
prediction_prices = model.predict(x_test)
prediction_prices = scaler.inverse_transform(prediction_prices)
plt.plot(actual_prices, color='black', label='Actual Prices')
plt.plot(prediction_prices, color='green', label='Predicted Prices')
plt.title(f'{crypto_currency} price prediction')
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend(loc='upper left')
plt.show()
@@IovuAdrian1 You are love!
I've the problem with tensorflow
No module named 'tensorflow'
i installed it with comand pip install tensorflow but it's not working though
if any one had the Problem and solved it please pm me
I had the same mistaked. You need to download Python 3.7.9, can't be higher than 3.8, and you should download python 64 bits, not the 32 bits