取引用 銘柄コード取得 symbolname_trade.py
import urllib.request
import json
import pprint
import settings
import symbolname_watch
def symbolname_trade():
url = 'http://localhost:' + settings.port + '/kabusapi/symbolname/future'
params = { 'FutureCode': settings.future_code_trade,
'DerivMonth': settings.drive_month}
req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(params)), method='GET')
req.add_header('Content-Type', 'application/json')
req.add_header('X-API-KEY', settings.token)
try:
print('###symbolname_trade')
with urllib.request.urlopen(req) as res:
print(res.status, res.reason)
for header in res.getheaders():
print(header)
print()
content = json.loads(res.read())
pprint.pprint(content)
#取引銘柄コードを保存
settings.symbol_trade = content['Symbol']
pprint.pprint(settings.symbol_trade)
#監視銘柄コードを取得
symbolname_watch.symbolname_watch()
except urllib.error.HTTPError as e:
print(e)
content = json.loads(e.read())
pprint.pprint(content)
except Exception as e:
print(e)
if __name__ == "__main__":
import sys
symbolname_trade()
先物銘柄コード取得
先物は限月と言って、清算する期日によって別々に商品が売買され、価格も別々になります。したがって、月日の経過によって銘柄コードはどんどん増えていき、限月を迎えた銘柄コードは無効になっていきます。
予め銘柄コードが分かっている場合はハードコーディングでもよいのですが、せっかくブログラム化しているので、APIで銘柄コードも所得することとしました。
取得した銘柄コードは、グローバル変数に取得するようにしています。
監視用 銘柄コード取得 symbolname_watch.py
import urllib.request
import json
import pprint
import settings
import register_watch
def symbolname_watch():
url = 'http://localhost:' + settings.port + '/kabusapi/symbolname/future'
params = { 'FutureCode': settings.future_code_watch,
'DerivMonth': settings.drive_month}
req = urllib.request.Request('{}?{}'.format(url, urllib.parse.urlencode(params)), method='GET')
req.add_header('Content-Type', 'application/json')
req.add_header('X-API-KEY', settings.token)
try:
print('###symbolname_watch')
with urllib.request.urlopen(req) as res:
print(res.status, res.reason)
for header in res.getheaders():
print(header)
print()
content = json.loads(res.read())
pprint.pprint(content)
#監視銘柄コードを保存
settings.symbol_watch = content['Symbol']
pprint.pprint(settings.symbol_watch)
#PUSh配信銘柄登録
register_watch.register_watch()
except urllib.error.HTTPError as e:
print(e)
content = json.loads(e.read())
pprint.pprint(content)
except Exception as e:
print(e)
if __name__ == "__main__":
import sys
symbolname_watch()
取引用銘柄と監視用銘柄が別なので、同じ処理を2個作りました。
もちろん今だったら引数を変えて、同じモジュールを使いまわしますが、当時はまだ「数珠繋ぎ方式」とか言っていたので、冗長の極みのようなコードになってしまっています。
コメント