見出し画像

ポジション自炊して高速に売買を行うBitFlyerでの高速botフレームワーク(mmbotと高速スキャルピングbotのサンプルロジック付属)


【目次】

1.概要説明
当botフレームワークの説明

2.BFScalpingのソースコードとサンプルロジック
botのソースコードとともに、秒スキャロジック、mmbotロジック各1つの公開と、ソースコードの公開と簡単な起動方法の説明
pybitflyerのエンドポイント変更方法の説明

3.オプションパラメータの使用方法
各種オプションパラメータの詳細説明

4.秒スキャモードでのロジックストラテジーの書き方
秒スキャモードで使用する場合の動作説明とロジックストラテジーの書き方

5.リアルタイムmmbotモードでのロジックストラテジーの書き方
リアルタイムmmbotロジックの動作説明とロジックストラテジーの書き方

6.キャンセル処理の行い方(サンプル)の説明
配布mmbotロジックの改良と本体のバージョンアップの説明

7.板情報取得方法(サンプル)の説明 <new!>
板情報を用いた取引の仕方についての説明

8.バックテスターについて
バックテスター追加モジュールの配布について

9.ポジションの自炊管理方法について
ポジションの自炊管理のために行った内容の説明

【更新情報】
 2019/4/12 初版公開
 2019/4/13 bot部修正・同梱ロジック追加
 2019/4/13 同梱ロジック修正
 2019/4/14 直近5分のAPI呼び出し回数を取得できるように
 2019/4/15 バックテスター追加モジュールについて追記
 2019/4/16 現在ポジの含み損益をロジックから参照できるように変更
 2019/4/17 起動時に呼び出される関数をサポート
 2019/4/18 websocketで板情報を取得するように対応
 2019/4/19 market_buy / market_sell の戻り値を変更
 2019/4/20 バグフィックス
 2019/4/21 約定検知をトリガーに使えるように対応。直近5分間のアク
     セス回数 (API制限は500回) をグラフにプロットするように対応。
 2019/4/22 約定履歴で板情報を削る事でより正確な板情報が得られるよう
     に対応。
     4/21の対応でバックテスターが動作しなくなっていたので修正
 2019/4/25 ポジション管理についての項を追加
 2019/4/29 Cryptowatchから取得した分足を使ったロジック構築に対応
     その他細かい修正
 2019/5/1  建玉リストをロジック側から取得できるようになりました。
     サンプルロジック2つ追加で同梱しました。(追加した機能の
     使い方を説明するサンプルです)
  2019/5/3 ノートレード期間(複数)を設定することが出来るようになり
     ました。例えば日付の変わる急変時などをノーポジで迎えること
     が出来ます。
 2019/5/5 ノートレード期間に曜日を指定できるようになりました。
 2019/5/7 ポジションズレの検知と補正機能をサポートしました。
 2019/5/8 Cryptowatchからデータ取得時に取得する本数を指定できるよう
     になりました。
 2019/5/11 PublicAPIを用いて取得しているサーバーステータスの取得を別
     スレッドで行うように変更しました。より高速な取引が可能にな
     ります。
 2019/5/13 現物価格をwebsocketで受信し、SFD比率をロジックから参照で
     きるようになりました。
 2019/5/20 直近5分間のAPIアクセス回数が指定した値を超えた場合、ポジ
     ションをクローズして一定期間の取引を停止する機能を追加しま
     した。
 2019/5/21 ロジックから証拠金残高取得が出来るようになりました。
      ロジックからDiscordへのメッセージ送信が出来るようになり
      ました。
 2019/5/22 約定判定を行う際に、自分の発注した価格と異なる場合や、発
      注量よりも多い約定は重複した約定idであるという判定を行う
      ように変更しました。
      ポジションクローズ時に0.01未満のポジションはクローズしな
      いように変更しました。
 2019/5/25 統計表示に指値約定率(成り行き比率)を表示するようにしま
      した
 2019/6/8 ロジック側から現在ノートレード期間かどうかを確認すること
      が出来るようにしました。
 2019/6/14 getchildorders実行時にサーバーからのレスポンスが遅いことが
      あるので、getchildordersの問い合わせを別スレッドで実行す
      るようにしました。
 2019/6/25 SFD対策として、ある一定のポジションをもって運用するモー
      ドを用意しました。
      60分毎の統計情報でオーダー数・約定履歴・成行指値比率をグ
      ラフプロットでdiscordに送信する機能をサポートしました。
 2019/6/26 サーバーのBUSYステータスを確認する間隔を指定できるように
      しました。
 2019/6/29 細かいバグfix
 2019/7/6 証拠金変化から当日の損益を算出できる機能を追加
 2019/7/11 板情報更新のタイミングで売買判断するロジックをサポート
 2019/7/16 adjust_position_with_apiを使用した場合の不具合修正(7/11バ
      ージョン以降)
 2019/7/18 直近1分間の0.1btc以下の注文数をカウンタを用意し、指定した
     値を超えた場合、ポジションをクローズして一定期間の取引を停
     止する機能を追加しました。
 2019/7/30 損益グラフを1日に1回だけ(日次)出力できるようにしまし
     た。そのほか板情報に関するメンバ変数を追加しました。
 2019/8/2 肥大しがちなログファイルを一日ごとに圧縮するようにしまし
     た。
 2019/8/16 任意のタイミングでCryptowatchからデータ取得を行うことが
     できるようにしました。これにより、初回はCryptowatchからデ
     ータを取得し、以降は約定履歴から自炊したローソク足で取引す
     るロジックが作成可能です。
 2019/8/29 API制限に関する処理の変更(不具合修正も含む)
 2019/9/5 統計情報に取引量の表示と、1BTC往復当たりの利益を表示する
     ようにしましたようにしました。APIレスポンス速度のヒストグ
     ラムに中央値を表示するようにしました。

【販売方法について】
数量限定での早期販売価格は終了いたしました。現時点では個数制限無しで販売いたしますが、状況を判断して販売中止する可能性はあります。販売中止前にはtwitter @kunmosky1にてアナウンスいたします。

バージョンアップ・更新などはnoteへ追記・変更する形で更新していきます。更新時にはnoteの機能にて購入者への通知を行います。

【購入者専用 Discordサーバーについて】

基本的にはサポートをお約束しない形での販売形態をとらせていただいておりますが、購入者同士の情報交換や交流の場としてDiscordサーバーを立ち上げております。

https://discord.gg/Z8T6Nu8

上記 Discord に参加後、下記の情報を「購入申請チャンネル」に書き込みください。
(1) 購入日時(時間はだいたいで結構です)
(2) noteのニックネーム
(3) noteのID
確認後、購入者限定のチャンネルが見られるように権限の付与をいたします。
バージョンアップなどの通知もこちらで行い、追加機能の配布・販売や、追加ロジックなどの配布・販売も検討しております。

1.概要説明

このソフト BFScalping は、簡単なロジックファイルを作る事で容易に高速取引を行うbotを作成することが出来るbitFlyer専用Botのフレームワークです。

使用言語はPython3.6以降で以下のモジュールが必要です。

pybitflyer
websocket-client
python-dateutil
pandas
pyyaml
matplotlib
requests
sortedcontainers

禁止されている非公式のwebインターフェースなどは使わずすべてpybitflyer経由のapiアクセスで実現しています。

サンプルのmmbotと秒スキャロジックのファイルが付属しています。パラメータなどは未調整ですので、利益が出ることを保証できませんが、古典的なmmbotのロジックを2つ付属させます。後述するように簡単にABテストを行う事が出来るのでパラメータの最適化などを行ったり、各自独自の改良を加えていただければと思います。

可能な範囲でのフォローは行いますが、基本的には環境構築や稼働確認はご自身で行える方を対象にしておりますので、その点ご留意の上ご購入下さい。ご質問などはDiscordにてお送りいただくか、twitter @kunmosky1 へメンションまたはDMにてご連絡ください。

このbotフレームワークでは、約定履歴から自炊した秒足のローソク足を用いた秒スキャモードと、約定履歴からリアルタイムに発注を行うリアルタイムmmbotモードをサポートしています。
秒スキャモードとリアルタイムmmbotモードを混在して複数起動させることも可能です。
リアルタイムmmbotモードでも秒足のローソク足を用いた判断ロジックを作成することも可能です。

websocketを使って流れてきた約定履歴と自分の発注履歴を突き合わせてポジションを自炊管理し、getpositions(API)を使用して取得するよりも迅速に正確なポジション管理を行います。
これによって同一口座での複数稼働や、裁量取引とも共存することが可能です。また、getpositions(API)よりも高速に何度もポジション把握できるため高速な取引でもポジション違いによる逆選択のリスクを減らすことが出来ます。
約定履歴をもとに建玉情報を自炊管理し、損益グラフもbotごと個別管理することが可能です。そのため同一ロジックを少しパラメータを変更して複数走らせて、それぞれのパラメータによる損益を正確に把握することが出来、単一口座でのABフォワードテストが容易に行えます
Ctrl+Cでの中断時には現在のポジションをファイルに書き出し、再起動時には中断時のポジション情報から継続して稼働することが出来ます。

※サーバーからの意図しないレスポンスなどによりポジションがズレることもあり得ますので完全なポジション管理ではない可能性もあることをご了承ください。またポジションズレにより発生したいかなる損失も補償しかねる事ご了承ください(お約束)

起動時にはロジックとパラメータファイルを指定して起動させることが出来、異なるロジックのbotを複数起動させることが出来ます
ロジックのパラメータファイルは定期的に再読み込みしますので、botを停止・再起動させることなく稼働パラメータを変更することが出来ます。変更は後で確認できるよう Discord へログとして送られます。

サーバーステータス["NORMAL", "BUSY", "VERY BUSY", "SUPER BUSY"]を指定して特定のサーバー状態では取引しない・緊急ポジションクローズするなどの指定ができます。
executionsの配信遅延を計測して数値化しており、それをもとに取引しない・緊急ポジションクローズするなどの売買判断が出来ます。

定期的に現在の損益グラフをプロットしてdiscordへ通知することが出来ます。通知間隔は変更可能です。(下図)

損益グラフとは別に過去6時間のポジション推移、平均ポジション価格、LTP、損益グラフ、サーバーの遅延情報をプロットしたグラフをプロットしてdiscordへ通知できます。(下図)
赤色が遅延が多めのところ、緑色が少ないところです。濃い赤色のところはSUPER BUSYが発生した期間です。

【追加対応 4/21版v2.20以降】
APIのアクセス制限が500回/5分あたりになるので、5分あたりのアクセス回数をグラフにプロットするように対応しました。(下図)
API accessと記載のあるグラフの上にある点線が500回/5分のラインで、これを超える場合にはアクセス制限に引っかかる可能性があります

1時間に1回、発注回数、約定回数、部分約定回数、apiアクセス回数などの統計情報をdiscordへ通知できます。(下図)

1時間に1回、apiのレスポンス速度をヒストグラムにプロットしてdiscordへ通知できます。(下図)
サーバーの状態変化や遅延状態を把握することが出来ます。

【追加対応 6/25版v5.12以降】
オーダー数・約定率・成行指値約定率をグラフにプロットする機能をサポートしました。

迅速性が重要なリアルタイムmmbotモードでは発注トリガーが発生してから1~5msec程度でapiに売買指示を出すことが出来ます。(aws t2.microで速度確認)
秒スキャモードでは秒ローソクが確定後(次のローソクに含まれる約定履歴が流れてきたときが前のローソク足確定時です)から1~5msec程度で売買判断を行えます。(aws t2.microで速度確認)

CPUの使用率(aws t2.microにおける)はローソク足を生成するモードでは約3~7%(売買頻度による)、ローソク足を生成しないモードでは2~5%(売買頻度による)のCPU使用率です。頻度にもよりますが2つ程度の並行稼働はaws t2.microでも可能です。

【追加対応 4/18版v2.00以降】
板情報もwebsocketから取得するように対応しました
板情報を用いたロジックも高速に処理することが可能です。

【追加対応 4/29版v3.00以降】
Cryptowatchから取得した分足データを用いたロジックに対応しました。Cryptowatchから取得した分足データと、約定履歴から自炊した秒足データの両方を用いたロジックなども構築することが可能です。

【追加対応 5/1版v3.10以降】
現在のポジション(建玉)リストをself._get_positionsで取得できるようになりました。一定期間以上のポジションをクローズするなどのロジックを組むことが可能です。

【追加対応 5/3版v3.20以降】
時刻を設定してノートレード時間を設定することが出来るようになりました。(複数期間)
5/5版v3.30以降で曜日指定もサポートしました。

2.BFScalpingのソースコードとサンプルロジック

フレームワークの構成ファイルは8個でトータル約2000行程度です。
付属するロジックファイルは100行程度のロジックファイルが4つ付属します。(mmbotロジックのサンプルが3つ、秒スキャロジックのサンプルが1つ)

ロジックファイルとパラメータファイルを起動時に動的に読み込む方法は Duelbot のソースコードをいろいろと参考にさせていただきました。(イナトレさんありがとうございます。Duelbotのソースコードにはプログラマーの方には参考になるテクニックが詰まっててかなり勉強になりました。お勧めです

当ボットではポジション管理手法のことが話題になっておりますが、私自身もポジション管理にはかなり時間を割いて対応し、ある程度安定してポジションが管理出来ていると考えています。しかしながらサーバーからの意図しないレスポンスなどでポジションがズレることも考えられます。意図しない結果になった場合にはご容赦くださいますようお願いいたします。

以下有料パートです

この続きをみるには

この続き:30,835文字/画像3枚

ポジション自炊して高速に売買を行うBitFlyerでの高速botフレームワーク(mmbotと高速スキャルピングbotのサンプルロジック付属)

くもすけ

50,000円

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

138

くもすけ

BOT関連NOTE

AKAGAMIさんのドテン君を中心にBOT関連のNOTEをまとめてます^^
3つ のマガジンに含まれています
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。