diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d21497e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 LastAncientOne + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Python_01_Dowload__YahooData.py b/Python_01_Dowload__YahooData.py new file mode 100644 index 0000000..e4de72a --- /dev/null +++ b/Python_01_Dowload__YahooData.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Download stock historical data from Yahoo Finance + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2014-01-01' +end = '2018-01-01' + + +# dataframe +df = yf.download(symbol,start,end) + +# View the first 5 rows +print('First 5 Rows') +print(df.head()) +print('-'*80) + +# View the last 5 rows +print('Last 5 Rows') +print(df.tail()) \ No newline at end of file diff --git a/Python_02_Modify_Date.py b/Python_02_Modify_Date.py new file mode 100644 index 0000000..40e13c8 --- /dev/null +++ b/Python_02_Modify_Date.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Modify Yahoo Dataframe Date +import pandas as pd # Dataframe Library +pd.set_option('max_columns', None) # To show all columns + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2014-01-01' +end = '2018-01-01' + + +# dataframe +data = yf.download(symbol,start,end) + +# View the first 5 rows +print('First 5 Rows') +print(data.head()) +print('-'*80) + + +# Date becomes a columns +df = data.copy() # Copy the original data +dfn = df.reset_index() +print(dfn.head()) +print('-'*80) + + +# Add Year, Month, Day +df['Year'] = df.index.year +df['Month'] = df.index.month +df['Day'] = df.index.day +print('Year, Month, & Day') +print(df.head()) +print('-'*80) + + +# Convert Daily to Weekly +weekly = data.copy() +weekly = weekly.resample('W').last() +print('Weekly Data') +print(weekly.head()) +print('-'*80) + + +# Convert Daily to Monthly +monthly = data.copy() +monthly = monthly.resample('1M').mean() +print('Monthly Data') +print(monthly.head()) +print('-'*80) + + +# Choose Particular Year to analyze +monthly = data.copy() +monthly = monthly.reset_index() +y2017 = monthly[monthly['Date'].dt.year==2017] +print("Analyze Particular Year in Historical Data") +print(y2017) +print('-'*80) + + +month_name = data.copy() +# Convert Daily to Monthly +# 'BMS', which stands for "business month start frequency" +# 'BM', which stands for "business month end frequency" +month_name = month_name.asfreq('BM') +print('Number of the Month') +print(month_name.head()) +print('-'*80) + + +import calendar +month_name['Month_Number'] = month_name.index.month +month_name['Month_ABBR'] = month_name['Month_Number'].apply(lambda x: calendar.month_abbr[x]) +print('Abbreviation for Months') +print(month_name.head()) +print('-'*80) + + +print('Month Name') +month_name['Month_Name'] = month_name['Month_Number'].apply(lambda x: calendar.month_name[x]) +print(month_name.head()) +print('-'*80) + + +# Pivot Table Date +df_months = pd.pivot_table(df, index=df.index.month, columns=df.index.year, values = 'Adj Close') # each months +print('Year by Year') +print(df_months) +print('-'*80) + + +df_days = pd.pivot_table(df, index=df.index.day, columns=df.index.year, values = 'Adj Close') # daily for one whole months +print('Year by Year in daily rows') +print(df_days) +print('-'*80) + + +df_all_columns = pd.pivot_table(df, index=df.index.month, columns=df.index.year) +print('All columns in yearly') +print(df_all_columns) +print('-'*80) + + +stock_data = df.copy() +stock_data['Year'] = df.index.year +stock_data['Month'] = df.index.month +stock_data['Day'] = df.index.day +stock_data['Week_Day'] = df.index.dayofweek +stock_data['Week_Day_Name'] = df.index.strftime('%A') +print('Number of day with M-F') +print(stock_data.tail(10)) +print('-'*80) + + +approach1 = stock_data.groupby(['Year', 'Month']).first()['Adj Close'] +print('# of Month') +print(approach1.tail(12)) +print('-'*80) + + +approach2 = stock_data.groupby(['Year', 'Day']).first()['Adj Close'] +print('# of Day') +print(approach2.tail(12)) +print('-'*80) + + +print('Convert Date to String') +string_date = data.copy() +string_date['Date'] = string_date.index +print(string_date.head()) +print('-'*80) + + +string_date['Date'] = string_date['Date'].dt.strftime("%Y%m%d").astype(int) +print('Convert Date to Numbers') +print(string_date.head()) + + + + diff --git a/Python_03_save_csv.py b/Python_03_save_csv.py new file mode 100644 index 0000000..3519876 --- /dev/null +++ b/Python_03_save_csv.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Dec 4 18:55:42 2020 + +@author: Tin +""" +# Save Data to CSV +import warnings +warnings.filterwarnings("ignore") + +import yfinance as yf +yf.pdr_override() + +# input +symbol = 'AMD' +start = '2014-01-01' +end = '2019-01-01' + +# Read data +data = yf.download(symbol,start,end) + +# Output data into CSV +# To save in your certain folder, change the Users name +data.to_csv("C:/Users/Finance/Desktop/AMD.csv") + + + +symbols = ['PFE','TGT','MA','UNH','VZ','V','WMT','GS'] +start = '2014-01-11' +end = '2019-01-01' +stocks_info = yf.download(symbols, start, end)['Adj Close'] +stocks_data = stocks_info.iloc[::] +print(stocks_data) + +# Output data into CSV +stocks_data.to_csv("C:/Users/Finance/Desktop/stocks_data.csv") diff --git a/Python_04_Plot_Charts.py b/Python_04_Plot_Charts.py new file mode 100644 index 0000000..6c101c2 --- /dev/null +++ b/Python_04_Plot_Charts.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Plot Line Charts +import pandas as pd # Dataframe Library +import matplotlib.pyplot as plt # Plot Chart Library + +pd.set_option('max_columns', None) # To show all columns + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2014-01-01' +end = '2018-01-01' + + +# dataframe +data = yf.download(symbol,start,end) + +# View the first 5 rows +print('First 5 Rows') +print(data.head()) +print('-'*80) + +print('Line Chart') +plt.figure(figsize=(12,8)) +plt.plot(data['Adj Close']) +plt.title("Stock Line Chart") +plt.legend(loc='best') +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() +print('-'*80) + + +print('Line Chart with Grid') +plt.figure(figsize=(12,8)) +plt.plot(data['Adj Close']) +plt.title("Stock Line Chart") +plt.grid() +plt.legend(loc='best') +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() +print('-'*80) + + +print('Render the grid') +fig, ax = plt.subplots() +data.plot(kind='line', y= 'Adj Close', ax=ax) +# Turn on the grid +ax.grid() +plt.title("Stock Line Chart") +plt.legend(loc='best') +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() +print('-'*80) + + +print('Customize the grid') +fig, ax = plt.subplots() +data.plot(kind='line', y= 'Adj Close', ax=ax) +# Don't allow the axis to be on top of your data +ax.set_axisbelow(True) +# Customize the grid +ax.grid(linestyle='-', linewidth='0.5', color='red') +plt.title("Stock Line Chart") +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() +print('-'*80) + + +print('Major grid & Minor Grid') +plt.figure(figsize=(12,8)) +plt.plot(data['Adj Close']) +plt.minorticks_on() +plt.grid(b=True, which='major', color='b', linestyle='-') +plt.grid(b=True, which='minor', color='r', linestyle='--') +plt.title("Stock Line Chart") +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() +print('-'*80) + + +import seaborn as sns # Plot Library 0.9.0 Version +# conda install -c anaconda seaborn=0.9.0 +plt.figure(figsize=(10,5)) +sns.lineplot(data=data, x=data.index, y='Adj Close') +print('-'*80) + +plt.figure(figsize=(10,5)) +top = plt.subplot2grid((4,4), (0, 0), rowspan=3, colspan=4) +bottom = plt.subplot2grid((4,4), (3,0), rowspan=1, colspan=4) +top.plot(data.index, data['Adj Close']) +bottom.bar(data.index, data['Volume']) + +# set the labels +top.axes.get_xaxis().set_visible(False) +top.set_title('Stock Price and Volume') +top.set_ylabel('Adj Closing Price') +bottom.set_ylabel('Volume') +print('-'*80) + + +# Candlestick +from mpl_finance import candlestick_ohlc +from matplotlib import dates as mdates + +# Converting date to pandas datetime format +dfc = data.copy() +dfc = dfc.reset_index() +dfc['Date'] = pd.to_datetime(dfc['Date']) +dfc['Date'] = dfc['Date'].apply(mdates.date2num) +# dfc.head() + +fig = plt.figure(figsize=(14,10)) +ax1 = plt.subplot(2, 1, 1) +candlestick_ohlc(ax1,dfc.values, width=0.5, colorup='g', colordown='r', alpha=1.0) +ax1.xaxis_date() +ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y')) +ax1.set_title('Stock '+ symbol +' Closing Price') +ax1.set_ylabel('Price') + + + + +import plotly.graph_objs as go +# from plotly.offline import init_notebook_mode, iplot + +df = data.copy() +# Plot OHLC Bar Chart +trace = go.Ohlc(x=df['12-2016'].index, + open=df['12-2016'].Open, + high=df['12-2016'].High, + low=df['12-2016'].Low, + close=df['12-2016'].Close) +data = [trace] +iplot(data, filename='simple_ohlc') diff --git a/Python_05_Plot_Area.py b/Python_05_Plot_Area.py new file mode 100644 index 0000000..d0863ab --- /dev/null +++ b/Python_05_Plot_Area.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Plot Area Chart +import matplotlib.pyplot as plt +import pandas as pd + +pd.set_option('max_columns', None) # To show all columns + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2019-01-01' +end = '2020-01-01' + + +# dataframe +data = yf.download(symbol,start,end) + +print('Plot Histogram Chart') +plt.figure(figsize=(12,8)) +data['Adj Close'].plot.area() +plt.title("Stock Area Chart") +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() + + +data[['Open','High','Low','Adj Close']].plot.area(stacked=False) +plt.title("Stock Area Chart") +plt.xlabel("Date") +plt.ylabel("Price") +plt.legend(loc='best') +plt.show() \ No newline at end of file diff --git a/Python_06_Plot_Scatter_Line.py b/Python_06_Plot_Scatter_Line.py new file mode 100644 index 0000000..e0c08f9 --- /dev/null +++ b/Python_06_Plot_Scatter_Line.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Plot Scatter & Line Chart +import pandas as pd # Dataframe Library +import matplotlib.pyplot as plt # Plot Chart Library + +pd.set_option('max_columns', None) # To show all columns + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2019-12-01' +end = '2020-01-01' + + +# dataframe +data = yf.download(symbol,start,end) + +plt.figure(figsize=(14,8)) +plt.scatter(data.index, data['Adj Close'], color='black') +plt.plot(data.index, data['Adj Close'], color='r') +plt.title("Stock Scatter & Line Chart") +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() \ No newline at end of file diff --git a/Python_07_Plot_Histogram.py b/Python_07_Plot_Histogram.py new file mode 100644 index 0000000..c5c4c51 --- /dev/null +++ b/Python_07_Plot_Histogram.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Plot Histogram Chart +import matplotlib.pyplot as plt +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2019-01-01' +end = '2020-01-01' + + +# dataframe +data = yf.download(symbol,start,end) + +plt.figure(figsize=(14,10)) +plt.bar(data.index, data['Adj Close']) +plt.title("Stock Histogram Chart") +plt.xlabel("Date") +plt.ylabel("Price") +plt.show() + diff --git a/Python_08_Plot_Boxplot.py b/Python_08_Plot_Boxplot.py new file mode 100644 index 0000000..9a88594 --- /dev/null +++ b/Python_08_Plot_Boxplot.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Plot Boxplot Chart +import pandas as pd # Dataframe Library +import matplotlib.pyplot as plt # Plot Chart Library + +pd.set_option('max_columns', None) # To show all columns + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2019-12-01' +end = '2020-01-01' + + +# dataframe +data = yf.download(symbol,start,end) + +plt.figure(figsize=(14,8)) +plt.boxplot(data['Adj Close']) +plt.xlabel("Month of December") +plt.ylabel("Price") +plt.show() \ No newline at end of file diff --git a/Python_09_Plot_Candlestick.py b/Python_09_Plot_Candlestick.py new file mode 100644 index 0000000..24b6611 --- /dev/null +++ b/Python_09_Plot_Candlestick.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Plot Candlestick in Matplotlib +import pandas as pd # Dataframe Library +import matplotlib.pyplot as plt # Plot Chart Library + +pd.set_option('max_columns', None) # To show all columns + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2019-01-01' +end = '2020-01-01' + + +# dataframe +data = yf.download(symbol,start,end) + +data['VolumePositive'] = data['Open'] < data['Adj Close'] + +print('Line Chart') +fig = plt.figure(figsize=(14,10)) +ax1 = plt.subplot(3, 1, 1) +ax1.plot(data['Adj Close']) +ax1.set_title('Stock '+ symbol +' Closing Price') +ax1.set_ylabel('Price') +ax1.legend(loc='best') + +ax2 = plt.subplot(3, 1, 2) +ax2.plot(data['Volume'], label='Volume') +ax2.grid() +ax2.legend(loc='best') +ax2.set_ylabel('Volume') + +ax3 = plt.subplot(3, 1, 3) +ax3v = ax3.twinx() +colors = data.VolumePositive.map({True: 'g', False: 'r'}) +ax3v.bar(data.index, data['Volume'], color=colors, alpha=0.4) +ax3.set_ylabel('Volume') +ax3.grid() +ax3.set_xlabel('Date') + + +# Candlestick +print('Candlestick') +from matplotlib import dates as mdates +dfc = data.copy() +dfc['VolumePositive'] = dfc['Open'] < dfc['Adj Close'] +#dfc = dfc.dropna() +dfc = dfc.reset_index() +dfc['Date'] = pd.to_datetime(dfc['Date']) +dfc['Date'] = dfc['Date'].apply(mdates.date2num) +dfc.head() + +from mpl_finance import candlestick_ohlc + +fig = plt.figure(figsize=(14,10)) +ax1 = plt.subplot(3, 1, 1) +candlestick_ohlc(ax1,dfc.values, width=0.5, colorup='g', colordown='r', alpha=1.0) +ax1.xaxis_date() +ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y')) +ax1.grid(True, which='both') +ax1.minorticks_on() +ax1v = ax1.twinx() +colors = dfc.VolumePositive.map({True: 'g', False: 'r'}) +ax1v.bar(dfc.Date, dfc['Volume'], color=colors, alpha=0.4) +ax1v.axes.yaxis.set_ticklabels([]) +ax1v.set_ylim(0, 3*data.Volume.max()) +ax1.set_title('Stock '+ symbol +' Closing Price') +ax1.set_ylabel('Price') + +ax2 = plt.subplot(3, 1, 2) +ax2.plot(data['Volume'], label='Volume') +ax2.grid() +ax2.legend(loc='best') +ax2.set_ylabel('Volume') + +ax3 = plt.subplot(3, 1, 3) +ax3v = ax3.twinx() +colors = data.VolumePositive.map({True: 'g', False: 'r'}) +ax3v.bar(data.index, data['Volume'], color=colors, alpha=0.4) +ax3.set_ylabel('Volume') +ax3.grid() +ax3.set_xlabel('Date') diff --git a/Python_10_Plot_Bokeh_Candlestick.py b/Python_10_Plot_Bokeh_Candlestick.py new file mode 100644 index 0000000..044827b --- /dev/null +++ b/Python_10_Plot_Bokeh_Candlestick.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Nov 27 08:09:11 2020 + +@author: Tin +""" +# Plot Candlestick in bokeh +import pandas as pd # Dataframe Library +from math import pi +from bokeh.plotting import figure, show, output_file + +pd.set_option('max_columns', None) # To show all columns + +import yfinance as yf +yf.pdr_override() + + +# input +symbol = 'AAPL' +start = '2019-12-01' +end = '2020-01-01' + + +# dataframe +df = yf.download(symbol,start,end) + +df["Date"] = pd.to_datetime(df.index) + +mids = (df['Open'] + df['Adj Close'])/2 +spans = abs(df['Adj Close']-df['Open']) + +inc = df['Adj Close'] > df['Open'] +dec = df['Open'] > df['Adj Close'] +w = 12*60*60*1000 # half day in ms + +TOOLS = "pan,wheel_zoom,box_zoom,reset,save" + +p = figure(x_axis_type="datetime", tools=TOOLS, plot_width=1000, title = symbol + " Candlestick") +p.xaxis.major_label_orientation = pi/4 +p.grid.grid_line_alpha=0.3 + +p.segment(df.Date, df.High, df.Date, df.Low, color="black") +p.vbar(df.Date[inc], w, df.Open[inc], df['Adj Close'][inc], fill_color="#D5E1DD", line_color="black") +p.vbar(df.Date[dec], w, df.Open[dec], df['Adj Close'][dec], fill_color="#F2583E", line_color="black") + +output_file("candlestick.html", title= symbol + " candlestick") + +show(p) # open a browser \ No newline at end of file diff --git a/Python_11_scrape_yahoo_Key_Statistics.py b/Python_11_scrape_yahoo_Key_Statistics.py new file mode 100644 index 0000000..b69a49d --- /dev/null +++ b/Python_11_scrape_yahoo_Key_Statistics.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Dec 4 19:30:37 2020 + +@author: Tin +""" +import pandas as pd +import requests +from bs4 import BeautifulSoup + +res = requests.get('https://finance.yahoo.com/quote/AMD/key-statistics?p=AMD') +soup = BeautifulSoup(res.content,'lxml') +table = soup.find_all('table')[0] +df = pd.read_html(str(table))[0] + +print(df) \ No newline at end of file diff --git a/Python_12_scrape_finance_news.py b/Python_12_scrape_finance_news.py new file mode 100644 index 0000000..b4605c0 --- /dev/null +++ b/Python_12_scrape_finance_news.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Dec 4 19:30:37 2020 + +@author: Tin +""" +# pip install newspaper3k +import newspaper +from newspaper import Article + +url = "https://finance.yahoo.com/" + +# download and parse article +article = Article(url) +article.download() +article.parse() + +# print article text +print(article.text) + +site = newspaper.build("https://finance.yahoo.com/") + +# get list of article URLs +print(site.article_urls()) + diff --git a/README.md b/README.md index 425ad29..f7c268e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Simple Stock Analysis in Python -#### This is tutorial for Simple Stock Analysis. It is very simple and easy to understand for beginners that wants to learn about stock analysis and wants to become a quant. In addition, this tutorial is for people that want to learn coding in python to analyze the stock market. However, if you already know about stock analyze or coding in python this will not be for you. +#### This is tutorial for Simple Stock Analysis in jupyter and python. There are two versions for stock tutorial. One is jupyter version and the other one is python. Jupyter also makes jupyter notebooks, which used to be called iPython notebooks. However, Python is an interpreted high-level programming language. It is very simple and easy to understand for beginners that wants to learn about stock analysis and wants to become a quant. In addition, this tutorial is for people that want to learn coding in python to analyze the stock market. However, if you already know about stock analyzing or coding in python this will not be for you. You can check out more advance coding: https://github.com/LastAncientOne/Stock_Analysis_For_Quant. ### The order is from #1 through #26. #### You learn number 1 first and you go in order. Once you finished, you will know how to write codes in python and understand finance and stock market. :congratulations: @@ -20,6 +20,10 @@ Jupyter Notebook Python 3 * matlibplot * sklearn + +## How to install library +### conda install -c ranaroussi yfinance +### pip install yfinance --upgrade --no-cache-dir ### Input Pick a symbol, you want to analyze. @@ -95,8 +99,8 @@ I tried to make it simple as possible to understand finance data and how to anal If you want to learn different simple function for stock analysis, go to: https://github.com/LastAncientOne/100_Day_Challenge -If you want to learn more advance stock analyze or different language in finance, go to: -https://github.com/LastAncientOne/Stock-Analysis +If you want to learn more advance stock analysis or different language in finance, go to: +https://github.com/LastAncientOne/Stock_Analysis_For_Quant If you into deep learning or machine learning for finance, go to: https://github.com/LastAncientOne/Deep-Learning-Machine-Learning-Stock @@ -115,6 +119,6 @@ https://www.investopedia.com/terms/t/trendline.asp (Understand Trendline) * Tin Hang ## Disclaimer -🔻 Do not use this code for investing or trading in the stock market. Stock market is unpredictable. :chart_with_upwards_trend: :chart_with_downwards_trend: However, if you are interest in the stock market, you should read many :books: books that relate to the stock market, investment, or finance. The more books you read, the more understand and the more knowledge you gain. On the other hand, if you are into quant or machine learning, read books about :blue_book: finance engineering, machine trading, algorithmic trading, and quantitative trading. +🔻 Do not use this code for investing or trading in the stock market. Stock market is unpredictable. :chart_with_upwards_trend: :chart_with_downwards_trend: However, if you are interest in the stock market, you should read many :books: books that relate to the stock market, investment, or finance. The more books you read, the more you will understand and the more knowledge you gain. On the other hand, if you are into quant or machine learning, read books about :blue_book: finance engineering, machine trading, algorithmic trading, and quantitative trading. ## This is not get rich quick and is for researching and educational purposes. diff --git a/candlestick.html b/candlestick.html new file mode 100644 index 0000000..3cf75aa --- /dev/null +++ b/candlestick.html @@ -0,0 +1,85 @@ + + + + + + + +
+ + +