auカブコム証券 kabuステーションAPI 先物取引用プログラム(3) 先物銘柄コード取得 ~取引用、監視用

スポンサーリンク

取引用 銘柄コード取得 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個作りました。

もちろん今だったら引数を変えて、同じモジュールを使いまわしますが、当時はまだ「数珠繋ぎ方式」とか言っていたので、冗長の極みのようなコードになってしまっています。

先物取引
スポンサーリンク
システムトレードでそこそこ設ける方法

コメント