打開量化投資的黑箱-技術分析篇

本文演示如何通過程序去實現常見的技術指標。

技術分析是指以市場行為為研究對象,以判斷市場趨勢並跟隨趨勢的周期性變化來進行股票及其他金融衍生物交易決策的方法的總和。技術分析認為市場行為包容消化一切信息、價格以趨勢方式波動、歷史會重演,常用的有MACD、BOLL、RSI等。

下面舉個簡單的栗子,雙均線。技術分析中通常會用一條近期的移動平均線和遠期移動平均線的相對價格趨勢來體現股票近期的價格趨勢。

例如當近期均線由下向上突破遠期均線時(金叉),通常代表股票近期較為強勢可以作為買入信號。

相反當近期均線由上向下擊穿遠期均線時(死叉),通常代表股票近期較為疲軟作為賣出信號。

接下來在看如何通過程序去實現這個簡單的邏輯(選用5個交易日的平均價作為近日均線、選用60個交易日的平均價作為遠期均線)

首先確定一下策略的回測時間(想看策略在哪一階段的表現)

start = 2012-05-28 #回測開始時間nend = 2016-08-08 # 回測結束時間n

然後確定策略選股的股票池及標的(策略適用於哪些股票,想看策略相對誰的表現情況)

secID = 601318.XSHG #中國平安nbenchmark = secID # 策略對標標的(這裡選取的是中國平安)nuniverse = [secID] # 股票池,支持股票和基金 (選取的是中國平安) n

其他需要的信息(策略的起始資金、按天進行判斷還在用分鐘線進行判斷、策略調倉頻率)

capital_base = 100000 # 起始資金nfreq = d # 策略類型,d表示日間策略使用日線回測,m表示日內策略使用分鐘線回測nrefresh_rate = 1 # 調倉頻率,表示執行handle_data的時間間隔,若freq = d時間間隔的單位為交易日,若freq = m時間間隔為分鐘nmax_history_window = 100 #設定調取歷史價格區間最大為100個交易日n

def initialize(account): # 初始化虛擬賬戶狀態,類似於去券商開戶n passn

策略邏輯部分

局部變數定義:

def handle_data(account): # 每個交易日的買入賣出指令n hist1 = account.get_attribute_history(closePrice, 5) #獲取過去5個交易日的收盤價n hist2 = account.get_attribute_history(closePrice, 60) #獲取過去60個交易日的收盤價n for s in account.universe: #所有股票池中的股票n MA5 = hist1[s].mean() n MA60 = hist2[s].mean() #計算過去5個交易日及過去60個交易日的均價,mean()是python自帶的計算平均值的函數n

買入判斷:

if MA5 > MA60 and s not in account.security_position: #「金叉」而且當前持倉中沒有持有要買入的股票時買入n amount = int(account.cash / account.referencePrice[s] / 100) * 100 #為了讓買入的數量是整數(現金/要買入上一個交易日的價格)n order(s, amount) n

賣出判斷:

elif MA5 < MA60 and s in account.security_position: #「死叉」時而且所賣證券在持倉中時賣出n order_to(s, 0)n

接著就可以看到策略在歷史區間的表現

藍線表示策略的收益,黑線表示基準的收益。

點擊回測詳情可以查看具體的調倉記錄、持倉記錄等信息

點擊回測圖中的開始交易就可以每日數據實時模擬,看一下樣本外的表現情況

我的交易界面就可以查看每日模擬的情況

如果覺得表現尚可可以通過微信訂閱調倉信號,每日開盤前收到今日調倉信息。

常用的技術指標實現(MACD、BOLL、RSI、EMV等):技術指標合集

技術指標推薦書籍:專業投機原理、期貨市場技術分析。


推薦閱讀:

技術分析在炒股中的作用如何?如果技術分析正確的話是不是就穩賺不賠了?
談談你追隨過的投資大師,以及他們的理論與著作?
乾貨 | 如何利用csi.exe繞過Windows Device Guard?

TAG:技术分析 | 金融 | Python |