ChannelBreakoutBot
Channel Breakout Bot for bitflyer-FX
Install / Use
/learn @Connie-Wild/ChannelBreakoutBotREADME
Channel Breakout Bot for bitflyer-FX
Special Thanks for Snufkin https://sshuhei.com/
README更新日 2019/1/26
インストール方法
※Anacondaによる環境構築は非推奨です。
1-1) 環境構築スクリプト を実行(for ubuntu16.04)
1-2) python3.6 をインストール(for Windows10)
2) ターミナルからgitリポジトリをクローン
git clone https://github.com/Connie-Wild/ChannelBreakoutBot.git
- フォルダに移動し、必要なパッケージをインストール
cd ChannelBreakoutBot
pip install -U -r requirements.txt
- configフォルダ内の
config_default.jsonをconfig.jsonにリネーム - configフォルダ内の
optimizeList_default.jsonをoptimizeList.jsonにリネーム - インストールフォルダ内の
blacklist_default.csvをblacklist.csvにリネーム key、secretフィールドを、取引所から取得したAPIキー、シークレットに置き換える。- コンソールから起動
python trade.py
bitflyerAPIの権限設定
下記の通り、許可を与えて下さい。

最新版へのアップデート方法
インストールフォルダでコンソールから以下を実行。
git pull
pip install -U -r requirements.txt
設定
設定はconfig.jsonファイルで行います。
全体設定
|Name|Values|Description|
|----|------|-----------|
|product_code|FX_BTC_JPY|取引銘柄の指定。bitflyer-FXのみ対応。|
|key|string|取引所APIのキー|
|secret|string|取引所APIのシークレット|
|line_notify_token|string|LINE Notifyによる通知を行う場合に、トークンを設定。|
|healthCheck|true/false|取引所のステータスがNORMALとBUSYとVERY BUSY以外の場合、オープンオーダを行わない。(損切りが出来るようにクローズオーダは行う)|
|lotSize|number|注文するBTCの数量を指定する。APIからの最小発注単位が0.01BTCになりました(2018/4/25)。wait機能で1/10のロットになるため、最低値かつ推奨値は0.1。<br>[※注意※]この数値を大きくすればする程、損失と利益の幅が大きくなるため全財産溶かす事になる可能性も上がります。|
|entryTerm|number|entryTerm期間高値/安値を更新したらオープンシグナル点灯|
|closeTerm|number|closeTerm期間、オープン方向と逆に高値/安値を更新したらクローズシグナル点灯|
|rangePercent|number/null|[option]下記参照|
|rangePercentTerm|number/null|[option]rangePercentTerm期間の値幅の平均値を求め、rangePercentを掛けた値をentryTerm/closeTerm期間の高値/安値から加算/減算する。|
|rangeTerm|number/null|[option]下記参照|
|rangeTh|number/null|[option]レンジ相場でのエントリーを減らすために、rangeTerm期間の値幅(rangeTh)または価格の標準偏差の変動でレンジ相場の判定を行う。|
|waitTerm|number|下記参照|
|waitTh|number|rangeTh円以上の値幅を取った場合,次のwaitTermトレードはロットを1/10に落とす。(大きいトレンドのあとの大きなリバや戻りで損をしやすいため)|
|candleTerm|string|ロウソクの期間を指定。1T(1分足)、5T(5分足)、1H(1時間足)。分はT、時はHで示す。|
|cost|number|バックテストおよび、optimizationで利用。遅延等で1トレード毎にcost円分のコストが発生するものとして評価を行う。|
|fileName|string/null|バックテストおよび、optimizationで使用するOHLCデータのファイル名を指定する。デフォルトはchart.csv。指定が無い場合は都度取得する。|
|showFigure|true/false|バックテスト実行時にグラフを表示するか選択。コマンドラインのみの環境ではfalseにして下さい。|
|sendFigure|true/false|バックテスト結果のグラフをLINE Notifyで通知する。showFigureがfalseの場合のみ有効。|
|showTradeDetail|true/false|バックテストの結果として、トレード履歴の詳細を表示する。|
|core|number/null|optimizationで使用するCPUコア数を指定。nullの場合、全てのコアを利用する。1の場合、パラメータ毎の詳細実行結果を表示するが、2以上またはnullの場合は、パラメータ毎の実行結果は簡易表示となる。(全てのコアを利用するとCPU使用率が100%に張り付くため、全体コア数-1の値を設定する事をオススメする。)|
|hyperopt|number|機械学習によるoptimizationにて試行するテスト数を指定する。|
|mlMode|string|機械学習で最適値を求める項目を選択する。<br>PL:利益 PF:利益率 DD:ドローダウン <br>WIN:勝率 PFDD:利益率/ドローダウン <br>EV:期待値[勝率 * 平均利益 - (1-勝率) * 平均損失]|
|useBlackList|true/false|optimization時にブラックリストを使用する。<br>マイナス収益のパラメータをブラックリストに登録し、次回以降該当パラメータはスキップする。|
|keepPosition|true/false|trueの場合、前回終了時のポジションを引き継ぐ|
|sfdLimit|true/false|現物とFXの乖離率が4.9%を超える場合、超える方向へのエントリーを制限する。|
バックテスト
別途取得したOHLCデータfileNameを元にバックテストを行う。
fileNameの指定が無い場合はcryptowat.chから都度取得する。
python backtest.py
optimization
別途取得したOHLCデータfileNameを元に最適な設定値の探索を試みる。
fileNameの指定が無い場合はcryptowat.chから都度取得する。(都度取得すると時間がかかる上に同じOHLCデータでの比較が出来ないのでfileNameの指定をする事をオススメします。)
自動設定はされないため、探索した値を利用したい場合はconfig.jsonに設定する必要あり。
パターンデータにはoptimizeList.jsonを利用する。
python optimization.py
機械学習によるoptimization
hyperoptを用いてTree-structured Parzen Estimator Approach(TPE)ロジックによる最適値の算出を試みる。
パターンデータにはoptimizeList.jsonを利用する。
python machineLearning.py
optimization用のパターンデータの用意
設定はoptimizeList.jsonファイルで行います。
パターンデータ
|Name|Values|Description|
|----|------|-----------|
|linePattern|string|FIX:entryAndCloseTermのパターンを使用。<br>COMB:2からtermUpperまでの正数の組み合わせを自動生成し、[entryTerm,closeTerm]のパターンとして使用。|
|termUpper|number|2以上で指定。|
|entryAndCloseTerm|number|[entryTerm,closeTerm]で指定。|
|rangeThAndrangeTerm|number/null|[rangeTh,rangeTerm]で指定。|
|waitTermAndwaitTh|number|[waitTerm,waitTh]で指定。|
|rangePercentList|number/null|[rangePercent,rangePercentTerm]で指定。|
|candleTerm|number|[candleTerm]で指定。|
optimization用のOHLCデータの取得
コマンドライン引数に取得したい日付と取得時間足を指定する事が出来る。
時間足:1分足 = 60 , 1時間足 = 3600
日付:yyyy-mm-dd
例)5分足を最新から6000件取得する。
ohlc_get.py 300
例)2018-04-05の5分足を取得する。
ohlc_get.py 300 2018-04-05
引数を指定しない場合、1分足データを6000件取得する。
python ohlc_get.py > chart.csv
FAQ
Q.どんな設定値を使えば利益を出せますか?
A. バックテスト等を利用し、ご自身で探して下さい。
