iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
1

技術整合

前情提要

Day-08 資料蒐集:取得個股每月各交易日盤後資訊 + 解析 CSV

解析命令列參數

import argparse
import datetime

import loguru

def main(args):
    # 判斷命令列參數是否有 -c 或 --check
    if args.check:
        loguru.logger.info(f'[-c|--check] is used')
    else:
        loguru.logger.info(f'[-c|--check] is not used')
    
    # 判斷命令列參數是否有 -t [value] 或 --today [value]
    if args.today:
        loguru.logger.info(f'[-t|--today] [value:{args.today}]')
    else:
        loguru.logger.info(f'[-t|--today] is not used')

if __name__ == '__main__':
    # 初始化參數解析器
    parser = argparse.ArgumentParser()

    # 加入參數範本
    # -t [value:yyyy-mm-dd]
    # --today [value:yyyy-mm-dd]
    parser.add_argument(
        # 短參數
        '-t',
        # 長參數
        '--today',
        # 參數說明
        help='set today in yyyy-mm-dd format',
        # 如果參數需要由字串解析成指定型態或物件,使用 type 參數
        type=lambda s: datetime.datetime.strptime(s, '%Y-%m-%d')
    )
    # 加入參數範本
    # -c
    # --check
    parser.add_argument(
        '-c',
        '--check',
        help='enable check mode',
        # 如果參數後不提供值,使用 store_true / store_false 作為預設值 True / False
        action='store_true'
    )

    # 解析命令列參數
    args = parser.parse_args()

    main(args)

命令列參數使用範例

多模式共用模組

透過參數設定今天為指定日期,讓程式可以同時支援運行即時交易與歷史回測模式。

import argparse
import csv
import datetime

import loguru

today = datetime.date.today()

def process_taiex(row):
    pass

def predict_taiex():
    # 以指定日期取出 day08.py 每日取得並儲存的結果進行運算
    with open(f'day-08-{today:%Y%m%d}.csv', 'r', newline='') as f:
        reader = csv.DictReader(f)
        for row in reader:
            process_taiex(row)

def main(args):
    global today

    if args.check:
        loguru.logger.info(f'[-c|--check] is used')
    else:
        loguru.logger.info(f'[-c|--check] is not used')
    
    if args.today:
        loguru.logger.info(f'[-t|--today] [value:{args.today}]')
        # 假設今日為指定日期
        today = args.today
    else:
        loguru.logger.info(f'[-t|--today] is not used')

    predict_taiex()

if __name__ == '__main__':
    parser = argparse.ArgumentParser()

    # -t [value:yyyy-mm-dd]
    # --today [value:yyyy-mm-dd]
    parser.add_argument(
        '-t',
        '--today',
        help='set today in yyyy-mm-dd format',
        type=lambda s: datetime.datetime.strptime(s, '%Y-%m-%d')
    )
    # -c
    # --check
    parser.add_argument(
        '-c',
        '--check',
        help='enable check mode',
        action='store_true'
    )

    args = parser.parse_args()

    main(args)

只要在資料取出和運算的邏輯上安排好流程,讓即時交易與歷史回測共用相同機制,則可透過 [-t|--today] 參數的使用與否,在不同模式之間切換。

Would You Like To Know More?

https://docs.python.org/3.6/library/argparse.html


團隊系列文:

CSScoke - 金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎
Clarence - LINE bot 好好玩 30 天玩轉 LINE API
Hina Hina - 陣列大亂鬥
King Tzeng - IoT沒那麼難!新手用JavaScript入門做自己的玩具
Vita Ora - 好 Js 不學嗎 !? JavaScript 入門中的入門。
TaTaMo - 用Python開發的網頁不能放到Github上?Lektor說可以!!


上一篇
Day-11 資料保存:取得 2019 年每日加權指數盤後資訊並繪製線圖
下一篇
Day-13 視窗程式:使用 wxPython
系列文
Python 程式交易 30 天新手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言