ゼロからPythonで株式量子化取引を実現するシロノート(5)
上記のように、このノートは、日線(前復権)データの保存方法を記録するために使用されます.
次の手順に従います.
1、mysqlを使用してすべての株式コードと上場日を取得し、戻り値は2次元配列である.
2、株を巡り始め、for inを使う.
3、stock_で具体的な株を探すdaily_qfqテーブルの最大の取引日;
4、whileサイクルを開き、日付を数値に変換する.一年一年に日線データを取得し、保存する.
5、開始時間が現在の日付より大きい場合、whileループを終了し、次の株の遍歴を継続します.
6、遍歴が終わる.
コードの修正を開始します.修正が完了したコードは次のとおりです.
実行します.警告が見つかりました.類似しています.
Warning: Data truncated for column 'turnover_rate' at row 1 rowcount = cursor.executemany(statement, parameters)
Warning: Data truncated for column 'amount' at row 12 rowcount = cursor.executemany(statement, parameters)
この2つのカラムはいずれもdecimal(10,2)であり、このカラムが値を正常に保存できないと警告され、関連するデータを並べ替え、一部のカラムのdecimalをdouble(16,4)に変更します.データテーブルが変更され、コメントが追加されました.新しいデータテーブルsqlは以下の通りです.
コードを実行し続け、正常にデータを書き込み、問題が発生しない場合は、終了まで実行し続けましょう.
このノートはここまでで、機械学習、pandas、指標分析に関する内容を始めます.
次の手順に従います.
1、mysqlを使用してすべての株式コードと上場日を取得し、戻り値は2次元配列である.
2、株を巡り始め、for inを使う.
3、stock_で具体的な株を探すdaily_qfqテーブルの最大の取引日;
4、whileサイクルを開き、日付を数値に変換する.一年一年に日線データを取得し、保存する.
5、開始時間が現在の日付より大きい場合、whileループを終了し、次の株の遍歴を継続します.
6、遍歴が終わる.
コードの修正を開始します.修正が完了したコードは次のとおりです.
#coding=utf-8
from common import db
from common import ts
import tushare
import time # time
stock_conn = db.get_stock_conn()
stock_cursor = stock_conn.cursor()
stock_cursor.execute("select ts_code,list_date from stock_basic") #
basic_rows = stock_cursor.fetchall() #
ts.set_ts_token()
pro = tushare.pro_api() #pro_bar pro
for basic_row in basic_rows: #
ts_code = basic_row[0] #
print ts_code, 'start'
list_date = int(basic_row[1]) # , ,
stock_cursor.execute("select max(trade_date) from stock_daily_qfq where ts_code = \'%s\'" % ts_code)
info = stock_cursor.fetchone()
current_date = list_date #
if info[0]: # , (None,), info, , info[0]
current_date = int(info[0])+1 # , ,
today = int(time.strftime("%Y%m%d", time.localtime())) # 20190128
while current_date <= today:
end_d = current_date + 10000 -1 #
df = tushare.pro_bar(pro_api=pro, ts_code=ts_code, adj='qfq', start_date=str(current_date), end_date=str(end_d),
ma=[5, 10, 30, 60, 13, 21, 55], factors=['tor', 'vr'])
current_date = end_d + 1 #
if df is None or len(df) == 0: # None df
print current_date
continue
df = df.ix[:, 1:] #
df.to_sql('stock_daily_qfq', ts.get_engine(), if_exists='append') #
print current_date, 'add'
print ts_code, 'success'
実行します.警告が見つかりました.類似しています.
Warning: Data truncated for column 'turnover_rate' at row 1 rowcount = cursor.executemany(statement, parameters)
Warning: Data truncated for column 'amount' at row 12 rowcount = cursor.executemany(statement, parameters)
この2つのカラムはいずれもdecimal(10,2)であり、このカラムが値を正常に保存できないと警告され、関連するデータを並べ替え、一部のカラムのdecimalをdouble(16,4)に変更します.データテーブルが変更され、コメントが追加されました.新しいデータテーブルsqlは以下の通りです.
CREATE TABLE `stock_daily_qfq` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trade_date` varchar(10) DEFAULT '' COMMENT ' ',
`ts_code` varchar(12) DEFAULT '' COMMENT ' ',
`open` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`high` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`low` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`close` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`pre_close` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`change` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`pct_chg` double(16,4) DEFAULT '0.0000' COMMENT ' ',
`vol` decimal(10,2) DEFAULT '0.00' COMMENT ' ( )',
`amount` double(16,4) DEFAULT '0.0000' COMMENT ' ( )',
`turnover_rate` double(16,4) DEFAULT NULL COMMENT ' ',
`volume_ratio` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`ma5` decimal(10,2) DEFAULT '0.00' COMMENT ' ',
`ma_v_5` decimal(10,2) DEFAULT '0.00' COMMENT '5 ',
`ma10` decimal(10,2) DEFAULT '0.00',
`ma_v_10` decimal(10,2) DEFAULT '0.00',
`ma30` decimal(10,2) DEFAULT '0.00',
`ma_v_30` decimal(10,2) DEFAULT '0.00',
`ma60` decimal(10,2) DEFAULT '0.00',
`ma_v_60` decimal(10,2) DEFAULT '0.00',
`ma13` decimal(10,2) DEFAULT '0.00',
`ma_v_13` decimal(10,2) DEFAULT '0.00',
`ma21` decimal(10,2) DEFAULT '0.00',
`ma_v_21` decimal(10,2) DEFAULT '0.00',
`ma55` decimal(10,2) DEFAULT '0.00',
`ma_v_55` decimal(10,2) DEFAULT '0.00',
PRIMARY KEY (`id`),
UNIQUE KEY `uni_key` (`trade_date`,`ts_code`) USING BTREE,
KEY `ts_code` (`ts_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=203 DEFAULT CHARSET=utf8
コードを実行し続け、正常にデータを書き込み、問題が発生しない場合は、終了まで実行し続けましょう.
このノートはここまでで、機械学習、pandas、指標分析に関する内容を始めます.