版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
目錄TOC\o"1-3"\h\u289301引言 基于Python的股票數(shù)據(jù)分析系統(tǒng)設(shè)計作者:劉一平指導(dǎo)老師:陳學(xué)明(海南師范大學(xué)物理與電子工程學(xué)院,海口,571158)摘要:隨著數(shù)字經(jīng)濟的不斷深入拓展,股票數(shù)據(jù)的深入分析和預(yù)測逐漸變?yōu)橥顿Y者關(guān)注的重點。此項研究利用Python語言爬取股票數(shù)據(jù),通過顯示K線圖對數(shù)據(jù)進行量化及可視化。再使用移動平均線分析、線性回歸及時間序列自回歸的三種算法,預(yù)測得出未來股票的上漲概率。綜合考慮不同算法的優(yōu)點,使預(yù)測結(jié)果更全面,為投資者提供一定價值的參考。在數(shù)字經(jīng)濟化的趨勢下,數(shù)據(jù)分析在金融界的使用正在逐漸增多。本此設(shè)計希望通過對股票數(shù)據(jù)進行分析預(yù)測,為投資者提供更加精確和高效的決策意見。關(guān)鍵詞:python;股票;數(shù)據(jù)可視化;股市預(yù)測1引言1.1研究意義股票市場由于不穩(wěn)定、波動等原因可能使投資者面臨著各種各樣的風(fēng)險,對股票進行深入細致的分析將幫助投資者更便捷地了解股票,并減少其投資風(fēng)險。在信息技術(shù)飛速發(fā)展,大數(shù)據(jù),人工智能等先進技術(shù)被廣泛運用的今天,可以幫助投資者快速,精準(zhǔn)地發(fā)現(xiàn)并把握投資中潛在的風(fēng)險與機會。綜合不同數(shù)據(jù)源進行研究分析可以發(fā)現(xiàn)股票的未來走向,這將給投資方帶來更廣闊的選擇空間。在金融科技(FinTech)的演進中,股票數(shù)據(jù)分析起到了不可或缺的作用,它為金融領(lǐng)域的創(chuàng)新和轉(zhuǎn)型提供了推動力。在大數(shù)據(jù),人工智能和機器學(xué)習(xí)技術(shù)手段的推動下,金融機構(gòu)能夠研發(fā)更加智能有效的投資工具與交易系統(tǒng),從而提高服務(wù)水平與競爭力。Python是一種強大且易學(xué)易用的編程語言之一,也是股票數(shù)據(jù)分析中優(yōu)選的工具。Python具有豐富的數(shù)據(jù)分析庫(如Pandas、NumPy、Matplotlib等)和人工智能庫(如TensorFlow、PyTorch等),能夠支持數(shù)據(jù)獲取,清洗和分析,直至模型訓(xùn)練和預(yù)測的每一個環(huán)節(jié),對股票數(shù)據(jù)分析具有有力的技術(shù)支持。所以探討如何將Python運用到股票數(shù)據(jù)分析中,無論從理論上還是從實踐上都有很大的意義。1.2研究現(xiàn)狀目前,Python在股票數(shù)據(jù)分析領(lǐng)域具有廣泛的應(yīng)用,它提供了豐富的處理庫,如Pandas、NumPy和Quandl等。投資者可以使用這些庫來從各種數(shù)據(jù)源(如YahooFinance、AlphaVantage等)獲取股票價格、交易量、財務(wù)報表等數(shù)據(jù),并進行數(shù)據(jù)清洗、格式化和整合。何雨峰,許超,黃蘭運用Python爬蟲技術(shù)獲取數(shù)據(jù),使用DEA方法構(gòu)建CCR模型進行數(shù)據(jù)分析,對不同財務(wù)狀況的中小企業(yè)在融資過程的優(yōu)勢做出比較,為企業(yè)融資提出建議REF_Ref29873\r\h[1]。李雪采用多線程Python網(wǎng)絡(luò)爬蟲技術(shù)對股吧內(nèi)的相關(guān)信息進行爬取,并對測度網(wǎng)絡(luò)輿情方法進行改進,通過基于情感詞典法的文本挖掘技術(shù)進行數(shù)據(jù)分析,構(gòu)建“關(guān)注度”“情緒得分”和“意見分歧”共3個網(wǎng)絡(luò)輿情指數(shù)REF_Ref29912\r\h[2]。Python中的一些庫的提供了強大的繪圖功能,如Matplotlib、Seaborn和Plotly,可以將股票數(shù)據(jù)以圖表、折線圖、柱狀圖等形式直觀地展示出來,幫助投資者直觀地理解市場趨勢和規(guī)律。李思佳用Python實現(xiàn)了股票交易的大數(shù)據(jù)可視化分析,其中著重剖析了特斯拉汽車與比亞迪這二個股票在最近五年內(nèi)的股價、成交額等的具體變動情形。該成果便于相關(guān)人士在融資流程中更靈活的對股票交易數(shù)據(jù)進行分類,為股票投資提供決策支持REF_Ref29951\r\h[3]。王子豪通過使用Python,對股價信息進行了可視化管理,從信息可視化理論出發(fā),提出了優(yōu)質(zhì)高效的大數(shù)據(jù)信息,并利用數(shù)據(jù)挖掘方法對微軟、蘋果、谷歌等企業(yè)多只股價趨勢展開了深入研究REF_Ref30036\r\h[4]。Python在量化交易和算法交易方面有著廣泛的應(yīng)用。通過使用量化交易框架如Zipline、Backtrader和PyAlgoTrade等,投資者可以快速開發(fā)和測試各種交易策略,并利用機器學(xué)習(xí)和人工智能技術(shù)進行模型訓(xùn)練和優(yōu)化,實現(xiàn)自動化交易和風(fēng)險管理。梁國鵬,劉力軍通過對量化交易系統(tǒng)展開研究,對現(xiàn)有交易策略進行分析并根據(jù)其存在的不足進行改進,以此實現(xiàn)量化交易系統(tǒng)的有效運行,進行回測來指導(dǎo)投資者并為其帶來超額收益REF_Ref30075\r\h[5]。譚軍龍,李慧瑩提出一種基于Python的量化投資交易系統(tǒng)的設(shè)計,用于個人投資者的自動化量化交易REF_Ref30104\r\h[6]。魏玉嬌選取了交通銀行、中國銀行、中信銀行三只股票的日交易數(shù)據(jù)為樣本,利用Python進行了量化通道策略及其與配對交易結(jié)合的實證研究REF_Ref30140\r\h[7]。利用Python的機器學(xué)習(xí)庫如Scikit-learn、TensorFlow和PyTorch等,投資者可以構(gòu)建各種預(yù)測模型和分類算法,用于股票價格預(yù)測、市場情緒分析和風(fēng)險評估等方面。尹清通過Python中的機器學(xué)習(xí)算法分析攜出用戶特征,建立易攜出用戶模型預(yù)測,提前定位易攜出客戶,進行維穩(wěn)挽留,有效降低了攜出用戶的概率REF_Ref30219\r\h[8]。孟平,龍華秋研究領(lǐng)域包括對流量特性的獲取以及有關(guān)機器學(xué)習(xí)方法的描述,首先通過從日常捕獲的流量中來獲取相應(yīng)的特性,接著通過對機器學(xué)習(xí)模型的評估,來快速確定對其是否存在威脅性.然后經(jīng)過使用數(shù)據(jù)集對機器學(xué)習(xí)的模型進行評價,其準(zhǔn)確率可以達到99%REF_Ref30294\r\h[9]。張凱姣借助Python平臺設(shè)計并實現(xiàn)了基于模塊化設(shè)計的成紗質(zhì)量預(yù)測系統(tǒng),設(shè)計了預(yù)測模塊,數(shù)據(jù)處理模塊以及可視化模塊,并且提供了便捷的GUI界面REF_Ref30333\r\h[10]。1.3研究內(nèi)容構(gòu)建一個股票數(shù)據(jù)分析與預(yù)測系統(tǒng),該系統(tǒng)能夠?qū)崿F(xiàn)以下功能:(1)股票數(shù)據(jù)爬?。和ㄟ^網(wǎng)絡(luò)爬蟲技術(shù)得到股票市場歷史價格數(shù)據(jù)及K線圖,保證數(shù)據(jù)及時完整。(2)數(shù)據(jù)處理及特征提取:將爬取的股票數(shù)據(jù)經(jīng)過清洗,加工并提取特征,從而構(gòu)造出一個高效的特征集合來訓(xùn)練模型。(3)機器學(xué)習(xí)模型搭建:采用了移動平均線分析法,趨勢回歸線分析法和時間序列自回歸分析法3種不同傳統(tǒng)學(xué)習(xí)方法,將特征提取得到的股票數(shù)據(jù)建模并加以分析,從而預(yù)測出未來股票價格的變化趨勢。(4)系統(tǒng)界面設(shè)計:設(shè)計用戶友好的界面,將數(shù)據(jù)分析和預(yù)測結(jié)果直觀地呈現(xiàn)給用戶,提供可視化的股票價格走勢圖表,以提高用戶的體驗感和使用便捷度。1.4設(shè)計思路及方法本研究首先通過爬蟲技術(shù)從財經(jīng)網(wǎng)站獲取股票數(shù)據(jù)。然后,利用Python的Pandas庫對數(shù)據(jù)進行清洗和預(yù)處理,包括缺失值處理、異常值檢測和數(shù)據(jù)標(biāo)準(zhǔn)化等步驟REF_Ref3070\r\h[13]。通過對股票數(shù)據(jù)進行量化和可視化,提取了包括開盤價、收盤價、最高價、最低價、成交量等在內(nèi)的多個特征值,并顯示出該只股票的K線圖,使用戶可以更直觀高效地讀取股票數(shù)據(jù)。另外在展示K線圖時,用戶可以自由縮放時間軸,查看不同時間段的股票走勢。然后,選取了移動平均線,趨勢線,基于歷史數(shù)據(jù)的分析三種算法進行模型訓(xùn)練。移動平均線是一種平滑股價波動的方法,能夠消除短期價格波動帶來的噪聲,凸顯價格走勢的長期趨勢。趨勢線則是一種描繪股價走勢的方法,可以直觀地顯示價格變化的趨勢?;跉v史數(shù)據(jù)的分析方法則利用股票價格的歷史數(shù)據(jù)來預(yù)測未來價格走勢。通過對訓(xùn)練集的學(xué)習(xí),各模型能夠預(yù)測未來一段時間內(nèi)的股票價格上漲的概率。最后,將所有程序功能合并開發(fā)全新的頁面,方便用戶的使用。流程如圖1-1-4所示:圖1-4-4系統(tǒng)流程圖2相關(guān)技術(shù)介紹2.1Python語言Python是一種面向?qū)ο蟮慕忉屝陀嬎銠C程序設(shè)計語言,易于學(xué)習(xí),語法簡潔優(yōu)雅,支持動態(tài)類型,且功能強大,具有豐富的標(biāo)準(zhǔn)庫和第三方庫。標(biāo)準(zhǔn)庫是Python自帶的工具庫,由Python官方作者開發(fā)和發(fā)布,比如os,time等,在Python安裝后即可使用。第三方庫是全球Python開發(fā)者共同創(chuàng)建并貢獻出的工具庫,需另行安裝方可應(yīng)用,例如Pandas、Flask、sk-learn等。得益于Python的廣泛流行和開發(fā)者社區(qū)的活躍性,諸多第三方庫應(yīng)運而生,助力實現(xiàn)多樣化的功能。2.2Pandas庫Pandas是公認的數(shù)據(jù)分析領(lǐng)域的一個核心工具,在Python各大數(shù)據(jù)分析庫當(dāng)中占據(jù)著舉足輕重的地位。它強大,豐富的數(shù)據(jù)組織和管理能力,使得它成為功能強大,切實可行的數(shù)據(jù)管理平臺。它向用戶展示一個高效,靈活,易懂的數(shù)據(jù)架構(gòu),使應(yīng)對各種數(shù)據(jù)市場更加簡明,直觀,快捷。Pandas有處理下列類型資料的功能:(1)數(shù)據(jù)與SQL或Excel的表格有相似之處。(2)時間序列數(shù)據(jù)中的有序與無序(具有非固定的頻率)。(3)帶有行和列標(biāo)簽的矩陣數(shù)據(jù)。(4)各種不同類型的觀察和統(tǒng)計數(shù)據(jù)集。Pandas這個數(shù)據(jù)處理庫主要呈現(xiàn)了兩種關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):Series(一維)和DataFrame(二維),這兩種結(jié)構(gòu)能夠處理金融、統(tǒng)計、社會科學(xué)、工程等多個領(lǐng)域中的大量關(guān)鍵案例REF_Ref4053\r\h[14]。3.3Tushare數(shù)據(jù)接口庫Tushare作為Python數(shù)據(jù)接口庫沒有任何費用和開放性,專門用于收集與金融有關(guān)的資料。該平臺向投資者,開發(fā)者以及數(shù)據(jù)分析師們提供豐富的股票,期貨,基金及其他金融市場信息,推薦數(shù)據(jù)有助于投資者對市場進行風(fēng)險評估,制定交易策略以及支持投資決策。Python開發(fā)環(huán)境下的Tushare操作十分直觀方便,使用者能夠很容易獲得股票,指數(shù),基金以及其他與金融有關(guān)的信息,或通過API接口與Thrift接口實現(xiàn)數(shù)據(jù)查詢與合作操作。簡而言之,Tushare實質(zhì)上是一個方便獲取股票、期貨、基金等金融信息的工具,并且是完全免費的。Tushare公司提供與金融市場有關(guān)的多種資料。這些資料對評估市場風(fēng)險,制定交易策略和支持決策過程大有幫助。3.4NumPy庫NumPy是Python語言的一種擴展型程序庫,給使用者帶來了強大的向量和矩陣運算能力。利用這些工具,使用者可以更容易地完成最優(yōu)化、線性代數(shù)、統(tǒng)計微分、插值運算、特殊方程、傅里葉變換、信號處理和圖像處理以及常微分方程計算等科研與工程技術(shù)領(lǐng)域中常用的運算工作。所以,NumPy在提升運算質(zhì)量與便捷性領(lǐng)域起到了巨大作用。NumPy是一個開源的Python科學(xué)計算基礎(chǔ)數(shù)據(jù)庫,它是SciPy、Pandas等軟件的數(shù)據(jù)處理的基礎(chǔ)。它的主要特征及作用有以下方面:(1)強大的N維數(shù)組對象ndarray:這是一個類似于列表的數(shù)組對象,它描述了相同類型元素的集合。另外,它具有矢量運算、復(fù)雜廣播能力等快速、省時的多維數(shù)組特點,給使用者提供一種有效的數(shù)據(jù)處理手段。(2)標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)庫:為快速操作整組數(shù)據(jù)提供功能,不需要寫循環(huán),也就是內(nèi)置并行操作功能。在系統(tǒng)執(zhí)行一定的計算并有多個核心的情況下,NumPy將自動并行計算從而顯著提高計算的效率。(3)實用功能:包括線性代數(shù),傅里葉變換,隨機生成函數(shù),以及其他實用的功能,給各種計算帶來方便的運算。(4)數(shù)組與矩陣運算:NumPy可直接進行數(shù)組與矩陣運算而不需要循環(huán)以減少用戶寫代碼的復(fù)雜性。3股票數(shù)據(jù)獲取及預(yù)處理3.1爬蟲可行性爬蟲是一種在FOAF社區(qū)中廣受歡迎的術(shù)語。它會按照預(yù)先設(shè)定的規(guī)則,自動地抓取網(wǎng)絡(luò)信息中的程序或腳本。爬蟲的原理類似于人類在網(wǎng)絡(luò)環(huán)境中的做法,如通過網(wǎng)頁瀏覽和點擊網(wǎng)絡(luò)鏈接等多種方式來獲取網(wǎng)頁中的信息和數(shù)據(jù)。爬蟲系統(tǒng)會預(yù)先建立標(biāo)準(zhǔn),例如特定URL中的圖形和核心詞匯的出現(xiàn)次數(shù),再自動識別網(wǎng)站的信息,抓取并解讀其中的內(nèi)容。在網(wǎng)絡(luò)上,爬蟲在數(shù)據(jù)收集中至關(guān)重要。在搜索引擎、數(shù)據(jù)審查、價格控制、社交媒體監(jiān)督等多個情鏡中,它的地位都是不容忽視的。搜索引擎可以利用網(wǎng)絡(luò)爬蟲技術(shù)來搜集網(wǎng)絡(luò)上的資料,同時創(chuàng)建相應(yīng)的索引,這可以讓用戶迅速地找到到他們所需的內(nèi)容。數(shù)據(jù)分析專家可以通過采取爬蟲方法來搜集眾多的數(shù)據(jù),并且深入挖掘和解析這些數(shù)據(jù),進而揭示其背后的深層次價值。3.2爬取數(shù)據(jù)的流程Tushare是一個面向金融數(shù)據(jù)的Python第三方庫,提供了豐富的金融數(shù)據(jù)接口,可以獲取股票、基金、期貨等市場數(shù)據(jù)。以下是使用Tushare進行數(shù)據(jù)爬取的一般流程:圖3-2-1Tushare爬蟲流程3.3爬蟲重要程序(1)獲取接口token。在使用Tushare接口之前,首先需要獲取一個獨特的接口token。打開Tushare官方網(wǎng)站(/),注冊并登錄賬戶。登錄成功后,請點擊頁面右上角的個人頭像,進入用戶中心。在用戶中心頁面,點擊一個名為“接口token”的選項,即可獲取專屬接口token。圖3-3-1Tushare接口獲得(2)導(dǎo)入庫并設(shè)置token。importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportmplfinanceasmpfimporttushareastspro=_api('4e0c27861ed60fd7d119dd3493aeafca4603c36e8cfbac912c99bc18')(3)獲取股票數(shù)據(jù),以下程序爬取為深市A股2023年到2024年的歷史數(shù)據(jù),可以根據(jù)不同需要調(diào)整從而獲得目標(biāo)數(shù)據(jù)。daily=_bar('000001.SZ',start_date='2023-04-13',end_date='20240416')daily.index=daily.trade_datedaily=daily.rename(index=pd.Timestamp)3.4數(shù)據(jù)預(yù)處理Python中進行爬蟲后的數(shù)據(jù)預(yù)處理通常包括以下步驟:(1)數(shù)據(jù)清洗:清洗數(shù)據(jù)是指將數(shù)據(jù)中的缺失值、重復(fù)值以及異常值等處理完畢,保證數(shù)據(jù)的質(zhì)量。在Python環(huán)境下,可以使用pandas庫清洗數(shù)據(jù),其中使用dropna()功能去除數(shù)據(jù)缺失值,通過使用drop_duplicates()函數(shù)來消除重復(fù)數(shù)據(jù),并運用條件判斷或統(tǒng)計方法來識別和處理異常數(shù)據(jù)。(2)數(shù)據(jù)轉(zhuǎn)換所謂數(shù)據(jù)轉(zhuǎn)換是指將數(shù)據(jù)從一種形式轉(zhuǎn)換為另一種形式,將日期時間轉(zhuǎn)換為標(biāo)準(zhǔn)形式,將數(shù)據(jù)類型轉(zhuǎn)換為適合分析需要的形式??衫胮andas庫中to_datetime()功能把日期時間字符串變換成日期時間格式、用astype()功能把數(shù)據(jù)類型變換成指定類型等等。(3)數(shù)據(jù)標(biāo)準(zhǔn)化數(shù)據(jù)標(biāo)準(zhǔn)化就是把數(shù)據(jù)按一定標(biāo)準(zhǔn)縮放到量綱與范圍一致,便于后續(xù)分析與建模的過程。常用標(biāo)準(zhǔn)化方法有Z-score標(biāo)準(zhǔn)化,Min-Max標(biāo)準(zhǔn)化等??梢允褂胹klearn庫中的StandardScaler和MinMaxScaler進行數(shù)據(jù)標(biāo)準(zhǔn)化操作。(4)特征提?。核^特征提取,就是從原始數(shù)據(jù)中抽取對分析與建模有幫助的特征。可針對特定問題采用不同特征提取方法如文本數(shù)據(jù)關(guān)鍵詞特征提取和時間序列數(shù)據(jù)周期性特征提取。(5)合并數(shù)據(jù):如果爬取的數(shù)據(jù)分散在多個文件或多個數(shù)據(jù)源中,需要將這些數(shù)據(jù)進行合并再進行分析??梢允褂胮andas庫中的merge()函數(shù)或concat()函數(shù)進行數(shù)據(jù)合并操作。(6)其他預(yù)處理操作:根據(jù)一些具體情況可能還需要進行其他預(yù)處理操作,比如處理文本中的數(shù)據(jù)的分詞、去除停用詞,處理圖像數(shù)據(jù)的縮放、裁剪等。再獲取數(shù)據(jù),把數(shù)據(jù)格式化成mplfinance的標(biāo)準(zhǔn)格式,取重要數(shù)據(jù)并重命名。部分代碼如下所示:data=file_namedata=data[::-1]self.data_source=file_namedata=data[['trade_date','open','close','high','low','vol','amount','pre_close','change','pct_chg']]data.columns=['date','open','close','high','low','volume','amount','pre_close','change','pct_chg']data['upper_lim']=np.round(data['pre_close']*1.10)data['lower_lim']=np.round(data['pre_close']*0.90)data['average']=np.round((data['high']+data['low'])/2)4數(shù)據(jù)量化及可視化在購買股票的時候,可以使用歷史數(shù)據(jù)來對當(dāng)前的股票的走勢進行預(yù)測,這就需要對股票的數(shù)據(jù)進行獲取并且進行一定的分析,人們是比較喜歡圖形化的界面的,因此,在這里采用一種可視化的方法來實現(xiàn)股票數(shù)據(jù)的分析。4.1基本界面設(shè)置(1)設(shè)置程序輸出界面的長寬比例,字體大小格式等。部分代碼如下所示:self.number_get.setFixedSize(350,70)my_color=mpf.make_marketcolors(up='r',down='g',edge='inherit',wick='inherit',volume='inherit')(2)plot()函數(shù)通過兩個屬性color和linestyle設(shè)置線段顏色和線段樣式,通過plt.show()方法立即顯示圖片。my_color=mpf.make_marketcolors(up='r',down='g',edge='inherit',wick='inherit',volume='inherit')my_style=mpf.make_mpf_style(marketcolors=my_color,figcolor='(0.82,0.83,0.85)',gridcolor='(0.82,0.83,0.85)')4.2輸出K線圖設(shè)計這里需要用到的庫是mplfinance,mplfinance是一款基于matplotlib的金融數(shù)據(jù)可視化分析模塊,它的前身是mpl_finance,相較于mpl_finance,mplfinance做了許多簡化,使其在使用上更為便捷。mplfinance為我們提供了豐富的圖表類型,如K線圖、技術(shù)指標(biāo)圖等,可以輕松地將復(fù)雜的市場數(shù)據(jù)轉(zhuǎn)化為直觀的圖表,便于我們觀察和分析市場走勢。Ta-lib庫專門用于金融市場數(shù)據(jù)的技術(shù)分析。其中集成了許多計算技術(shù)指標(biāo)功能,例如IFI,KDJ,OBV。這些指標(biāo)都采用特殊算法,可以很方便地計算出各種指標(biāo),然后對市場的動態(tài)有一個比較全面的掌握,也為制定交易策略提供了一定的借鑒,從而促進收益水平的提高。除了上述功能外,Ta-lib還擁有識別K線形狀的能力,它可以自動識別多種常見的K線形狀,為投資者的決策提供了強大的支持。這里首先利用Ta-lib對各項技術(shù)指標(biāo)及K線形態(tài)進行統(tǒng)計,再借助于mplfinance對數(shù)據(jù)進行可視化處理。這能夠更加直觀的了解市場數(shù)據(jù)趨勢及特點,以便于更好的投資分析。除此之外,這兩個數(shù)據(jù)庫也兼容Python編程語言,能夠輕松地與其他Python數(shù)據(jù)庫進行集成,從而提供更多的功能和可能性。部分代碼如下所示:(1)初始化交互式K線圖對象,歷史數(shù)據(jù)作為唯一的參數(shù)用于初始化對象。self.data=dataself.style=my_style(2)設(shè)置初始化的K線圖顯示區(qū)間起點為0,即顯示第0到第99個交易日的數(shù)據(jù)(前100個數(shù)據(jù)),設(shè)置ax1圖表中顯示的均線類型。self.idx_start=0self.idx_range=100self.avg_type='ma'self.indicator='macd'初始化figure對象,在figure上建立三個Axes對象并分別設(shè)置好它們的位置和基本屬性,在figure上預(yù)先放置文本并設(shè)置格式,文本內(nèi)容根據(jù)需要顯示的數(shù)據(jù)實時更新,這里可以生成當(dāng)天的股票數(shù)據(jù)信息,并顯示在界面最上方,如圖所示。圖4-2-2當(dāng)天股票數(shù)據(jù)顯示部分代碼如下:self.fig=mpf.figure(style=my_style,figsize=(12,8),facecolor=(0.82,0.83,0.85))fig=self.figself.ax1=fig.add_axes([0.08,0.25,0.88,0.60])self.ax2=fig.add_axes([0.08,0.15,0.88,0.10],sharex=self.ax1)self.ax2.set_ylabel('volume')self.ax3=fig.add_axes([0.08,0.05,0.88,0.10],sharex=self.ax1)self.ax3.set_ylabel('macd')self.t1=fig.text(0.50,0.94,'513100.SH-納斯達克指數(shù)ETF基金',**title_font)self.t2=fig.text(0.12,0.90,'開/收:',**normal_label_font)(4)添加K線圖重疊均線,根據(jù)均線類型添加移動均線或布林帶線。ifself.avg_type=='ma':ap.append(mpf.make_addplot(plot_data[['MA5','MA10','MA20','MA60']],ax=self.ax1))elifself.avg_type=='bb':ap.append(mpf.make_addplot(plot_data[['bb-u','bb-m','bb-l']],ax=self.ax1))(5)添加指標(biāo),根據(jù)指標(biāo)類型添加MACD或RSI或DEMA。以MACD指標(biāo)為例:ifself.indicator=='macd':ap.append(mpf.make_addplot(plot_data[['macd-m','macd-s']],ylabel='macd',ax=self.ax3))bar_r=np.where(plot_data['macd-h']>0,plot_data['macd-h'],0)bar_g=np.where(plot_data['macd-h']<=0,plot_data['macd-h'],0)ap.append(mpf.make_addplot(bar_r,type='bar',color='red',ax=self.ax3))ap.append(mpf.make_addplot(bar_g,type='bar',color='green',ax=self.ax3))(6)繪制圖表:mpf.plot(plot_data,ax=self.ax1,volume=self.ax2,addplot=ap,type='candle',style=self.style,datetime_format='%Y-%m',xrotation=0)print("show")plt.draw()plt.show()(7)根據(jù)最新的參數(shù),重新繪制整個圖表:all_data=self.dataplot_data=all_data.iloc[idx_start:idx_start+idx_range](8)最終得到的K線圖如下圖4-2-2所示,圖中有類似蠟燭的陽線和陰線,分別代表上漲和下跌,還有布林指標(biāo)折線圖,由上、中、下三條線組成,分別是上軌線、中軌線和下軌線,另外還有最下方的成交量bar圖,X軸為股票日期數(shù)據(jù),Y軸為成交數(shù)據(jù)。這些指標(biāo)都是判斷股票波動的重要數(shù)據(jù)。圖4-2-2K線圖5預(yù)測模型的實現(xiàn)5.1移動平均線分析移動平均線(MovingAverage,MA)是股票分析中常用的一種技術(shù),用于平滑價格數(shù)據(jù),以便更清晰地看到價格趨勢。通過對過去一段時期股票平均價格的測算,對今后價格走勢進行預(yù)測。這里選取了5日、10日、20日和60日的移動平均線作為比較基準(zhǔn),目的是為了評估短期與長期內(nèi)的價格走勢。當(dāng)短期移動平均線向上突破長期移動平均線時,我們通常認為這是一個買進的信號,意味著股票價格可能繼續(xù)上漲。反之,當(dāng)短期移動平均線向下突破長期移動平均線時,我們認為這是一個賣出信號,暗示股票價格可能出現(xiàn)下跌。簡單移動平均線(SimpleMovingAverage,SMA)的計算公式如下:SMAn=1其中,SMAn是窗口大小為n的簡單移動平均線,Pi是第i天的價格,n是移動平均線的窗口大小。移動平均線是一種遲滯性指標(biāo),這意味著它無法預(yù)測市場的即時變化。因此,需要將移動平均線與其他技術(shù)指標(biāo)相結(jié)合,以提高預(yù)測的準(zhǔn)確性。部分實現(xiàn)代碼如下:ap=[mpf.make_addplot(plot_data[['MA5','MA10','MA20','MA60']],ax=ax1)short_window=10medium_window=50long_window=200df_filled=pd.DataFrame(df,columns=df.columns)df_filled['short_mavg']=df_filled['close'].rolling(window=short_window).mean()df_filled['medium_mavg']=df_filled['close'].rolling(window=medium_window).mean()df_filled['long_mavg']=df_filled['close'].rolling(window=long_window).mean()df_filled['up_prob_sma']=math.tanh((df_filled['close']/(df_filled['short_mavg']+df_filled['long_mavg']))[len(df_filled['close'])-1])5.2趨勢線分析趨勢線分析(TrendLineAnalysis)采用擬合數(shù)據(jù)的線性模型來預(yù)測未來的價格走勢。在編寫代碼時,采用了線性回歸模型(LinearRegression)來對價格數(shù)據(jù)進行擬合。線性回歸是一種統(tǒng)計分析方法,通過建立自變量(如時間、歷史價格等)與因變量(未來價格)之間的線性關(guān)系,來預(yù)測股票價格的未來走勢。對近一年來的股票數(shù)據(jù)進行回歸分析就可得到預(yù)測未來股價的線性方程,根據(jù)這個方程來判斷漲跌的可能性。線性回歸的基本原理如下:線性回歸模型是基于最小二乘法構(gòu)建的,其基本目標(biāo)是尋找到一條直線,使這條直線的自變量與因變量之間的預(yù)測值與實際值的殘差平方和達到最小。在這里,線性回歸模型就是求解直線方程y=wx+b中的斜率w和截距b。線性回歸模型在金融領(lǐng)域的優(yōu)勢主要體現(xiàn)在以下幾個方面:1.穩(wěn)定性:線性回歸模型具有較強的穩(wěn)定性,所以可以在不同的金融市場環(huán)境下保持較好的預(yù)測效果。2.實用性:線性回歸模型對數(shù)據(jù)的要求相對比較低,即使數(shù)據(jù)量有限,它也可以構(gòu)建出具有較高預(yù)測能力的模型。3.易于操作:線性回歸模型的構(gòu)建和預(yù)測過程比較簡單,并且易于操作,這可以幫助投資者快速做出決策。要使用線性回歸模型預(yù)測股票價格,需要收集近一年來的股票數(shù)據(jù),如時間、歷史價格等信息。然后利用這些數(shù)據(jù)進行回歸分析,進而求解線性方程y=wx+b。得到線性方程,再根據(jù)該方程預(yù)測未來股價的走勢。如果預(yù)測值與實際值的殘差平方和較小,則說明線性回歸模型對股票價格的預(yù)測具有較高的準(zhǔn)確性。部分代碼實現(xiàn)如下:X=df_filled[['close']].dropna()#確保沒有NaN值y=df_filled['close'].dropna()X=X.shift(1)#將'close'列向上移動一位,作為自變量X['close'][0]=(X['close'][1]+X['close'][2])/2X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.4,random_state=2)model=LinearRegression()model.fit(X_train,y_train)df_filled['up_prob_trend']=abs(y_test/model.predict(X_test))df_filled['up_prob_trend'][len(df_filled['up_prob_trend'])-1]math.tanh(df_filled['up_prob_trend'][len(df_filled['up_prob_trend'])-1])5.3基于歷史數(shù)據(jù)的統(tǒng)計分析時間序列ARIMA(自回歸積分移動平均)模型是一種用于分析和預(yù)測時間序列數(shù)據(jù)的統(tǒng)計模型。結(jié)合了自回歸(AR),差分(I)和移動平均(MA)的概念,可以捕捉時間序列數(shù)據(jù)中的趨勢和周期性REF_Ref5372\r\h[15],模型過程如圖5-3-1所示。圖5-3-1ARIMA操作過程首先,采用ADF檢驗(AugmentedDickey-FullerTest)來驗證時間序列數(shù)據(jù)的穩(wěn)定性。ADF檢驗旨在檢驗自變量中某一個或者某幾個變量單位根的存在性,也就是考察時間序列的非平穩(wěn)性。時間序列分析是一種專為處理時間序列數(shù)據(jù)而設(shè)計的統(tǒng)計手段,它通過對歷史數(shù)據(jù)的時間序列特性進行分析,以預(yù)測未來數(shù)據(jù)可能出現(xiàn)的變動。在時間序列分析領(lǐng)域,自回歸模型是一種經(jīng)常被采用的方法,其主要是通過建立過去數(shù)據(jù)與未來數(shù)據(jù)的自回歸聯(lián)系來預(yù)估未來股票的價格走勢。如果ADF檢驗的結(jié)果表明數(shù)據(jù)是非平穩(wěn)的,代碼將使用ARIMA模型(自回歸積分滑動平均模型)來擬合數(shù)據(jù)。ARIMA模型是一種用于時間序列預(yù)測的模型,它可以同時考慮數(shù)據(jù)的自回歸特性(AR),差分操作(I),和移動平均特性(MA)。ARIMA模型的一般形式是ARIMA(p,d,q),其中p是自回歸項的階數(shù),d是進行差分的次數(shù),q是移動平均項的階數(shù)。在代碼中,使用了ARIMA(1,2,4)模型。如果模型擬合成功,即殘差序列是平穩(wěn)的,那么使用模型的擬合值和實際值的比較來計算上漲概率(up_prob_arima)。如果擬合值大于實際值,則認為上漲概率高。df_filled['close_diff']=df_filled['close'].diff().dropna()df_filled['close_diff'][0]=(df_filled['close_diff'][1]+df_filled['close_diff'][2])/2#print(df_filled['close_diff'])result=adfuller(df_filled['close_diff'])ifresult[1]<0.05:model_arima=ARIMA(df_filled['close_diff'],order=(1,2,4))results=model_arima.fit()df_filled['up_prob_arima']=math.tanh(abs(results.fittedvalues*100)[len(df_filled['close'])-1])else:df_filled['up_prob_arima']=05.4綜合股票預(yù)測值在股票市場預(yù)測中,我們常常采用多種預(yù)測模型以提高預(yù)測的準(zhǔn)確性。上述三種預(yù)測模型分別是基于移動均線分析,趨勢線分析和歷史數(shù)據(jù)的統(tǒng)計分析的。為了更全面地評估股票的上漲概率,這里用均值的方法將這三種預(yù)測模型的結(jié)果進行綜合。代碼實現(xiàn)如下:df_filled['final_up_prob']=(df_filled['up_prob_sma']+df_filled['up_prob_trend']+df_filled['up_prob_arima'])/3self.result=df_filledprint(self.result['up_prob_sma'][len(self.result)-1])print(self.result['up_prob_trend'][len(self.result)-1])print(self.result['up_prob_arima'][len(self.result)-1])6股票分析預(yù)測系統(tǒng)的應(yīng)用測試6.1系統(tǒng)操作說明圖6-1-1系統(tǒng)操作流程6.2運行結(jié)果測試本次以2024年4月15日A股深市中鼎股份(000887.SZ)這只股票為例測試股票分析系統(tǒng)的應(yīng)用結(jié)果:(1)運行代碼后按下鍵盤上的“A鍵”可以得到一個有著“輸入股票代碼”的窗口,可以在窗口里輸入深市任意一只股票代碼,結(jié)果如圖6-2-1所示:圖6-2-1輸入股票代碼窗口(2)在輸入框里輸入中鼎股份這個股票代碼,點擊“Enter鍵”,可以得到這只股票近一年的K線圖,這個圖由價格波動線,平均日線,成交量線等組成,且圖像上有開盤價,收盤價,漲幅,平均日價,交易額,最高價,最低價信息等,用戶可以對股票波動有一個直觀清晰的認識。輸出的K線圖如下圖6-2-2所示:圖6-2-2K線圖在K線圖這個頁面,可以用右上角的功能鍵進行選取放大等,可以更清楚地觀察一段時間的K線,如下圖6-2-3所示:圖6-2-3K線圖放大接著點擊鍵盤“M”鍵,可以得到基于SMA算法的股票上漲概率約為56.5%,如下圖6-2-4所示:圖6-2-4SMA算法預(yù)測值窗口(5)點擊鍵盤“T”鍵,可以得到基于趨勢線算法的股票上漲概率約為76.6%,如下圖6-2-5所示:圖6-2-5趨勢線分析算法預(yù)測值窗口(6)點擊鍵盤“R”鍵,可以得到基于歷史數(shù)據(jù)統(tǒng)計分析的股票上漲概率約為64.1%,如下圖6-2-6所示:圖6-2-6ARIMA算法預(yù)測值窗口(7)點擊“C”鍵,可以得到綜合分析的股票上漲概率約為62.5%,如下圖6-2-7所示:圖6-2-7綜合概率預(yù)測值窗口7總結(jié)本實驗選取近一年的股票數(shù)據(jù),采用了三種不同的算法進行分析:移動平均線、線性回歸以及時間序列的自回歸,并得出相應(yīng)的上漲概率,通過求均值的方式計算出了綜合上漲概率。這種方法綜合考慮了不同算法的優(yōu)點,使預(yù)測結(jié)果更全面準(zhǔn)確。然而,由于采用的是傳統(tǒng)分析方法,未涉及深度學(xué)習(xí)等先進技術(shù),因此預(yù)測結(jié)果可能存在一定的誤差。需要注意的是,股市波動變幻莫測,任何預(yù)測方法都無法保證100%的準(zhǔn)確性。因此,投資者在使用本分析預(yù)測系統(tǒng)時,應(yīng)謹慎參考預(yù)測結(jié)果,并結(jié)合其他因素進行綜合判斷。參考文獻何雨峰,許超,黃蘭.基于數(shù)據(jù)包絡(luò)方法的中小企業(yè)融資優(yōu)勢分析[J].中國集體經(jīng)濟,2020(5):98-100.李雪.網(wǎng)絡(luò)輿情測度及其對銀行業(yè)系統(tǒng)性風(fēng)險的影響研究[D].吉林:長春工業(yè)大學(xué),2023.李思佳.基于Python的股票數(shù)據(jù)可視化分析——以新能源汽車行業(yè)為例[J].河北軟件職業(yè)技術(shù)學(xué)院學(xué)報,2021,23(3):15-18.王子豪.股票數(shù)據(jù)初探——移動平均與燭狀圖分析[J].中小企業(yè)管理與科技(上旬刊),2021,(01):111-112+115.梁國鵬,劉力軍.基于Python的量化交易系統(tǒng)設(shè)計與實現(xiàn)[J].現(xiàn)代信息科技,2021,5(8):86-89,94.DOI:10.19850/ki.2096-4706.2021.08.025.譚軍龍,李慧瑩.基于Python的量化投資交易系統(tǒng)的設(shè)計和實現(xiàn)[J].中國戰(zhàn)略新興產(chǎn)業(yè),2021(27):41-42.DOI:10.12230/j.issn.2095-6657.2021.27.027.魏玉嬌.基于Python的量化投資通道突破策略的應(yīng)用研究[J].品牌研究,2021(23):265-267,281.DOI:10.3969/j.issn.1671-1009.2021.23.081.尹清.基于Python機器學(xué)習(xí)算法的易攜出客戶模型研究[J].中國新通信,2022,24(16):59-61.DOI:10.3969/j.issn.1673-4866.2022.16.019.孟平,龍華秋.基于Python的機器學(xué)習(xí)入侵檢測的研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2019(8):40-42.張凱姣.基于Python機器學(xué)習(xí)的可視化麻紗質(zhì)量預(yù)測系統(tǒng)[D].上海:東華大學(xué),2017.AlbeladiK,ZafarB,MueenA.TimeSeriesForecastingusingLSTMandARIMA[J].InternationalJournalofAdvancedComputerScienceandApplications(IJACSA),2023,14(1).JingyiZ.RepresentativeStockAnalysisinChineseMedicalIndustryandRelevantInvestmentRecommendations[J].JournalofEconomics,FinanceandAccountingStudies,2023,5(2):139-151.游穎,程俊.基于Python語言的教學(xué)數(shù)據(jù)處理平臺設(shè)計[J].中國新技術(shù)新產(chǎn)品,2023,(17):26-29.DOI:10.13612/tp.2023.17.011.潘奕霖.基于用戶畫像的生活垃圾產(chǎn)廢模式構(gòu)建研究[D].哈爾濱工業(yè)大學(xué),2022.DOI:10.27061/ki.ghgdu.2022.002934.郭聰楠.基于ARIMAGRU模型的地面沉降分析與預(yù)測研究[D].北京建筑大學(xué),2023.附錄主函數(shù):importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportmplfinanceasmpfimporttushareasts#讀取示例數(shù)據(jù)pro=_api('4e0c27861ed60fd7d119dd3493aeafca4603c36e8cfbac912c99bc18')daily=_bar('000001.SZ',start_date='2023-04-13',end_date='20240416')daily.index=daily.trade_datedaily=daily.rename(index=pd.Timestamp)#daily.drop(columns=['ts_code','trade_date','pre_close','change','pct_chg','amount'],inplace=True)#daily.columns=['open','high','low','close','volume']daily.sort_index(inplace=True)data=pd.read_csv('test_data.csv',index_col=0)data=dailydata.index=pd.to_datetime(data.index)my_color=mpf.make_marketcolors(up='r',down='g',edge='inherit',wick='inherit',volume='inherit')my_style=mpf.make_mpf_style(marketcolors=my_color,figcolor='(0.82,0.83,0.85)',gridcolor='(0.82,0.83,0.85)')#定義各種字體title_font={'fontname':'MicrosoftYaHei','size':'16','color':'black','weight':'bold','va':'bottom','ha':'center'}large_red_font={'fontname':'MicrosoftYaHei','size':'24','color':'red','weight':'bold','va':'bottom'}large_green_font={'fontname':'MicrosoftYaHei','size':'24','color':'green','weight':'bold','va':'bottom'}small_red_font={'fontname':'MicrosoftYaHei','size':'12','color':'red','weight':'bold','va':'bottom'}small_green_font={'fontname':'MicrosoftYaHei','size':'12','color':'green','weight':'bold','va':'bottom'}normal_label_font={'fontname':'MicrosoftYaHei','size':'12','color':'black','weight':'normal','va':'bottom','ha':'right'}normal_font={'fontname':'MicrosoftYaHei','size':'12','color':'black','weight':'normal','va':'bottom','ha':'left'}classInterCandle:def__init__(self,data,my_style):self.pressed=Falseself.xpress=None#初始化交互式K線圖對象,歷史數(shù)據(jù)作為唯一的參數(shù)用于初始化對象self.data=dataself.style=my_style#設(shè)置初始化的K線圖顯示區(qū)間起點為0,即顯示第0到第99個交易日的數(shù)據(jù)(前100個數(shù)據(jù))self.idx_start=0self.idx_range=100#設(shè)置ax1圖表中顯示的均線類型self.avg_type='ma'self.indicator='macd'#初始化figure對象,在figure上建立三個Axes對象并分別設(shè)置好它們的位置和基本屬性self.fig=mpf.figure(style=my_style,figsize=(12,8),facecolor=(0.82,0.83,0.85))fig=self.figself.ax1=fig.add_axes([0.08,0.25,0.88,0.60])self.ax2=fig.add_axes([0.08,0.15,0.88,0.10],sharex=self.ax1)self.ax2.set_ylabel('volume')self.ax3=fig.add_axes([0.08,0.05,0.88,0.10],sharex=self.ax1)self.ax3.set_ylabel('macd')#初始化figure對象,在figure上預(yù)先放置文本并設(shè)置格式,文本內(nèi)容根據(jù)需要顯示的數(shù)據(jù)實時更新self.t1=fig.text(0.50,0.94,'513100.SH-納斯達克指數(shù)ETF基金',**title_font)self.t2=fig.text(0.12,0.90,'開/收:',**normal_label_font)self.t3=fig.text(0.14,0.89,f'',**large_red_font)self.t4=fig.text(0.14,0.86,f'',**small_red_font)self.t5=fig.text(0.22,0.86,f'',**small_red_font)self.t6=fig.text(0.12,0.86,f'',**normal_label_font)self.t7=fig.text(0.40,0.90,'高:',**normal_label_font)self.t8=fig.text(0.40,0.90,f'',**small_red_font)self.t9=fig.text(0.40,0.86,'低:',**normal_label_font)self.t10=fig.text(0.40,0.86,f'',**small_green_font)self.t11=fig.text(0.55,0.90,'量(萬手):',**normal_label_font)self.t12=fig.text(0.55,0.90,f'',**normal_font)self.t13=fig.text(0.55,0.86,'額(億元):',**normal_label_font)self.t14=fig.text(0.55,0.86,f'',**normal_font)self.t15=fig.text(0.70,0.90,'漲停:',**normal_label_font)self.t16=fig.text(0.70,0.90,f'',**small_red_font)self.t17=fig.text(0.70,0.86,'跌停:',**normal_label_font)self.t18=fig.text(0.70,0.86,f'',**small_green_font)self.t19=fig.text(0.85,0.90,'均價:',**normal_label_font)self.t20=fig.text(0.85,0.90,f'',**normal_font)self.t21=fig.text(0.85,0.86,'昨收:',**normal_label_font)self.t22=fig.text(0.85,0.86,f'',**normal_font)fig.canvas.mpl_connect('button_press_event',self.on_press)fig.canvas.mpl_connect('button_release_event',self.on_release)fig.canvas.mpl_connect('motion_notify_event',self.on_motion)fig.canvas.mpl_connect('key_press_event',self.on_key_press)fig.canvas.mpl_connect('scroll_event',self.on_scroll)defrefresh_plot(self,idx_start,idx_range):"""根據(jù)最新的參數(shù),重新繪制整個圖表"""all_data=self.dataplot_data=all_data.iloc[idx_start:idx_start+idx_range]ap=[]#添加K線圖重疊均線,根據(jù)均線類型添加移動均線或布林帶線ifself.avg_type=='ma':ap.append(mpf.make_addplot(plot_data[['MA5','MA10','MA20','MA60']],ax=self.ax1))elifself.avg_type=='bb':ap.append(mpf.make_addplot(plot_data[['bb-u','bb-m','bb-l']],ax=self.ax1))#添加指標(biāo),根據(jù)指標(biāo)類型添加MACD或RSI或DEMAifself.indicator=='macd':ap.append(mpf.make_addplot(plot_data[['macd-m','macd-s']],ylabel='macd',ax=self.ax3))bar_r=np.where(plot_data['macd-h']>0,plot_data['macd-h'],0)bar_g=np.where(plot_data['macd-h']<=0,plot_data['macd-h'],0)ap.append(mpf.make_addplot(bar_r,type='bar',color='red',ax=self.ax3))ap.append(mpf.make_addplot(bar_g,type='bar',color='green',ax=self.ax3))elifself.indicator=='rsi':ap.append(mpf.make_addplot([75]*len(plot_data),color=(0.75,0.6,0.6),ax=self.ax3))ap.append(mpf.make_addplot([30]*len(plot_data),color=(0.6,0.75,0.6),ax=self.ax3))ap.append(mpf.make_addplot(plot_data['rsi'],ylabel='rsi',ax=self.ax3))else:#indicator=='dema'ap.append(mpf.make_addplot(plot_data['dema'],ylabel='dema',ax=self.ax3))#繪制圖表mpf.plot(plot_data,ax=self.ax1,volume=self.ax2,addplot=ap,type='candle',style=self.style,datetime_format='%Y-%m',xrotation=0)print("show")plt.draw()plt.show()defrefresh_texts(self,display_data):"""更新K線圖上的價格文本"""#display_data是一個交易日內(nèi)的所有數(shù)據(jù),將這些數(shù)據(jù)分別填入figure對象上的文本中self.t3.set_text(f'{np.round(display_data["open"],3)}/{np.round(display_data["close"],3)}')self.t4.set_text(f'{np.round(display_data["change"],3)}')self.t5.set_text(f'[{np.round(display_data["pct_chg"],3)}%]')self.t6.set_text(f'{display_.date()}')self.t8.set_text(f'{np.round(display_data["high"],3)}')self.t10.set_text(f'{np.round(display_data["low"],3)}')self.t12.set_text(f'{np.round(display_data["vol"]/10000,3)}')#self.t14.set_text(f'{display_data["value"]}')#self.t16.set_text(f'{np.round(display_data["upper_lim"],3)}')#self.t18.set_text(f'{np.round(display_data["lower_lim"],3)}')#self.t20.set_text(f'{np.round(display_data["average"],3)}')#self.t22.set_text(f'{np.round(display_data["last_close"],3)}')#根據(jù)本交易日的價格變動值確定開盤價、收盤價的顯示顏色ifdisplay_data['change']>0:#如果今日變動額大于0,即今天價格高于昨天,今天價格顯示為紅色close_number_color='red'elifdisplay_data['change']<0:#如果今日變動額小于0,即今天價格低于昨天,今天價格顯示為綠色close_number_color='green'else:close_number_color='black'self.t3.set_color(close_number_color)self.t4.set_color(close_number_color)self.t5.set_color(close_number_color)defon_press(self,event):ifnot(event.inaxes==self.ax1)and(notevent.inaxes==self.ax3):returnifevent.button!=1:returnself.pressed=Trueself.xpress=event.xdata#切換當(dāng)前ma類型,在ma、bb、none之間循環(huán)ifevent.inaxes==self.ax1andevent.dblclick==1:ifself.avg_type=='ma':self.avg_type='bb'elifself.avg_type=='bb':self.avg_type='none'else:self.avg_type='ma'#切換當(dāng)前indicator類型,在macd/dma/rsi/kdj之間循環(huán)ifevent.inaxes==self.ax3andevent.dblclick==1:ifself.indicator=='macd':self.indicator='dma'elifself.indicator=='dma':self.indicator='rsi'elifself.indicator=='rsi':self.indicator='kdj'else:self.indicator='macd'self.ax1.clear()self.ax2.clear()self.ax3.clear()self.refresh_plot(self.idx_start,self.idx_range)defon_release(self,event):self.pressed=Falsedx=int(event.xdata-self.xpress)self.idx_start-=dxifself.idx_start<=0:self.idx_start=0ifself.idx_start>=len(self.data)-100:self.idx_start=len(self.data)-100defon_motion(self,event):ifnotself.pressed:returnifnotevent.inaxes==self.ax1:returndx=int(event.xdata-self.xpress)new_start=self.idx_start-dx#設(shè)定平移的左右界限,如果平移后超出界限,則不再平移ifnew_start<=0:new_start=0ifnew_start>=len(self.data)-100:new_start=len(self.data)-100self.ax1.clear()self.ax2.clear()self.ax3.clear()self.refresh_texts(self.data.iloc[new_start])self.refresh_plot(new_start,self.idx_range)defon_scroll(self,event):#僅當(dāng)鼠標(biāo)滾輪在axes1范圍內(nèi)滾動時起作用scale_factor=1.0ifevent.inaxes!=self.ax1:returnifevent.button=='down':#縮小20%顯示范圍scale_factor=0.8ifevent.button=='up':#放大20%顯示范圍scale_factor=1.2#設(shè)置K線的顯示范圍大小self.idx_range=int(self.idx_range*scale_factor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)市場報告 -2024年四季度青島寫字樓和零售市場報告
- 2025廣告公司采購合同
- 2025食品代理合同樣本
- 二零二五年度數(shù)字貨幣內(nèi)部股東股權(quán)轉(zhuǎn)讓合同模板3篇
- 二零二五年度農(nóng)業(yè)機械設(shè)備租賃與農(nóng)產(chǎn)品加工服務(wù)合同3篇
- 2025年度鄉(xiāng)村振興戰(zhàn)略下全新貧困戶幫扶合作協(xié)議3篇
- 二零二五年度車輛維修版服務(wù)合同3篇
- 二零二五年度全新私人合同:私人健身俱樂部及健身器材租賃服務(wù)協(xié)議2篇
- 二零二五年度企業(yè)個人業(yè)績目標(biāo)對賭協(xié)議3篇
- 2025年度環(huán)??萍己匣锶斯蓹?quán)分配與綠色發(fā)展合同3篇
- 醫(yī)學(xué)統(tǒng)計學(xué)全套課件
- 學(xué)校精準(zhǔn)扶貧工作計劃
- 工業(yè)產(chǎn)品質(zhì)量安全風(fēng)險管控清單
- 【幼兒生活環(huán)節(jié)中數(shù)學(xué)思維能力培養(yǎng)研究5500字(論文)】
- 德欽縣云嶺鄉(xiāng)尼農(nóng)飲用水生產(chǎn)建設(shè)項目環(huán)評報告
- 《中醫(yī)婦科學(xué)》教材
- 護理評估量表及注意事項
- 提升極端天氣背景下的城市政府韌性治理能力
- 服務(wù)營銷學(xué)教案
- 護理查房 小兒支氣管肺炎
- 相關(guān)方安全管理培訓(xùn)
評論
0/150
提交評論