標籤:

【python練習】用均線策略把所有股票都跑了一遍

import os
import pandas as pd
import numpy as np
codelist = os.listdir("C:/all_stock_data")
os.chdir("C:/all_stock_data")
ans = pd.DataFrame()
x=0
for file in codelist:
data = pd.read_csv(file, encoding="gbk")
print(x,file)
if data[成交量].min() == 0:
data = data.drop(list(data.loc[(data[漲跌幅] == None)].index)) #刪除漲跌幅為None的日期
data.set_index(["日期"], inplace=True)
data = data.sort_index()
ma = data[收盤價]/data[收盤價].rolling(18).mean()
if len(ma)>0:
ma = ma.drop(data.index[len(ma) - 1])
y = data[漲跌幅].drop(data.index[0])
y = y.tolist()
df = pd.DataFrame({18ma: ma, 次日漲幅: y}).drop(list(ma.index[0:17]))
df = df.drop(list(df.loc[(df[18ma] < 1)].index))
df = df.drop(list(df.loc[(df.index < 2000-01-01)].index))
df[次日漲幅] = pd.DataFrame(df[次日漲幅], dtype=np.float)
avg = df[次日漲幅].mean()
g_avg = df.loc[df[次日漲幅] > 0].次日漲幅.mean()
d_avg = df.loc[df[次日漲幅] < 0].次日漲幅.mean()
p = df.loc[df[次日漲幅] > 0].次日漲幅.count() / len(df)
f = -avg / g_avg / d_avg * 100
ans.loc[x, code] = data.iloc[0, 0]
ans.loc[x, avg] = avg
ans.loc[x, g_avg] = g_avg
ans.loc[x, d_avg] = d_avg
ans.loc[x, p] = p
ans.loc[x, f] = f
ans.loc[x, times] = len(df)
x += 1
print(ans)
ans.to_excel(C:/Users/29166/Desktop/test/個股均線策略.xlsx)

最近也沒有什麼好的思路,就找均線系統練了練手。寫的時候盡量避免用循環語句,提升了一些運行的速度。

得出來的結果也和預想中的差不多:回測數據是從2000年開始的A股所有股票數據,均線系統的平均單日漲幅超過了0.16%,而無均線系統的表現只有0.068%。可以說均線系統的表現是很不錯了。

代碼中的f是一個倉位係數,用來計算評估倉位的,來源於凱利公式。均線系統中此數值也是明顯優於無系統的。

如果打算長期持有一隻股票的話,一個交易系統能給收益帶來很大的提升,還能減少下跌的風險,即使這個交易系統非常簡單。

推薦閱讀:

TAG:Python | 交易 |