見出し画像

(文系のPython) 決算結果を入力するだけで決算結果の良し悪しを一瞬で判定するプログラミング

(目的)
決算結果出たときにさっと決算がよかったかどうかを確認する。

コマンドプロンプトに決算結果を打ち込み、Microsoft Excelに記録しておいたEPSコンセンサス予想、売上高コンセンサス予想、次期ガイダンスのコンセンサス予想(EPS, 売上高)と比較する。

アウトプットは下記。

読み込み元は下記Excelシート。

(背景)
決算結果の良し悪しの基準はこれに基づいています。

(前提条件)
・Pythonをインストールしている
・コマンドプロンプトからpyファイルを呼び出せる
・BeautifulSoupを(pipで)インストールしている
・openpyxlを(pipで)インストールしている
・pprintを(pipで)インストールしている

(やり方)
まずは前回のところまでやる。

次に大量のインプットリクエストを。
*エクセルのデータと突き合わせる際にTickerだけだとどのクオーターのデータを取ればいいかわからないので、TickerとPeriodを合わせた値を作る。
Key = Tik + " -" _ Qtr

Tik = input('input Ticker symbol:')
Qtr = input('input Quarter (MMM YYYY):')
key = Tik + " -" + Qtr

EPS = input('input reported EPS:')
Rev = input('input reported Revenue:')
EPS_g = input('input reported New EPS guidance (lower limit):')
Rev_g = input('input reported New Revenue guidance (lower limit):')

あとはシンプルなif分でinputで打ち込んだ値と、エクセルから持ってきた値が同じかどうかを判定する。4回する。(EPS, 売上, 次クオーターEPSガイダンス, 次クオーター売上ガイダンス)

try:
    if float(EPS) > dict[key][0]:
        EPSresult = 'GOOD'
        print("EPS is", EPSresult)
    else:
        EPSresult = 'BAD'
        print("EPS is", EPSresult)
except:
    pass

try:
    if float(Rev) > float(re.sub(r"[BM]", "", dict[key][2])):
        REVresult = 'GOOD'
        print("Revenue is OK")
    else:
        REVresult = 'BAD'
        print("Revenue is bad")
except:
    pass

try:
    if EPS_g == 'NA':
        EPS_g_result = "NA"
        print('New EPG guidance is NA')
    elif float(EPS_g) > dict[key][1]:
        print("New EPS guidance is OK")
        EPS_g_result = "GOOD"
    else:
        EPS_g_result = "BAD"
        print("New EPS guidance is bad")
except:
    pass

try:
    if Rev_g == 'NA':
        Rev_g_result = 'NA'
        print('New Revenue guidance is NA')
    elif float(Rev_g) > float(re.sub(r"[BM]", "", dict[key][3])):
        Rev_g_result = 'GOOD'
        print("New Revenue guidance is OK")
    else:
        Rev_g_result = 'BAD'
        print("New Revenue guidance is bad")
except:
    pass

おしまい。次回は決算の良し悪しを判定したデータを別のExcelファイルに保存します。

今回のコード全文。

import openpyxl
import re
import pprint

wb = openpyxl.load_workbook('sample2.xlsx')

# grab the active worksheet
ws = wb.active
dict = {}
outputList = []
inputList = []
cnt = 0
while True:
    if ws['A2'].offset(row=cnt, column=0).value == None:
        break
    for c in range(4):
        outputList.append(ws['C2'].offset(row=cnt, column=c).value)
    key = str(ws['A2'].offset(row=cnt, column=0).value) + " -" + str(ws['B2'].offset(row=cnt, column=0).value)
    #同じキーが出てきたら、値が下のセルにアップデートされる。
    dict[key] = outputList
    outputList = []
    cnt += 1

pp = pprint.PrettyPrinter(indent=3)
pp.pprint(dict)

Tik = input('input Ticker symbol:')
Qtr = input('input Quarter (MMM YYYY):')
key = Tik + " -" + Qtr

EPS = input('input reported EPS:')
Rev = input('input reported Revenue:')
EPS_g = input('input reported New EPS guidance (lower limit):')
Rev_g = input('input reported New Revenue guidance (lower limit):')

print("")
try:
    if float(EPS) > dict[key][0]:
        EPSresult = 'GOOD'
        print("EPS is", EPSresult)
    else:
        EPSresult = 'BAD'
        print("EPS is", EPSresult)
except:
    pass

try:
    if float(Rev) > float(re.sub(r"[BM]", "", dict[key][2])):
        REVresult = 'GOOD'
        print("Revenue is OK")
    else:
        REVresult = 'BAD'
        print("Revenue is bad")
except:
    pass

try:
    if EPS_g == 'NA':
        EPS_g_result = "NA"
        print('New EPG guidance is NA')
    elif float(EPS_g) > dict[key][1]:
        print("New EPS guidance is OK")
        EPS_g_result = "GOOD"
    else:
        EPS_g_result = "BAD"
        print("New EPS guidance is bad")
except:
    pass

try:
    if Rev_g == 'NA':
        Rev_g_result = 'NA'
        print('New Revenue guidance is NA')
    elif float(Rev_g) > float(re.sub(r"[BM]", "", dict[key][3])):
        Rev_g_result = 'GOOD'
        print("New Revenue guidance is OK")
    else:
        Rev_g_result = 'BAD'
        print("New Revenue guidance is bad")
except:
    pass
ありがとうございます!褒められるって、うれしいですね。
1

ゆう:D

1986年生まれ / シンガポール在住中

文系のPython

文系の仕事を効率化するためにPythonを扱っています。やっていることは単純作業の自動化です(ネット上にある情報をコマンドプロンプトから操作して取ってくるのが主です)。Pythonで何ができるかに重きを置いているのでコード的には似たような内容を繰り返しています。どうやってコ...
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。