Predicting Crypto Prices in Python
HTML-код
- Опубликовано: 1 июн 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 - Наука
this channel is the real thing!! no bull shit, straight forward, well arranged information. Thank you so much for all the effort!
Amazing content as always, keep up the great work!
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.
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 RUclips 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
Great work! Loved it!
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.
Liked and subscribed.. Thank you and keep them coming
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?
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.
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.
Nice work! Do you have any documentation of this coding like a report or something?
Awesome video bro thanks!
Smart RUclips, exposing your video on right time.
extremely helpful and clear. thanks a lot
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 ?
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"
Great video Thank you!
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?
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))
Great 👍 as always
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!
That was realy educative Thank you
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...)_
Great video, as always!🙌
🙏🏼
Sir, is there a way to program a speech recognition deep learning model???
If possible could you please make a guide on this???
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.
Have problem with data = DataReader(f'{crypto}-{against}', 'yahoo', start=start_date, end=end_date) no conected from yahoo
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.
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.
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
Good job, thank's! :)
@neuralnine any idea how to do the training online/incrementally?
interesting, thanks for the video
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.
am I confusing something or testing data overlaps with training data? Is it not a problem?
yes, it is.
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 was happy when I saw the video notification, although I don't care about bitcoin..
Brazilian here ✌
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 dude 👍. Your videos like adrenaline booster's
Waiting for next video 😁
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])
Hey, i tried your code. But I am getting a "ValueError: Found array with dim 3. Estimator expected
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
I have problem using tabnine in vim like it doesnt activate what should I do?
so where to find these data sets ?pip install numpy like that ????, where can i find these?
best description
I'm stuck, how do I print the prediction?
What is the meaning of 'Yahoo' in above code can we use another word on this place?
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?
Thank you so much sir
Heyy bro first of all great video. I have a request, can you put your code on your github ?
hello Sir,
I would appreciate it if you make a video using Twitter API on sentiment analysis
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] = .
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
How Can I use this for future predicts?
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.
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 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]]
hi bro your code requires transaction variables where is this value actually taken thanks man
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
I'm unable to get a window showing for the graph
Can you help me please? In line 32 I get 'tuple index out of range'
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?
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.
Where can I find the code from the video?
I need this thanks
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.
you already have scaled the data then why did you reshape it again?
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!
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!
I just want to say that what you are doing is awesome! We need more Americans like you my friend!
24 seconds is reasonable
😂
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!
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 am lost, because I dont understand how I can see in the plot the prediction price for the future 30 days.
С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!
Interested!
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()
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))
Which ide is being used
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 am getting this error
TypeError: string indices must be integers
when I run get reader line
Any fix available found for this?
hvala kralju
Bro ... Give us some time to watch privious videos..
6:12 i prefer gru and batchnormalisation.
I'm actually tired of working about stocks...it's driving me nuts these days, I think crypto investment is far better than stock..
Trading crypto has been a lucrative way of making money
Stocks are good but crypto is more profitable
I'm new to forex trade and I have making huge losses but recently I see a lot of people earning from it. can someone please tell me what I'm doing wrong
all you need is a professional trader else you will continue making losses
How can someone know a professional account manager that is trustworthy when legit once are hard to find this days
the code didn't work
any help would be appreciated
After watching a couple times, I believe you made some mistakes. When loading training data, you get up till now. Meaning you are training all the data. This also results in a mistake when you concat all the values together for total_dataset (total_data has from 1/1/20 twice). As a result when you run your test, it appear remarkably accurate because, it trained on that exact data already. Still learning myself (totally new), so I could be wrong, but when I changed those things it was less accurate and much more realistic.
Additional question: I want to start adding extra data to learn from as well. For example, including the day of the week (mon tue wed) of the data. How would you go about doing this?
Great question, did you manage to figure it out and more so how do you get the extra data? My question is how do I make data for it to train. For example, let's say I wanted the daily RSI value for the last 6 months. Where do I go to get that data?
yes, the model is being tested with data that it was trained with. that should always be avoided.
I believe you are absolutely right... 😅
Why is line 17 giving me a syntaxerror: invalid syntax. Help
same here...
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.
Why pip is not installing on my cmd?
I am getting error for tensor flow
you are testing the model with the same data you used to train it.
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
How to run this code?
Can we use another word on the place of 'web' ?
yes, anything