‹ Mockun Note

GRU(tf/keras)でBitcoin(FX)の自動売買

Posted Apr 13, 2018

少し前から私のTLを賑わしているビットコインの自動売買に挑戦してみました。売買判定ロジックは、ディープ・ラーニングの中でも時系列の予測に強いとされるRNN系のユニットであるGRUを使っています。

データ取得元

過去の価格情報は、こちらのAPIを利用しています。tickデータを加工する必要がなく、簡単に4本値(OHLC)を取得できるのはありがたい。取引所が提供するAPIが望ましいのですが、すぐに見つけられなかったので上記のサイトを利用しています。

利用する特徴量

  • RSI(複数期間) bitFlyer Lightningのチャートでデフォルト表示されているため、多くの人が見ており、効くと考えました。
  • リターン(複数期間) 予測対象がリターンのため、必要だとかんがえました。

チャートのデフォルト表示という意味ではMACDもあるので、追加しても良さそうです。

ネットワーク構造

TensorFlowに含まれるKerasでGRUを使ったネットワークを定義しています。 特に論文等の裏付けはありません。いろいろ模索して、誤差が小さくなった構造を使っています。

n_steps = train_x.shape[1]
n_features = train_x.shape[-1]

# structuring Network
model = Sequential()
model.add(GRU(units=32, 
              input_shape=(n_steps, n_features), 
              activation='linear', 
              kernel_initializer=he_normal(seed=1337), 
              return_sequences=True,
              #dropout=0.01
             ))
model.add(GRU(units=16, 
              activation='relu', 
              kernel_initializer=he_normal(seed=1337), 
              return_sequences=True,
              #dropout=0.01
             ))
model.add(GRU(units=16, 
              activation='tanh', 
              kernel_initializer=he_normal(seed=1337),
              dropout=0.01
             ))
model.add(Flatten())
model.add(BatchNormalization())
model.add(Dense(units=1, 
                activation='linear',
               ))

# compile 
model.compile(
              loss=root_mean_squared_error, 
              optimizer=Nadam(), 
              sample_weight_mode=None, 
              metrics=['mse', 'mae', 'mape', 'cosine'], 
             )

# train
hist = model.fit(train_x, 
                 train_y, 
                 epochs=1000, 
                 batch_size=5000, 
                 verbose=0, 
                 validation_data=(val_x, val_y), 
                 callbacks=[EarlyStopping(monitor='val_loss', min_delta=0, patience=30, verbose=1, mode='auto')]
                )

取引の概要

取引所:bitFlyer Lightning 商品:BTC-FX/JPY 最大レバレッジ:15倍 1回のトレードサイズ:レバレッジ1倍分だけ 取引頻度:最多で1時間に1回。シグナルがでなければトレードしない。

シグナルが1回出たら、レバレッジ1倍分のBTC-FXを売買します。最大レバレッジが15倍にしているため、同じ方向にシグナルが出た場合には最大で15回追加投資ができます。

成績

4/2:4,383円 4/13:7,150円

当初、証拠金をBTC建てで持っていたために発生した利益500円程度を含んでいるため、ボットが生み出した利益は2,000円程度です。利回りは凄いんですが、金額が小さいため小銭拾いしているような気分です。

今後の展望

もう少し動かしてみないと良し悪しが判断できないので、継続して動かしていこうと思います。気が向いたら追記します。

Twitterやってます。