ゼロからPythonで株式量子化取引を実現するシロノート(5)


上記のように、このノートは、日線(前復権)データの保存方法を記録するために使用されます.
次の手順に従います.
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、指標分析に関する内容を始めます.