亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

以股票RSI指標(biāo)為例,學(xué)習(xí)Python發(fā)送郵件功能(含RSI指標(biāo)確定賣點(diǎn)策略)

系統(tǒng) 3928 0

? ? 本人之前寫過若干“給程序員加財(cái)商”的系列文,目的是通過股票案例講述Python知識點(diǎn),讓大家在學(xué)習(xí)Python的同時(shí)還能掌握相關(guān)的股票知識,所謂一舉兩得。

? ? 在之前的系列文里,大家能看到K線,均線,成交量的案例,在本文里,大家能看到通過RSI案例講述Python郵件編程的知識點(diǎn),在后繼系列文里,大家還能看到MACD,BIAS,KDJ等指標(biāo)相關(guān)案例。

1? RSI指標(biāo)的原理和算法描述

? ? 相對強(qiáng)弱指標(biāo)(RSI)是通過比較某個(gè)時(shí)段內(nèi)單股價(jià)格的漲跌幅度來判斷多空雙方的強(qiáng)弱程度,以此來預(yù)測未來走勢。從數(shù)值上看,它體現(xiàn)出某股的買賣力量,所以投資者能據(jù)此預(yù)測未來價(jià)格的走勢,在實(shí)踐中,通常與移動平均線配合使用,以提高分析的準(zhǔn)確性。

? ? RSI指標(biāo)的計(jì)算公式如下所示。

? ? 第一步,RS(相對強(qiáng)度)=N日內(nèi)收盤價(jià)漲數(shù)和的均值÷N日內(nèi)收盤價(jià)跌數(shù)和的均值

? ? 第二步,RSI(相對強(qiáng)弱指標(biāo))=100-100÷(1+RS)

? ? 請注意,這里“均值“的計(jì)算方法可以是簡單移動平均(SMA),也可以是加權(quán)移動平均(WMA)指數(shù)移動平均(EMA)。本書采用的是比較簡單的簡單移動平均算法,有些軟件采用的是后兩種平均算法。采用不同的平均算法會導(dǎo)致RSI的值不同,但趨勢不會改變,對交易的指導(dǎo)意義也不會變。

? ? 以6日RSI指標(biāo)為例,從當(dāng)日算起向前推算6個(gè)交易日,獲取到包括本日在內(nèi)的7個(gè)收盤價(jià),用每一日的收盤價(jià)減去上一交易日的收盤價(jià),以此方式得到6個(gè)數(shù)值,這些數(shù)值中有正有負(fù)。隨后再按如下四個(gè)步驟計(jì)算RSI指標(biāo)。

? ? 第一步,up=6個(gè)數(shù)字中正數(shù)之和的平均值。

? ? 第二步,down=先取6個(gè)數(shù)字中負(fù)數(shù)之和的絕對值,再對絕對值取平均值。

? ? 第三步,RS=up除以down,RS表示相對強(qiáng)度

? ? 第四步,RSI(相對強(qiáng)弱指標(biāo))=100-100÷(1+RS)

? ? 如果再對第四步得出的結(jié)果進(jìn)行數(shù)學(xué)變換,能進(jìn)一步約去RS因素,得到如下的結(jié)論:RSI=100x(up) ÷(up+down),也就是說,RSI等于100乘以up除以(up和down的和)。

? ? 從本質(zhì)上來看,RSI反映了某階段內(nèi)(比如6個(gè)交易日內(nèi))由價(jià)格上漲引發(fā)的波動占總波動的百分比率,百分比越大,說明這個(gè)時(shí)間段內(nèi)股票越強(qiáng)勢,反之如果百分比越小,則說明股票弱勢程度強(qiáng)。

? ? 從上述公式中我們能看到,RSI的值介于0到100之間,目前比較常見的基準(zhǔn)周期為6日\12日和24日。把每個(gè)交易日的RSI值在坐標(biāo)圖上的點(diǎn)連成曲線,即能繪制成RSI指標(biāo)線,也就是說,目前滬深股市中RSI指標(biāo)線是由三根曲線構(gòu)成,如下圖所示。

? ?

2? 把用Matplotlib繪制的RSI指標(biāo)圖存為圖片

? ? 在如下的DrawRSI.py案例中,我們將根據(jù)上述算法繪制600584(長電科技)從2018年9月到2019年5月間的的6日、12日和24日的RSI指標(biāo)。

? ? 本例的數(shù)據(jù)來自csv文件,而該文件的數(shù)據(jù)來自網(wǎng)絡(luò)股票接口,相關(guān)內(nèi)容大家可以閱讀之前博文。在本案例中,還會把由matplotlib生成的圖形存為png格式,以方便之后用郵件的形式發(fā)送。? ??

            
              1	#!/usr/bin/env python
2	#coding=utf-8
3	import pandas as pd
4	import matplotlib.pyplot as plt
5	#計(jì)算RSI的方法,入?yún)eriodList傳入周期列表 
6	def calRSI(df,periodList):
7	    #計(jì)算和上一個(gè)交易日收盤價(jià)的差值
8	    df['diff'] = df["Close"]-df["Close"].shift(1) 
9	    df['diff'].fillna(0, inplace = True)    
10	    df['up'] = df['diff']
11	    #過濾掉小于0的值
12	    df['up'][df['up']] = 0
13	    df['down'] = df['diff']
14	    #過濾掉大于0的值
15	    df['down'][df['down']] = 0
16	    #通過for循環(huán),依次計(jì)算periodList中不同周期的RSI等值
17	    for period in periodList:
18	        df['upAvg'+str(period)] = df['up'].rolling(period).sum()/period
19	        df['upAvg'+str(period)].fillna(0, inplace = True)
20	        df['downAvg'+str(period)] = abs(df['down'].rolling(period).sum()/period)
21	        df['downAvg'+str(period)].fillna(0, inplace = True)
22	        df['RSI'+str(period)] = 100 - 100/((df['upAvg'+str(period)]/df['downAvg'+str(period)]+1))
23	    return df

            
          

? ? 在第5行里,我們定義了用于計(jì)算RSI值的calRSI方法,該方法第一個(gè)參數(shù)是包含日期收盤價(jià)等信息的dataframe類型的df對象,第二個(gè)參數(shù)是周期列表。

? ? 在第8行里,我們把本交易日和上個(gè)交易日收盤價(jià)的差價(jià)存入了'diff'列,這里是用shift(1)來獲取df里上一行(即上個(gè)交易日)的收盤價(jià)。由于第一行的diff值是NaN,所以需要用第9行的fillna方法把NaN值更新成0。

? ? 在第11行里,在df對象里創(chuàng)建了up列,該列的值暫時(shí)和diff值相同,有正有負(fù),但馬上就通過第12行的df['up'][df['up']<0] = 0代碼,把up列中的負(fù)值設(shè)置成0,這樣一來,up列里就只包含了“N日內(nèi)收盤價(jià)的漲數(shù)”。在第13行和第15行里,用同樣的方法,在df對象中創(chuàng)建了down列,并在其中存入了“N日內(nèi)收盤價(jià)的跌數(shù)”。

? ? 隨后是通過第17行的for循環(huán),遍歷存儲在periodList中的周期對象,其實(shí)通過下面第26行的代碼,我們能看到計(jì)算RSI的周期分別是6天、12天和24天。針對每個(gè)周期,先是在第18行,算出了這個(gè)周期內(nèi)收盤價(jià)漲數(shù)和的均值,并把這個(gè)均值存入df對象中的'upAvg'+str(period)列中,比如當(dāng)前周期是6,那么該漲數(shù)的均值是存入df[‘upAvg6‘]列。在第20行,則算出該周期內(nèi)的收盤價(jià)跌數(shù)的均值,并存入'downAvg'+str(period)列中。最后在第22行,算出本周期內(nèi)的RSI值,并放入df對象中的'RSI'+str(period)里。?

            
              24    filename='D:\\stockData\ch10\\6005842018-09-012019-05-31.csv'
25    df = pd.read_csv(filename,encoding='gbk')
26    list = [6,12,24] #周期列表
27    #調(diào)用方法計(jì)算RSI
28    stockDataFrame = calRSI(df,list) 
29    #print(stockDataFrame)
30    #開始繪圖
31    plt.figure()
32    stockDataFrame['RSI6'].plot(color="blue",label='RSI6')
33    stockDataFrame['RSI12'].plot(color="green",label='RSI12')
34    stockDataFrame['RSI24'].plot(color="purple",label='RSI24')
35    plt.legend(loc='best') #繪制圖例       
36    #設(shè)置x軸坐標(biāo)標(biāo)簽和旋轉(zhuǎn)角度
37    major_index=stockDataFrame.index[stockDataFrame.index==0]
38    major_xtics=stockDataFrame['Date'][stockDataFrame.index==0]
39    plt.xticks(major_index,major_xtics)
40    plt.setp(plt.gca().get_xticklabels(), rotation=30) 
41    #帶網(wǎng)格線,且設(shè)置了網(wǎng)格樣式
42    plt.grid(linestyle='-.') 
43    plt.title("RSI效果圖")
44    plt.rcParams['font.sans-serif']=['SimHei']
45    plt.savefig('D:\\stockData\ch10\\6005842018-09-012019-05-31.png')
46    plt.show()
            
          

? ? ?在第25行里,我們從指定csv文件里得到了包含日期收盤價(jià)等信息的數(shù)據(jù),并在第26行指定了三個(gè)計(jì)算周期。在第28行里,我們調(diào)用了calRSI方法計(jì)算了三個(gè)周期的RSI值,并存入stockDataFrame對象,當(dāng)前第29行的輸出語句是注釋掉的,在打開后,大家能看到計(jì)算后的結(jié)果值,其中包含upAvg6、downAvg6和RSI6等列。

? ? 在得到RSI數(shù)據(jù)后,從第31行開始繪圖,其中比較重要的步驟是通過第32行到第34行的代碼,用plot方法繪制三根曲線,隨后通過第35行的legend方法設(shè)置圖例,通過第37行和第38行的代碼設(shè)置x軸刻度的文字以及旋轉(zhuǎn)效果,通過第42行的代碼設(shè)置網(wǎng)格樣式,通過第43的代碼設(shè)置標(biāo)題。

? ? 在第46行通過show方法繪圖前,我們通過第45行的代碼,用savefig方法把圖形保存到了指定目錄,請注意這句話需要放在show方法前,否則保存的圖片就會是空的。

? ? 運(yùn)行上述代碼,能看到如下圖所示的RSI效果圖。需要說明的是,由于本例在計(jì)算收盤價(jià)漲數(shù)和均值和收盤價(jià)跌數(shù)和均值時(shí),用的是簡單移動平均算法,所以繪制出來的圖形可能和一些軟件里的不一致,但趨勢相同。而且,在指定目錄里,能看到png圖片。

? ?? 以股票RSI指標(biāo)為例,學(xué)習(xí)Python發(fā)送郵件功能(含RSI指標(biāo)確定賣點(diǎn)策略)_第1張圖片 ?

3? 整合K線后用郵件發(fā)送

? ??在DrawKwithRSI.py代碼里,我們將完成如下三個(gè)工作,第一,計(jì)算6日、12日和24日的RSI值。第二,繪制K線加均線加RSI指標(biāo)圖,并把結(jié)果保存為png格式圖片。第三,發(fā)送郵件,并把png圖片以富文本的格式展示在郵件正文中。

            
              1    #!/usr/bin/env python
2    #coding=utf-8
3    import pandas as pd
4    import matplotlib.pyplot as plt 
5    from mpl_finance import candlestick2_ochl
6    from matplotlib.ticker import MultipleLocator
7    import smtplib
8    from email.mime.text import MIMEText
9    from email.mime.image import MIMEImage
10    from email.mime.multipart import MIMEMultipart
11    #計(jì)算RSI的方法,入?yún)eriodList傳入周期列表 
12    def calRSI(df,periodList):
13        和DrawRSI.py案例中的一致? ??
            
          

? ? 從第3行到第10行,我們引入了相關(guān)的庫文件,第12行定義的calRSI方法和之前案例中的完全一致,所以就不再給出代碼。? ??

            
              14	filename='D:\\stockData\ch10\\6005842018-09-012019-05-31.csv'
15	df = pd.read_csv(filename,encoding='gbk')
16	list = [6,12,24] #周期列表
17	#調(diào)用方法計(jì)算RSI
18	stockDataFrame = calRSI(df,list) 
19	figure = plt.figure()
20	#創(chuàng)建子圖     
21	(axPrice, axRSI) = figure.subplots(2, sharex=True)
22	#調(diào)用方法,在第axPrice子圖里繪制K線圖 
23	candlestick2_ochl(ax = axPrice, opens=df["Open"].values, closes=df["Close"].values, highs=df["High"].values, lows=df["Low"].values,width=0.75, colorup='red', colordown='green')
24	axPrice.set_title("K線圖和均線圖")#設(shè)置子圖標(biāo)題
25	stockDataFrame['Close'].rolling(window=3).mean().plot(ax=axPrice,color="red",label='3天均線')
26	stockDataFrame['Close'].rolling(window=5).mean().plot(ax=axPrice,color="blue",label='5天均線')
27	stockDataFrame['Close'].rolling(window=10).mean().plot(ax=axPrice,color="green",label='10天均線')
28	axPrice.legend(loc='best') #繪制圖例
29	axPrice.set_ylabel("價(jià)格(單位:元)")
30	axPrice.grid(linestyle='-.') #帶網(wǎng)格線        
31	#在axRSI子圖里繪制RSI圖形
32	stockDataFrame['RSI6'].plot(ax=axRSI,color="blue",label='RSI6')
33	stockDataFrame['RSI12'].plot(ax=axRSI,color="green",label='RSI12')
34	stockDataFrame['RSI24'].plot(ax=axRSI,color="purple",label='RSI24')
35	plt.legend(loc='best') #繪制圖例
36	plt.rcParams['font.sans-serif']=['SimHei']       
37	axRSI.set_title("RSI圖")#設(shè)置子圖的標(biāo)題
38	axRSI.grid(linestyle='-.') #帶網(wǎng)格線
39	#設(shè)置x軸坐標(biāo)標(biāo)簽和旋轉(zhuǎn)角度
40	major_index=stockDataFrame.index[stockDataFrame.index%7==0]
41	major_xtics=stockDataFrame['Date'][stockDataFrame.index%7==0]
42	plt.xticks(major_index,major_xtics)
43	plt.setp(plt.gca().get_xticklabels(), rotation=30) 
44	plt.savefig('D:\\stockData\ch10\\600584RSI.png')

            
          

? ? 在第18行里,我們通過調(diào)用calRSI方法得到了三個(gè)周期的RSI數(shù)據(jù)。在第21行里,設(shè)置了axPrice和axRSI這兩個(gè)子圖共享x軸標(biāo)簽,在第23行里繪制了K線圖,在第25行到第27行里,繪制了3日、5日和10日的均線,在第32行到第34行里,繪制了6日、12日和24日的三根RSI指標(biāo)圖。在第44行里通過savefig方法,把包含K線、均線和RSI指標(biāo)線的圖形存在指定目錄中。?? ??

            
              45	#發(fā)送郵件
46	def sendMail(username,pwd,from_addr,to_addr,msg):
47	    和之前sendMailWithPicAttachment.py案例中的一致
48	def buildMail(HTMLContent,subject,showFrom,showTo,attachfolder,attachFileName):
49	    message = MIMEMultipart()
50	    body = MIMEText(HTMLContent, 'html', 'utf-8')
51	    message.attach(body)
52	    message['Subject'] = subject
53	    message['From'] = showFrom
54	    message['To'] = showTo
55	    imageFile = MIMEImage(open(attachfolder+attachFileName, 'rb').read())
56	    imageFile.add_header('Content-ID', attachFileName)
57	    imageFile['Content-Disposition'] = 'attachment;filename="'+attachFileName+'"'
58	    message.attach(imageFile)
59	    return message

            
          

 第46行定義的sendMail方法和之前案例中的完全一致,所以就不給出詳細(xì)的代碼。本案例與之前不同的是,在第48行里,專門定義了buildMail方法,用來組裝郵件對象,郵件的諸多要素由該方法的參數(shù)所定義。

? ? 具體而言,在第49行里定義郵件類型是MIMEMultipart,也就是說帶附件的郵件,在第50行和第51行里,根據(jù)參數(shù)HTMLContent構(gòu)建了郵件的正文,在第52行到第54行里,設(shè)置了郵件的相關(guān)屬性值,從第55行到第57行,根據(jù)入?yún)?gòu)建了MIMEImage類型的圖片類附件,在第58行里,通過attach方法把附件并入郵件正文。? ??

            
              60	subject='RSI效果圖'
61	attachfolder='D:\\stockData\\ch10\\'
62	attachFileName='600584RSI.png'
63	HTMLContent = ''\
64	 '
              
              '\
65	 ''
66	message = buildMail(HTMLContent,subject,'hsm_computer@163.com','hsm_computer@163.com',attachfolder,attachFileName) 
67	sendMail('hsm_computer','xxx','hsm_computer@163.com','hsm_computer@163.com',message.as_string())  
68	#最后再繪制
69	plt.show()

            
          

 在第60行到第66行,我們設(shè)置了郵件的相關(guān)屬性值,并在第66行里,通過調(diào)用buildMail方法創(chuàng)建了郵件對象message,在第第67行里,通過調(diào)用sendMail方法發(fā)送郵件,最后在第69行通過show方法繪制了圖形。請大家注意本案例中的三個(gè)細(xì)節(jié)。

? ? 第一,?????????? 第64行cid的值需要和第56行的Content-ID值一致,否則圖片只能以附件的形式發(fā)送,無法在郵件正文里以富文本的格式展示。

? ? 第二,?????????? 我們是先構(gòu)建和發(fā)送郵件,再通過第69行的代碼繪制圖形,如果次序顛倒先繪制圖形后發(fā)送郵件的話,show方法被調(diào)用后程序會阻塞在這個(gè)位置,代碼無法繼續(xù)執(zhí)行。要等到手動關(guān)閉掉由show方法彈出的窗口后,才會觸發(fā)sendMail方法發(fā)送郵件。

? ? 第三,?????????? 在本案例的第48行,我們專門封裝了用于構(gòu)建郵件對象的buildMail方法,在其中通過參數(shù)動態(tài)地構(gòu)建郵件,這樣如果要發(fā)送其它郵件,則可以調(diào)用該方法,從而能提升代碼的重用性。

? ? 運(yùn)行上述代碼,我們能在彈出的窗口里看到K線、均線和RSI指標(biāo)圖整合后的效果圖,而且能在郵件的正文里看到相同的圖。

? ?? 以股票RSI指標(biāo)為例,學(xué)習(xí)Python發(fā)送郵件功能(含RSI指標(biāo)確定賣點(diǎn)策略)_第2張圖片 ?

4??RSI指標(biāo)對買賣點(diǎn)的指導(dǎo)意義

? ??一般來說,我們把6日、12日和24日的RSI指標(biāo)稱為為短期、中期和長期指標(biāo)。和KDJ指標(biāo)一樣,RSI指標(biāo)也有超買和超賣區(qū)。

? ? 具體而言,當(dāng)RSI值在50到70間波動時(shí),表示當(dāng)前屬于強(qiáng)勢狀態(tài),如繼續(xù)上升,超過80時(shí),則到超買區(qū),極可能在短期內(nèi)轉(zhuǎn)升為跌。反之RSI值在20到50之間時(shí),說明當(dāng)前市場處于相對弱勢,如下降到20以下,則進(jìn)入超賣區(qū),股價(jià)可能出現(xiàn)反彈。

? ? 在講述RSI交易策略前,我們先來講述下在實(shí)際操作中總結(jié)出來的RSI指標(biāo)的缺陷。

? ? 第一,周期較短(比如6日)的RSI指標(biāo)比較靈敏,但快速震蕩的次數(shù)較多,可靠性相對差些,而周期較長(比如24日)的RSI指標(biāo)可靠性強(qiáng),但靈敏度不夠,經(jīng)常會“滯后”的情況。

? ? 第二,當(dāng)數(shù)值在40到60間波動時(shí),往往參考價(jià)值不大,具體而言,當(dāng)數(shù)值向上突破50臨界點(diǎn)時(shí),表示股價(jià)已轉(zhuǎn)強(qiáng),反之向下跌破50時(shí)則表示轉(zhuǎn)弱,不過在實(shí)踐過程中,經(jīng)常會出現(xiàn)RSI跌破50后股價(jià)卻不下跌,而突破50后股價(jià)不漲。

? ? 綜合RSI算法、相關(guān)理論以及缺陷,我們來講述下實(shí)際操作中常用的基于該指標(biāo)的賣策略。

? ? 第一,RSI短期指標(biāo)(6日)在20以下超賣區(qū)與中長期RSI(12日或24日)發(fā)生黃金交叉,即6日線上穿12日或24日線,則說明即將發(fā)生反彈行情,如果其它技術(shù)或政策等方面沒太大問題,可以適當(dāng)買進(jìn)。

? ? 第二,反之,RSI短期指標(biāo)(6日)在80以上超買區(qū)與中長期RSI(12日或24日)發(fā)生死亡交叉,即6日線下穿12日或24日線,則說明可能會出現(xiàn)高位反轉(zhuǎn)的情況,如果沒有其它利好消息,可以考慮賣出。

5?計(jì)算賣點(diǎn),以郵件的形式發(fā)送

? ? 根據(jù)上文描述,這里采用的基于RSI的買點(diǎn)策略是,RSI6日線在20以下與中長期RSI(12日或24日)發(fā)生黃金交叉。在如下的calRSIBuyPoints.py案例中,我們據(jù)此策略計(jì)算600584(長電科技)從2018年9月到2019年5月間的賣點(diǎn),而且通過郵件發(fā)送買點(diǎn)日期。? ? ?

            
              1	#!/usr/bin/env python
2	#coding=utf-8
3	import pandas as pd
4	import smtplib
5	from email.mime.text import MIMEText
6	from email.mime.image import MIMEImage
7	from email.mime.multipart import MIMEMultipart
8	#計(jì)算RSI的方法,入?yún)eriodList傳入周期列表 
9	def calRSI(df,periodList):
10	    和DrawRSI.py案例中的一致,省略相關(guān)代碼
11	filename='D:\\stockData\ch10\\6005842018-09-012019-05-31.csv'
12	df = pd.read_csv(filename,encoding='gbk')
13	list = [6,12,24] #周期列表
14	#調(diào)用方法計(jì)算RSI
15	stockDataFrame = calRSI(df,list) 

            
          

? ? 在上述代碼的第15行里,我們通過調(diào)用calRSI方法計(jì)算RSI指標(biāo)值,這部分和10.3.2部分的calRSIBuyPoints.py相關(guān)代碼非常相似,所以就不再重復(fù)說明。? ?

            
              16	cnt=0    
17	sellDate=''
18	while cnt<=len(stockDataFrame)-1:
19	    if(cnt>=30):#前幾天有誤差,從第30天算起
20	        try:        
21	            #規(guī)則1,這天RSI6高于80
22	            if stockDataFrame.iloc[cnt]['RSI6']<80:
23	                #規(guī)則2.1,當(dāng)天RSI6下穿RSI12
24	                if  stockDataFrame.iloc[cnt]['RSI6']
              
                stockDataFrame.iloc[cnt-1]['RSI12']:
25	                    sellDate = sellDate+stockDataFrame.iloc[cnt]['Date'] + ','
26	                    #規(guī)則2.2,當(dāng)天RSI6下穿RSI24
27	                if  stockDataFrame.iloc[cnt]['RSI6']
                
                  stockDataFrame.iloc[cnt-1]['RSI24']:
28	                    if sellDate.index(stockDataFrame.iloc[cnt]['Date']) == -1:
29	                        sellDate = sellDate+stockDataFrame.iloc[cnt]['Date'] + ','
30	        except:
31	            pass                
32	    cnt=cnt+1
33	print(sellDate)

                
              
            
          

? ? 在第18行到第32行的while循環(huán)里,我們計(jì)算了基于RSI的賣點(diǎn),在第22行的語句里,我們制定了第一個(gè)規(guī)則:RSI6數(shù)值大于80,在第23行和第27行,我們在規(guī)則一的基礎(chǔ)上制定了兩個(gè)并行的規(guī)則,通過上述代碼,我們會在sellDate對象里存放RSI6大于80并且RSI6下穿RSI12(或RSI24)的交易日,這些交易日即為賣點(diǎn)。? ??

            
              34	def sendMail(username,pwd,from_addr,to_addr,msg):
35	    和之前calRSIBuyPoints.py案例中的完全一致
36	def buildMail(HTMLContent,subject,showFrom,showTo,attachfolder,attachFileName):
37	    和之前calRSIBuyPoints.py案例中的完全一致
38	subject='RSI賣點(diǎn)分析'
39	attachfolder='D:\\stockData\\ch10\\'
40	attachFileName='600584RSI.png'
41	HTMLContent = ''\
42	 '賣點(diǎn)日期' + sellDate + \
43	 '
              
              '\
44	 ''
45	message = buildMail(HTMLContent,subject,'hsm_computer@163.com','hsm_computer@163.com',attachfolder,attachFileName) 
46	sendMail('hsm_computer','xxx','hsm_computer@163.com','hsm_computer@163.com',message.as_string()) 

            
          

 第34行和第36行的兩個(gè)用于發(fā)送郵件和構(gòu)建構(gòu)建的方法和之前案例的完全一致,所以就不再額外說明。

? ?在第38行我們定義的郵件標(biāo)題是“RSI賣點(diǎn)分析”,在第41行定義的描述正文的HTMLContent對象里,我們存放的也是“賣點(diǎn)日期”,最終是通過第46行調(diào)用sendMail方法發(fā)送郵件。

? ? 運(yùn)行上述代碼,我們能看到如下圖所示的郵件,其中包括了賣點(diǎn)日期和指標(biāo)圖。這里通過計(jì)算得出的賣點(diǎn)日期比較多,經(jīng)分析,這些日期之后,股價(jià)多有下跌情況。

? ? ? ?? 以股票RSI指標(biāo)為例,學(xué)習(xí)Python發(fā)送郵件功能(含RSI指標(biāo)確定賣點(diǎn)策略)_第3張圖片

?

6 總結(jié)和版權(quán)說明

? ? 本文是給程序員加財(cái)商系列,之前的系列文如下:

? ??以預(yù)測股票漲跌案例入門基于SVM的機(jī)器學(xué)習(xí)??

? ??用python的matplotlib和numpy庫繪制股票K線均線和成交量的整合效果(含量化驗(yàn)證交易策略代碼)??

? ??用python的matplotlib和numpy庫繪制股票K線均線的整合效果(含從網(wǎng)絡(luò)接口爬取數(shù)據(jù)和驗(yàn)證交易策略代碼)??

? ? 本文力爭做到詳細(xì),比如代碼按行編號,并針對行號詳細(xì)解釋,且圖文并茂,所以如果大家感覺可以,請盡量幫忙推薦一下。

本文的內(nèi)容即將出書,在出版的書里,是用股票案例和大家講述Python入門時(shí)的知識點(diǎn),敬請期待

? ??

? ? 有不少網(wǎng)友轉(zhuǎn)載和想要轉(zhuǎn)載我的博文,本人感到十分榮幸,這也是本人不斷寫博文的動力。關(guān)于本文的版權(quán)有如下統(tǒng)一的說明,抱歉就不逐一回復(fù)了。

? ? 1 本文可轉(zhuǎn)載,無需告知,轉(zhuǎn)載時(shí)請用 鏈接 的方式,給出原文出處,別簡單地通過文本方式給出,同時(shí)寫明原作者是hsm_computer。

? ?? 2 在轉(zhuǎn)載時(shí),請?jiān)霓D(zhuǎn)載 ,謝絕洗稿。否則本人保留追究法律責(zé)任的權(quán)利。

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品国产网| xxxx日本在线播放免费不卡 | 特级毛片免费视频播放 | 99热这里只有成人精品国产 | 男人天堂网在线视频 | 成熟女人50岁一级毛片不卡 | 天天综合在线视频 | 亚洲综合国产一区二区三区 | 最刺激黄a大片免费观看下截 | 国产成人夜间影院在线观看 | 美女美女高清毛片视频 | 国产一区欧美 | 四虎在线影视 | 四虎在线永久视频观看 | 大学生一一级毛片在线播放 | 久久天天躁狠狠躁夜夜爽蜜月 | 91亚洲国产成人久久精品网站 | 日韩欧美精品在线视频 | 欧美一级视频免费观看 | 四虎影院观看视频 | 中文字幕日本一区久久 | 在线亚洲一区二区 | 亚洲自拍小视频 | 久青草国产手机视频免费观看 | 91视频免费观看高清观看完整 | 成人精品一级毛片 | 日韩男女视频 | 2022国产男人亚洲欧美天堂 | 亚洲精品久久久久久久久久久网站 | 日韩毛片免费在线观看 | 免费看欧美一级特黄a大片一 | 嫩模在线 | 精品国产精品 | 不卡不卡 | 日韩小视频在线播放 | 国产高清区 | 欧美日韩国产高清视频 | 日韩一区在线视频 | 精品国产乱码一区二区三区 | 2020国产精品视频免费 | 99精品国产第一福利网站 |