量化交易學習筆記(十六)——策略篩股

量化交易學習筆記(十六)——策略篩股

在完成指標計算之後,我們就可以寫程序遍歷所有股票數據,來篩選出滿足條件股票了。

在筆記(十四)中,我們看到在幾組回測實驗中,選取5日線及60日線的金叉買入、死叉賣出策略,最終能獲取最高(僅限於幾組實驗數據)的資產。本文將嘗試選取出前一日5日線金叉60日線的股票。

實驗數據截止至2020年3月3日,即我們的策略要選取截止至2020年3月3日,最新的兩根K線出現5日線金叉60日線的股票,相關代碼為:

<code> 

def

golden_crossover

(df, fast, slow)

:

if

df.shape[

0

] < slow:

return

False

fast_indicator =

'ma_%d'

% fast slow_indicator =

'ma_%d'

% slow

return

df[fast_indicator][df.index[

0

]] > df[slow_indicator][df.index[

0

]] \

and

df[fast_indicator][df.index[

1

]] < df[slow_indicator][df.index[

1

]]/<code>

如果股票數據滿足金叉條件,代碼返回True,否則返回False。代碼先判斷當前股票的K線是否能計算出長期均線的值,來排除一些次新股K線數目不足的干擾。然後通過比較最後兩日短期均線和長期均線的關係來判斷是否金叉。

通過遍歷股票數據,共篩選出滿足條件股票46只(當前數據集未包含近期的次新股):000301、000509……601800、603699。

我們來抽兩隻看下K線圖,K線圖截取自2020年3月4日,包含了該日的K線,我們需要看的是3月2日及3月3日的K線,即觀察倒數第二、三根的K線及均線情況,白色均線為5日線,黃色均線為60日線。

000509:


量化交易學習筆記(十六)——策略篩股

603699:


量化交易學習筆記(十六)——策略篩股

可以看到,兩隻股票在3月3日均出現5日線與60日線的金叉,驗證了我們程序的正確性。

友情提示:本系列學習筆記只做數據分析,記錄個人學習過程,不作為交易依據,盈虧自負。按照5日線60日線金叉策略,000509在金叉後的一天在下跌,603699則是上漲。

策略篩股代碼:

<code>

from

__future__

import

(absolute_import, division, print_function, unicode_literals)

import

datetime

import

os.path

import

sys

import

pandas

as

pd

def

golden_crossover

(df, fast, slow)

:

if

df.shape[

0

] < slow:

return

False

fast_indicator =

'ma_%d'

% fast slow_indicator =

'ma_%d'

% slow

return

df[fast_indicator][df.index[

0

]] > df[slow_indicator][df.index[

0

]] \

and

df[fast_indicator][df.index[

1

]] < df[slow_indicator][df.index[

1

]] stk_code_file =

'../TQDat/data/tq_stock_code.csv'

stk_pools = pd.read_csv(stk_code_file, encoding =

'gbk'

) out_df = pd.DataFrame(columns=[

'code'

], dtype = str)

for

stk_code

in

stk_pools[

'code'

]: stk_code =

'%06d'

% stk_code input_file =

'./tmp/'

+ stk_code +

'.csv'

df = pd.read_csv(input_file, index_col =

0

) df = df.sort_index(ascending =

False

)

if

golden_crossover(df,

5

,

60

): out_df = out_df.append({

'code'

: stk_code}, ignore_index =

True

) print(stk_code) out_df.to_csv(

'./output/stock_picking.csv'

)/<code>


分享到:


相關文章: