Pythonのチュートリアル:あなたは定量分析の独自のデータベースを構築する方法を教え

Pythonのチュートリアル:あなたは定量分析の独自のデータベースを構築する方法を教え

はじめに:

財務データは、株式上場企業の基本的なデータ、マクロおよび産業データを含む、履歴トランザクションデータの定量分析のための重要な基礎です。情報の拡大を続ける流れと、取得、データ処理を学び、クエリ情報は、ますます重要になってきています。定量的取引にいじくり人々のために、どのようにデータベースがそれを再生されません言うことができますか?最も一般的に使用されるオープンソース(無料)データベースは、その使用と人気を示し、2018- 2019 DB-エンジンのリストに(下記参照)、トップ10の中では、MySQL、Postgresqlの、MongoDBのとSQLiteの(Pythonが来る)を持っています高いです。これらのデータベースは、自らの特性やアプリケーション環境を持っている、インターネット上で学習する方法を学習または関連する多くの情報を持っています。この記事では、独自の定量分析データベースを構築するステップでパンダ、ステップと対話psycopg2を使用し、Pythonが(他のデータベースと同様)PostgreSQLデータベースを操作する使用すると、データフレームにpostgresqlを達成SQLAlchemyの方法についての簡単な紹介です。

Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 

PostgreSQLのインストールと使用

PostgreSQLをインストール。PostgreSQLのインストール手順の詳細:自分のコンピュータの構成のダウンロード版を選択するには、公式ウェブサイトに、他のすべてのオプションのデフォルトは、正直CSDNの記事を参照していない(この記事は「123456」に設定されている)パスワードを設定するだけでなく、インストールプロセスをインストールすることができます(Windowsの場合)。インストール後、これはPythonのJupyterノートに多少似グラフィカルツールが付属していたデータベース、Webアプリケーションの最新バージョンです、インストールディレクトリpgAdmin4でも見ることができる、PostgreSQLデータベースを表示および操作するために使用することができます。

Psycopg2インストールとPythonのSQLAlchemyのライブラリ。Pythonはpsycopg2 PostgreSQLデータベース・インターフェースである、SQLAlchemyのより広範なアプリケーション、特にデータ型のデータフレームパンダため、操作が非常に便利であり、データベース(MySQLの、SQLiteの、PostgreSQLの)に接続することができます。二人はピップxxxはCMDにインストールすることができますインストールし使用して、ここでは詳細に進まないように、Pythonライブラリの多くは、オンラインでご紹介していました。

アプリケーションの例

まず、tushareローカル、psycopg2とsqlalchemyのインターフェイスを使用する3000以上の株式市場データを取得し、データをさらに問い合わせや操作を容易にするために、ローカルのPostgreSQLデータベースに格納されています。

など#最初に導入された後の解析、可視化は、ライブラリで使用することができる
ASインポートtushare TS
PDのASインポートPANDAS
NPとしてインポートするnumpyの
インポートは、PLTのAS matplotlib.pyplot
中国と負の符号描画する際に、通常の画面が表示されます#
pylabインポートのmplから
mpl.rcParamsを[ '-font.sansセリフ'] = [ 'SimHei']
mpl.rcParams [ 'axes.unicode_minusは'] = falseを
トークン設定#
= 'あなたのトークン入力してください'トークン
プロ= ts.pro_api(トークン)

データ取得機能、デフォルトの時間はいつでも変更することができます。

#エラーは、最新のtushareにアップグレードする場合は
DEF get_Data(コード、スタート= '20、190101' 、エンド= '20、190425' ):
DF = ts.pro_bar(ts_code =コード、ADJ = 'qfq'、start_dateの=スタート、END_DATE =終了)
DFリターン
証券コードは、最新の取引日のコードを取得する関数を取得します。
#新しい銘柄記号と略語の現在の取引日を取得
DEF GET_CODE():
コード= pro.stock_basic(list_status =「L」)ts_code.valuesを
リターンコード

 

挿入PostgreSQLのデータベース操作は、使用中の機能は、エラーがプログラムがクラッシュするいくつかのデータを避けるために、渡す...除いて...してみてください。

以下からのインポートcreate_engineのSQLAlchemyの
インポートpsycopg2の
エンジンcreate_engine =( '://のPostgres:localhostの@ 123456 5432 / Postgresの+ PostgreSQLのpsycopg2')
DEFのinsert_sql(データ、DB_NAME、if_existsは= 'APPEND'):
を使用してみてください...除きます。 .CONTINUEエラーを回避するため、崩壊の実行
を試して:
data.to_sql(DB_NAME、エンジン、インデックス= Falseを、if_exists = if_exists)
#Print( 'データベースに正常に書き込まれた'コード+)
を除く:
パス

市場データの膨大な量に毎日の取引期間をダウンロードするには、もっとゆっくりダウンロードしてください20190101から20190425

データ、その後の再は常に更新します。


データベースとstock_dataに#20190101-20190425ダウンロードデータ
このステップは、一般的に約25〜35分かかる時間であり、#
()におけるGET_CODEコードの:
データ= get_Data(コード)
insert_sql(データ、「stock_data」)は
#テーブル全体を読み取りますデータ
DF = pd.read_sql( 'stock_data'、エンジン)
印刷(LEN(DF))
出力:270998
#1 ts_code =在庫データを選択し000001.SZ
DF = pd.read_sql(「SELECT * FROM ts_code = 'stock_data 000001.SZ」」、エンジン)
印刷(LEN(DF))

データ更新機能の構築をダウンロードすることができ、その他のデータは、時間帯に挿入します。2018年1月1日2019年4月25日に、データは108万に達していました。

#更新は、データ、またはデータの間に他のダウンロード
DEFのupdate_sql(開始、終了、DB_NAME):
日時インポート日時で、timedeltaから
:GET_CODE()内のコードのため
のデータ= get_Data(コード、開始、終了)
insert_sql(データ、DB_NAME)
を印刷(F 「{開始}:正常に更新されたデータ中の{終了}」)
20180101-20181231データ#のダウンロード中に
#が一度だけ実行し、もはや実行はコメントすることができ
、#はデータが比較的遅いダウンロードし、それを約20-35分かかる
'=スタート20180101 '
エンド=' 20181231 '
DB_NAME =' stock_data '
#は、データベースとにデータをダウンロードし
update_sql(開始、終了、DB_NAME)
読み出しデータread_sql使用して#パンダ
(stock_data」、エンジン)df_all_data = pd.read_sql'
印刷(LENを(df_all_data))
出力:1087050
#ビュートランザクションコード番号およびトランザクションの日付
を印刷する(LEN(df_all_data.ts_code.unique()))
印刷(LEN(df_all_data.trade_date.unique()))
出力番号:3604; 319
D = df_all_data.trade_date.unique()
プリント(d.max())
プリント(d.min())
2019-04-25T00:00:00.000000000
2018-01-02T00:00:00.000000000
#は2019年4月25日の取引日のデータを取得します
( "stock_dataから選択* pd.read_sql .head()、エンジンtrade_date = '2019年4月25日を'")
Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 


建設データクエリと可視化機能:
DEF plot_data(条件条件、タイトル用):
pyechartsバーのインポートから
SQLAlchemyのインポートcreate_engineのから
エンジンcreate_engine =( '+ PostgreSQLのpsycopg2://のPostgres:localhostの@ 123456:5432 / Postgresの')
データ= pd.read_sql (条件条件、エンジンの+ "* + stock_dataから選択")
count_ = data.groupby( 'trade_date')[ 'ts_code']。COUNT()
のattr = count_.index
V1 = count_.values
バー=バー(タイトル、title_text_size = 15)
bar.add( 'ATTR、'、V1、is_splitline_show = Falseを、線幅= 2)として
リターンバー
重複が整理データ配信ストック未満2元
C1 = "閉じる<2"
T1 =「株式2未満元時間分布ストック「
plot_data(C1、T1)

 

Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 

チェック株価は、日本株は、データの分布より9.5%の増加となりました引用します:

c2="pct_chg>9.5"
t2="股价涨幅超过9.5%个股时间分布"
plot_data(c2,t2)

 

Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 

 

查询股价日跌幅超过-9.5%个股数据分布:

c3="pct_chg<-9.5"
t3="股价跌幅超过-9.5%个股时间分布"
plot_data(c3,t3)

 

Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 

 

结合选股策略对数据库进行查询和提取数据:

#筛选代码
#获取当前交易的股票代码和名称
def get_new_code(date):
#获取当前所有交易股票代码
df0 = pro.stock_basic(exchange='', list_status='L')
df1 =pro.daily_basic(trade_date=date)
df=pd.merge(df0,df1,on='ts_code')
#剔除2017年以后上市的新股次新股
df=df[df['list_date'].apply(int).values<20170101]
#剔除st股
df=df[-df['name'].apply(lambda x:x.startswith('*ST'))]
#剔除动态市盈率为负的
df=df[df.pe_ttm>0]
#剔除大市值股票
df=df[df.circ_mv<10**5]
#剔除价格高于20元股票
#df=df[df.close<20]
codes=df.ts_code.values
return codes
len(get_new_code('20190425'))
#输出结果:46
import talib as ta
#20日均线交易策略
def find_stock(date):
f_code=[]
for code in get_new_code(date):
try:
data=df_all_data.loc[df_all_data.ts_code==code].copy()
data.index=pd.to_datetime(data.trade_date)
data=data.sort_index()
data['ma_20']=ta.MA(data.close,timeperiod=20)
if data.iloc[-1]['close']>data.iloc[-1]['ma_20']:
f_code.append(code)
except:
pass
return f_code
fs=find_stock('20190305')
print(f'筛选出的股票个数:{len(fs)}')
if fs:
df_find_stocks=pd.DataFrame(fs,columns=['ts_code'])
#将选出的股票存入数据库,如果表已存在,替换掉,相当于每次更新
insert_sql(df_find_stocks,'find_stocks',if_exists='replace')
print('筛选的股票已入库')
筛选出的股票个数:9
筛选的股票已入库
#查看数据库中筛选的股票池
codes=pd.read_sql('find_stocks',engine)
codes=codes.values.tolist()
codes=[c[0] for c in codes]
#print(codes)

对筛选的股票作进一步分析:

select_data=pd.DataFrame()
for code in codes:
try:
df_= df_all_data[df_all_data.ts_code.values==code]
df_.index=pd.to_datetime(df_.trade_date)
df_=df_.sort_index()
select_data[code]=df_.close
except:
pass
select_data.fillna(method='ffill',inplace=True)
select_data.tail()
ret=select_data.apply(lambda x:x/x.shift(1)-1)
ret=ret.dropna()
ret.tail()
prod_ret=ret.apply(lambda x:(1+x).cumprod())
prod_ret.plot(figsize=(12,5))
plt.xlabel('',fontsize=15)
plt.title('股票池累计净值',size=15)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.show()

 

Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 

 

#根据代码从数据库中获取数据
def get_data_from_sql(code):
from sqlalchemy import create_engine
engine = create_engine('postgresql+psycopg2://postgres:123456@localhost:5432/postgres')
data=pd.read_sql(f"select * from stock_data where ts_code='{code}'",engine)
data.index=pd.to_datetime(data.trade_date)
data=data.sort_index()
#计算20日均线
data['ma20']=data.close.rolling(20).mean()
return data

利用20日均线交易策略,搭建数据查询和可视化函数kline_plot(),完整代码将分享在知识星球上。对选出的股票日K线、20日均线、成交量、买入(buy)和卖出(sell)信号进行可视化,下面以002790.和300573股票的K线图为例。

kline_plot('002790.SZ')

 

Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 

kline_plot('300573.SZ')

 

Pythonのチュートリアル:干し実用的な操作 - 定量分析の独自のデータベースを構築する方法をあなたに教え

 

 

结语

 

実際には、まだ多くが何であるかのデータベース操作を学ぶために、この記事では、独自の定量分析データベースを構築するステップではPythonとPostgreSQLデータベースのデータフレームのデータが相互作用し、ステップを使用して簡単に紹介を開始することを目指しています。使用したデータのテキストは、唯一の約百万、実際の読み書きCSVファイルを迅速かつ比較的直感的に優れますが、データが増えて、自分の音定量分析システムを確立し、データベースを習得するために使用されているとおりこれは特に重要です。テキストは、銘柄選択と呼ばれ、証券コードは、サンプルアプリケーションとしてのみ使用され、投資助言を構成するものではないことに注意してください

おすすめ

転載: www.cnblogs.com/cherry-tang/p/10968239.html