Pythonによるauカブコム証券kabuステーションAPIを利用したトレーニングストップブログラム解説 1

スポンサーリンク

公開プログラムのtrailingStop解説します

けっこう、読者の方から技術解説系の記事の反応があるようなので、最近公開した、Pythonで作ったトレーリングストップのプログラムについて、解説の記事を書いていこうと思います。

概念図

メイン処理から、各モジュールを呼び出すかたちで、

  1. Token取得
  2. WebSocket(PUSH API)監視銘柄登録
  3. WebSocket(PUSH API)で株価情報を受信
    株価がこれまでの最安値(最高値)から指定しれた価格以上に値上がり(値下がり)していたら終了
  4. 成行き注文発注

という流れになってます。

数珠繋ぎ方式止めました

最初に作ったプログラムは、

「モジュール間呼び出し時のエラーハンドリング考えるのうぜ~」といって、

モジュールA → モジュールB → モジュールC

数珠繋ぎで呼び出すようなかたちでプログラムを書いていました。

404 NOT FOUND | システムトレードでそこそこ儲ける方法
サラリーマンをしながら豊かな副収入

しかし、上の記事でも書きましたが、数珠繋ぎ方式だと、必然的に一つのモジュールから次のモジュールを呼び出すところが固有の処理になってしまい、モジュールが別のプログラムで再利用できません

そこで、私は2つ目のプログラムを作るときにもう嫌になってしまい、敢え無く数珠繋ぎ方式は止めることにしました。

メイン→サブ呼び出しという、普通の方式へ変更

そこで私はやはり、kabuステーションの各API呼び出し用のサブモジュールを個別に作り、メインのプログラムから、そのときやりたいロジックによって、各モジュールを呼び出すという、オーソドックスな方式をとることにしました。

そこでポイントとしたことは2つです。

  1. 各サブAPIの呼び出しは引数を用いず、すべてグローバル変数格納用モジュールの(settings.py)を経由する
  2. 各サブAPIで何かエラーが発生した場合は、直ちにブログラム自体を終了する

1つめのほうは、前から採用していた考え方です。このことにより、関数のインタフェース(引数)がその時の投資ロジック固有のものにならず、各API用のサブモジュールが再利用しやすいものになります。

2つめのほうは、もともとは私がPythonでの書き方がよくわからなかったもので、しかたなく、数珠繋ぎ方式では、「次のモジュールを呼び出さなかったら自然終了」としていました。

しかし、考えてみたらなんてことはなく、以下のように書けばよいだけでした。

import sys

def サブ関数(): 
   try:
        API呼び出し処理        
        return

    except urllib.error.HTTPError as e:
        print(e)
        content = json.loads(e.read())
        pprint.pprint(content)
    except Exception as e:
        print(e)

    sys.exit()

何もなければ、6行目のreturnでメインに処理が戻りますが、何かエラーが発生すれば最後のsys.exit()でプログラムが終了します。

今回のプログラムから、今思うと愚の骨頂としか思いない数珠繋ぎ方式はやめ、メイン→サブ呼び出し方式を採るようにしました。

つづく

コメント