株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

手仕舞いできるようにする

最初に、完成形のPRを貼っておく。

github.com

まず、持っているポジションを参照して、その反対となる売買を同数でできるメソッドを用意した。ポジションがない場合、途中で早期リターンする。

# https://github.com/dogwood008/stock-trading-system/pull/25/commits/f5a59d360c2a7b2eb006815394b257500d498587

def _close_operation(self):
    position: bt.position.Position = self.position
    size: int = position.size
    # https://github.com/mementum/backtrader/blob/e22205427bc0ac55723677c88573737a172590ef/backtrader/position.py#L130-L132
    if not size: return
    is_buy_position: bool = size > 0
    reverse_op: Callable = \
        self._sell_operation if is_buy_position else self._buy_operation
    reverse_op(size=size, price=self.CLOSE_POSITION_ORDER_PRICE)

あとは「5本連続」で上げ/下げの場合に、買い/売りというロジックにしていたが、これを可変にした。

# https://github.com/dogwood008/stock-trading-system/pull/25/commits/8af8e19dbde866cc266c85e5b191b544fc29f183

def _is_increasing_over_n_ticks(self, n: int) -> bool:
    '''
    Returns
    ---------------
        もしn本連続で上がっているならTrue
    '''
    return all(map(
        lambda x: self._dataclose[-x] >= self._dataclose[-(x+1)],
        range(n)))

可変にして色々試し、 10 に設定した際の勝ち負けは下記のような感じになった。

青は勝ち、赤は負けを表す
青は勝ち、赤は負けを表す

上図の時、10,000,000 円から初めて、最終的な時価総額は 10,022,000 円 (+0.22%)となった。

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.