Percambahan pengaturcaraan dan teknologi yang digunakan untuk kewangan tidak dapat dielakkan, dan pertumbuhan nampaknya tidak pernah merosot. Salah satu bahagian paling menarik dalam pengaturcaraan gunaan ialah tafsiran dan visualisasi data stok sejarah atau masa nyata.
Kini, untuk memvisualisasikan data umum dalam python, modul seperti matplotlib, seaborn dsb. digunakan, tetapi apabila ia melibatkan visualisasi data kewangan, Plotly akan menjadi pilihan pertama kerana ia menyediakan visual interaktif Fungsi terbina dalam . Di sini saya ingin memperkenalkan wira yang tidak didendang, yang tidak lebih daripada perpustakaan saudara perpustakaan mplfinance matplotlib.
Kita semua tahu betapa serba boleh pakej matplotlib dan boleh memplot sebarang jenis data dengan mudah. Malah carta kewangan seperti candlestick boleh dilukis menggunakan pakej matplotlib, tetapi kita perlu bermula dari awal.
Baru-baru ini, saya mendapat tahu bahawa terdapat modul berasingan yang dipanggil mplfinance khusus untuk mencipta visualisasi kewangan lanjutan. Dalam artikel ini, kami akan melihat dengan lebih mendalam pustaka Python ini dan meneroka keupayaannya untuk menjana pelbagai jenis carta.
Mengimport pakej yang diperlukan ke dalam persekitaran ular sawa kami adalah langkah penting. Dalam artikel ini, kami memerlukan tiga pakej, iaitu panda untuk memproses bingkai data, permintaan untuk memanggil API dan mengekstrak data stok, dan mplfinance untuk mencipta carta kewangan. Bagi anda yang masih belum memasang pakej ini, salin kod ini ke dalam terminal anda:
pip install pandas pip install requests pip install mplfinance
Selepas anda selesai memasang pakej, tiba masanya untuk mengimportnya ke dalam ular sawa kami persekitaran Hit.
import pandas as pd import requests import mplfinance as mf
Kini, kami telah mengimport semua pakej yang diperlukan. Mari kita tarik data stok sejarah Amazon menggunakan titik akhir API yang disediakan oleh 12data.com[1]. Sehingga itu, nota mengenai 12data.com: 12data ialah salah satu penyedia data pasaran terkemuka dengan sejumlah besar titik akhir API untuk semua jenis data pasaran. Berinteraksi dengan API yang disediakan oleh Twelve Data adalah sangat mudah dan mempunyai salah satu dokumentasi terbaik yang pernah ada. Selain itu, pastikan anda mempunyai akaun di 12data.com, barulah anda akan mendapat akses kepada kunci API anda (elemen penting untuk mengekstrak data menggunakan API).
def get_historical_data(symbol, start_date): api_key = 'YOUR API KEY' api_url = f'https://api.twelvedata.com/time_series?symbol={symbol}&interval=1day&outputsize=5000&apikey={api_key}' raw_df = requests. get(api_url).json() df = pd.DataFrame(raw_df['values']).iloc[::-1].set_index('datetime').astype(float) df = df[df.index >= start_date] df.index = pd.to_datetime(df.index) return df amzn = get_historical_data('AMZN', '2021-01-01') amzn.tail()
Output:
Kod Penerangan
Perkara pertama yang kami lakukan ialah mentakrifkan fungsi yang dipanggil 'get_historical_data' yang mengambil simbol stok ('simbol') dan tarikh mula parameter data sejarah ('start_date').
Di dalam fungsi kami mentakrifkan kunci API dan URL dan menyimpannya ke dalam pembolehubah masing-masing.
Seterusnya, kami menggunakan fungsi 'dapat' untuk mengekstrak data sejarah dalam format JSON dan menyimpannya ke dalam pembolehubah 'raw_df'. Selepas melakukan beberapa pembersihan dan pemformatan data JSON mentah, kami mengembalikannya sebagai Pandas DataFrame kosong.
Akhir sekali, kami memanggil fungsi yang dicipta untuk menarik data sejarah Amazon bermula dari awal 2021 dan menyimpannya ke dalam pembolehubah "amzn".
Carta OHLC ialah carta bar yang menunjukkan harga pembukaan, tinggi, rendah dan penutupan untuk setiap tempoh.
Carta OHLC berguna kerana ia menunjukkan empat titik data utama dalam satu tempoh masa, dengan ramai pedagang menganggap harga penutupan adalah yang paling penting. Ia juga membantu untuk menunjukkan peningkatan atau penurunan momentum. Apabila pembukaan dan penutupan berjauhan, prestasi adalah kuat, dan apabila pembukaan dan penutupan dekat, prestasi tidak pasti atau lemah.
Tinggi dan Rendah menunjukkan julat harga penuh untuk tempoh tersebut, membantu menilai turun naik1[2]. Sekarang untuk mencipta carta OHLC menggunakan mplfinance, hanya satu baris kod:
mf.plot(amzn.iloc[:-50,:])
Dalam kod di atas, kami mula-mula memanggil fungsi plot dan di dalamnya kami mengekstrak The Amazon OHLC data dihiris ke dalam 50 bacaan terakhir, ini hanya untuk menjadikan carta lebih jelas supaya elemen kelihatan. Baris tunggal kod di atas akan menghasilkan output yang kelihatan seperti ini:
Carta OHLC
Peniaga menggunakan carta candlestick berdasarkan masa lalu Corak menentukan kemungkinan pergerakan harga. Candlestick berguna apabila berdagang kerana ia memaparkan empat mata harga (buka, tutup, tinggi dan rendah) sepanjang tempoh masa yang ditentukan oleh pedagang.
Bahagian paling menarik dalam carta jenis ini ialah ia turut membantu pedagang membaca sentimen, yang merupakan pemacu nombor satu pasaran itu sendiri2[3]. Untuk menjana carta candlestick menggunakan mplfinance, kami hanya menambah parameter lain, plot parameter jenis fungsi dan candle disebut di dalamnya. Kodnya kelihatan seperti ini:
mf.plot(amzn.iloc[:-50,:], type = 'candle')
Kod di atas akan menjana carta candlestick seperti ini:
烛台图
砖形图( Renko chart)是一种使用价格变动构建的图表,而不是像大多数图表那样同时使用价格和标准化时间间隔。该图表看起来像一系列砖块,当价格移动指定的价格金额时会创建一个新砖块,并且每个块都与前一个砖块成 45 度角(向上或向下)。Renko 图表的主要用途是过滤掉噪音并帮助交易者更清楚地看到趋势,因为所有小于框大小的运动都被过滤掉 3[4] 。
据我所知,mplfinance 是唯一提供 Renko 图表的 Python 库,也是我们接下来要看到的,这就是为什么这个包在金融可视化方面具有强大优势的原因。现在要创建一个 Renko,我们只需要在函数renko的type参数中指定plot。Renko 图表的代码如下所示:
mf.plot(amzn, type = 'renko')
我们还可以向plot函数添加一个额外的参数,该参数是根据renko_params我们的需要和其他类似类型修改砖块大小的参数,但我更喜欢默认的。上面的代码生成了一个看起来像这样的砖形图:
砖形图
点数图,简称 P&F 图,类似于 Renko 图,它在不考虑时间流逝的情况下绘制资产的价格走势。与其他一些类型的图表(例如烛台)相反,烛台标志着资产在设定的时间段内的变动程度,而 P&F 图表使用由堆叠的 X 或 O 组成的列,每个列代表一定数量的价格变动。X 代表价格上涨,而 O 代表价格下跌。当价格反转反转量 4[5] 时,会在 O 之后形成新的 X 列或在 X 之后形成新的 O 列。
支持点数图的函数在其他地方找不到,只能在 mplfinance 库中找到,而且它还使我们可以通过仅pnf在函数的type参数中指定来创建图表的过程更容易plot。代码如下所示:
mf.plot(amzn, type = 'pnf')
点数图
mplfinance 包不仅限于生成不同类型的图表,还使我们能够通过添加简单移动平均线 (SMA) 和交易量等附加指标使这些图表更具洞察力。对于那些不知道这两者的人来说,成交量是交易者在特定时间范围内买卖的股票数量,而简单移动平均线 (SMA) 只不过是特定时间段的平均价格。它是一种技术指标,广泛用于创建交易策略。
用 matplotlib 绘制这些数据需要一千年,而 mplfinance 允许我们只用一行代码就可以完成这项任务。除了type参数之外,我们只需要引入另外两个参数,一个是mav我们必须指定每个 SMA 的回溯期的参数,另一个是volume我们必须提到的参数,True 如果我们想将成交量图添加到我们的图表中,或者False 我们不想。这两个指标的代码如下所示:
mf.plot(amzn, mav = (10, 20), type = 'candle', volume = True)
可以通过两种方式修改和试验上述代码。第一种方法显然是尝试不同类型的图表。在上述代码中,我们提到我们的图表类型是烛台,但你可以将其更改为 OHLC、Renko 甚至 P&F 图表,并观察每个图表及其两个附加指标的外观。下一个方法是使用mav我们可以添加任意数量的具有不同回顾期的 SMA的参数。上述代码的输出如下所示:
如果你想知道如何保存这些财务可视化中的任何一个,只需添加另一个参数,savefig即你只需提及其文件名的参数,其余部分将被处理。假设你想保存上面的图,那么你必须遵循的代码如下所示:
mf.plot(amzn, mav = (10, 20), type = 'candle', volume = True, savefig = 'amzn.png')
这就是你为保存精彩的财务可视化所需要做的全部工作。很容易,对吧?
在我看来,与Plotly或Altair等库相比,mplfinance是绘制金融数据最强大的库。本文只是简单介绍了使用mplfinance可以实现的功能,但是这个了不起的库附带了许多新特性。它允许我们添加自定义的技术指标数据,并与实际的图表一起绘制,我们可以自定义整个模板,甚至图表中的每一个元素,添加趋势线,等等。
这个库最好的部分是它的易用性,并帮助我们用一行代码生成高级的财务可视化。虽然像Plotly这样的包有创建这些图表的内置函数,但不可能在一行代码中完成。
mplfinance现在唯一的缺点是它糟糕的文档,这使得人们甚至不知道这个包是关于什么的。文档是一个至关重要的方面,当涉及到开源项目时,文档应该被认为是至关重要的。特别像mplfinance这样的关键和有用的项目必须有清晰文档,对其提供的工具和功能有明确的解释。
到这里,你看完了这篇文章。如果你忘记了图表的代码,不要担心,最后我提供了完整的源代码。你也可以收藏本文,等需要用到的时候再查看。
import pandas as pd import requests import mplfinance as mf # Extracting stock data def get_historical_data(symbol, start_date): api_key = 'YOUR API KEY' api_url = f'https://api.twelvedata.com/time_series?symbol={symbol}&interval=1day&outputsize=5000&apikey={api_key}' raw_df = requests.get(api_url).json() df = pd.DataFrame(raw_df['values']).iloc[::-1].set_index('datetime').astype(float) df = df[df.index >= start_date] df.index = pd.to_datetime(df.index) return df amzn = get_historical_data('AMZN', '2021-01-01') amzn.tail() # 1. OHLC Chart mf.plot(amzn.iloc[:-50,:]) # 2. Candlestick Chart mf.plot(amzn.iloc[:-50,:], type = 'candle') # 3. Renko Chart mf.plot(amzn, type = 'renko') # 4. Point and Figure Chart mf.plot(amzn, type = 'pnf') # 5. Technical chart mf.plot(amzn, mav = (10, 20), type = 'candle', volume = True) # 6. Plot customization mf.plot(amzn, mav = (5, 10, 20), type = 'candle', volume = True, figratio = (10,5), style = 'binance', title = 'AMZN STOCK PRICE', tight_layout = True) # 7. Saving the plot mf.plot(amzn, mav = (5, 10, 20), type = 'candle', volume = True, figratio = (10,5), style = 'binance', title = 'AMZN STOCK PRICE', tight_layout = True, savefig = 'amzn.png')
Atas ialah kandungan terperinci Bagaimana untuk membuat carta kewangan yang kompleks menggunakan kod Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!