Code Monkey home page Code Monkey logo

r2's People

Contributors

8398a7 avatar 8823-scholar avatar bitrinjani avatar connie-wild avatar n0r1kazu avatar shrynx avatar yudai524 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

r2's Issues

info.logに[Arbitrager]情報が出力されない。

下記のように何度か裁定され、ポジションが溜まるとinfo.logに[Arbitrager]情報が出力されなくなります。ご確認お願い致します。

2017-12-25 09:56:53.471 info [Arbitrager] [Bitflyer Buy 0.02, Coincheck Sell 0.02]
2017-12-25 09:56:53.471 info [Arbitrager] [Bitflyer Buy 0.02, Coincheck Sell 0.02]
2017-12-25 09:56:53.471 info [Arbitrager] [Bitflyer Buy 0.02, Coincheck Sell 0.02]
2017-12-25 09:57:07.692 info [PositionService] ---------------------POSITION---------------------
2017-12-25 09:57:07.692 info [PositionService] Net Exposure: 1.519 BTC
2017-12-25 09:57:07.707 info [PositionService] Coincheck : 0.08 BTC, LongAllowed: OK, ShortAllowed: OK
2017-12-25 09:57:07.707 info [PositionService] Bitflyer : 1.439 BTC, LongAllowed: OK, ShortAllowed: OK
2017-12-25 09:57:07.707 info [PositionService] --------------------------------------------------
2017-12-25 09:57:16.709 info [PositionService] ---------------------POSITION---------------------
2017-12-25 09:57:16.709 info [PositionService] Net Exposure: 1.519 BTC
2017-12-25 09:57:16.709 info [PositionService] Coincheck : 0.06 BTC, LongAllowed: OK, ShortAllowed: OK
2017-12-25 09:57:16.709 info [PositionService] Bitflyer : 1.459 BTC, LongAllowed: OK, ShortAllowed: OK
2017-12-25 09:57:16.709 info [PositionService] --------------------------------------------------
2017-12-25 09:57:25.741 info [PositionService] ---------------------POSITION---------------------
2017-12-25 09:57:25.741 info [PositionService] Net Exposure: 1.519 BTC
2017-12-25 09:57:25.741 info [PositionService] Coincheck : 0.04 BTC, LongAllowed: OK, ShortAllowed: OK
2017-12-25 09:57:25.741 info [PositionService] Bitflyer : 1.479 BTC, LongAllowed: OK, ShortAllowed: OK
2017-12-25 09:57:25.741 info [PositionService] --------------------------------------------------
2017-12-25 09:57:34.774 info [PositionService] ---------------------POSITION---------------------
2017-12-25 09:57:34.789 info [InvertedSpreadLimit] No arbitrage opportunity. Spread is not inverted.
2017-12-25 09:57:34.774 info [PositionService] Net Exposure: 1.519 BTC
2017-12-25 09:57:34.774 info [PositionService] Coincheck : 0.02 BTC, LongAllowed: OK, ShortAllowed: OK
2017-12-25 09:57:34.774 info [PositionService] Bitflyer : 1.499 BTC, LongAllowed: NG, ShortAllowed: OK
2017-12-25 09:57:34.774 info [PositionService] --------------------------------------------------

オープン状態のオーダーペアがリセットされません

いったんクローズし、再度サービスを開始したあともオープン状態のオーダーペアがリセットされず読み込まれるようになりました。この情報をリセットするにはどうしたらよいでしょうか?

2018-01-04 11:10:15.038 INFO サービスを開始中...
2018-01-04 11:10:16.559 INFO Arbitragerを開始中...
2018-01-04 11:10:16.559 INFO Arbitragerの開始完了。
2018-01-04 11:10:16.560 INFO サービスの開始完了。
2018-01-04 11:10:18.285 INFO ---------------------POSITION---------------------
2018-01-04 11:10:18.285 INFO Net Exposure: 0.291 BTC
2018-01-04 11:10:18.285 INFO Coincheck : 0 BTC, 買い試行許可: OK, 売り試行許可: OK
2018-01-04 11:10:18.285 INFO Bitflyer : 0.291 BTC, 買い試行許可: NG, 売り試行許可: OK
2018-01-04 11:10:18.286 INFO --------------------------------------------------
2018-01-04 11:10:18.286 INFO --------------------ARBITRAGER--------------------
2018-01-04 11:10:18.286 INFO 裁定機会をチェック中...
2018-01-04 11:10:18.290 INFO オープン状態のオーダーペア:
2018-01-04 11:10:18.290 INFO [Bitflyer Buy 0.03 BTC, Coincheck Sell 0.03 BTC]
2018-01-04 11:10:18.290 INFO [Bitflyer Buy 0.03 BTC, Coincheck Sell 0.03 BTC]
2018-01-04 11:10:18.290 INFO [Bitflyer Buy 0.03 BTC, Coincheck Sell 0.03 BTC]
2018-01-04 11:10:18.290 INFO [Bitflyer Buy 0.03 BTC, Coincheck Sell 0.03 BTC]
2018-01-04 11:10:18.290 INFO [Bitflyer Buy 0.03 BTC, Coincheck Sell 0.03 BTC]

onSingleLeg機能による約定時の収益表示について

onSingleLeg機能を追加頂いてからNet Exposureが増えることなく安定して
動作しており大変感謝しております。

ログに出力される「>>収益:」の部分をパースして収益のモニタリングをしています。
onSingleLeg機能により約定した取引は収益のログが出力されないため
もし可能であればこちらも収益を表示して頂ければ嬉しいです。

お忙しい所申し訳ございませんが、ご検討をお願い致します。

bitrinjaniのエラーについて

お世話になります。
12月より、貴殿のbitrinjaniを使用させていただいていましたが、先日、DOSプロンプトが停止しており、
再度起動したところ、以下のようなエラーが発生しました。
そこでもう一度インストールから実行したのですが、エラーが修正できませんでした。
初歩的な内容だったら申し訳ないのですが、どのように修復すればよいかご教示いただけないでしょうか。
C:\r2>"C:\Program Files\nodejs\npm" start

[email protected] prestart C:\r2
rimraf dist && tsc -p tsconfig.json && cpy src/config.json dist

src/Coincheck/mapper.ts(38,10): error TS2678: Type 'CashMarginType.MarginClose' is not comparable to type 'CashMarginType'.
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! [email protected] prestart: rimraf dist && tsc -p tsconfig.json && cpy src/config.json dist
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the [email protected] prestart script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\akira4k\AppData\Roaming\npm-cache_logs\2017-12-21T10_58_44_770Z-debug.log

C:\r2>"C:\Program Files\nodejs\npm" install
npm WARN [email protected] No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

added 115 packages in 24.128s
2017-12-21T11_02_42_490Z-debug.log

取引所エラー時のOrder check、onSingleLeg機能動作について

12/31 04:01~04:06にて下記ログの通りbitflyer側のみエラーとなり、オーダーチェックが入る前に次のPositionServiceに移る動作がありました。
この際、Coincheck側のSellは成立しており片方のみ約定となっております。
片側取引所HTTP request failedが原因での片方のみ約定の場合は、オーダーチェック、onSingleLeg機能が動作しないのは仕様でしょうか?

2017-12-31 04:06:00.992 INFO [Arbitrager] Best ask : Bitflyer Ask 1,592,700 0.272
2017-12-31 04:06:00.992 INFO [Arbitrager] Best bid : Coincheck Bid 1,610,000 1.334
2017-12-31 04:06:00.992 INFO [Arbitrager] Spread : -17300
2017-12-31 04:06:00.992 INFO [Arbitrager] Available volume : 0.271
2017-12-31 04:06:00.992 INFO [Arbitrager] Target volume : 0.02
2017-12-31 04:06:00.992 INFO [Arbitrager] Expected profit : 298 (0.93%)
2017-12-31 04:06:00.992 INFO [Arbitrager] >>Found arbitrage oppotunity.
2017-12-31 04:06:00.992 INFO [Arbitrager] >>Sending order targetting quote Bitflyer Ask 1,592,700 0.272...
2017-12-31 04:06:00.992 INFO [Arbitrager] >>Sending order targetting quote Coincheck Bid 1,610,000 1.334...
2017-12-31 04:06:01.633 ERROR [Arbitrager] HTTP request failed. Response from https://api.bitflyer.jp/v1/me/sendchildorder. Status Code: 400 (Bad Request) Content: {"status":-204,"error_message":"Market state is closed.","data":null}
2017-12-31 04:06:01.633 INFO [Arbitrager] >>Sleeping 5000 ms after send.
2017-12-31 04:06:06.649 INFO [Arbitrager] --------------------------------------------------
2017-12-31 04:06:06.946 INFO [PositionService] ---------------------POSITION---------------------

ビットコイン自動取引に関して

ブログ拝見させていただきました。
とても貴重な情報を公開していただき、ありがとうございます!
gmailに問い合わせしてしまいすいません。
改めてこちらに投稿させていただきます。

早速設定し回してみて、稼働したときはめちゃくちゃ興奮しました!!

その時に気になったんですが、
ビットフライヤーは現物取引ではなく信用取引も可能なんでしょうか。

もし、お分かりになれば教えていただければと思います!

git cloneについて

お世話になります。
プログラミングの超初心者で大変恐縮であります。
このような初期段階で質問してしまうことは大変恥ずかしく思いますが
どうすることできなくなり質問いたします。
簡単に説明しますとgit cloneしたものどこに書き込めばよいかということです。

下記に私が行った手順を記します。

まずはnode.jsをダウンロード
次にgithabに登録しプログラムをgit cloneしました。
問題は次です。gitcloneしたものをどこに書き込めばよいかわかりません。
一般的にはコンソールというものに書き込めばよいと思いますが、そのコンソールの場所がわかりません。
node.jsのコマンドプロンプトに書き込んでみましたが
gitは内部コマンドまたは外部コマンド操作可能なプログラムまたはバッチファイルとして認識されていませんとなります。

node.js自体に書き込んでみると
syntaxerror:unexpected identifierというエラーがでます。

git cloneしたものをどこに書き込めばよいかお教えください。
どうかよろしくお願いいたします。

maxLongPositionでのtarget profit / min size設定

Qiitaコメントから転載

現在、下記の口座バランスでスタートし、どちらかに買いポジが溜まりmaxLongPositionに張り付いたらsizeを0.5、minTargetProfitを0などのごく小さい値に変更し、ポジションを解消しています。(買いポジ側がmaxLongPositionに張り付いているため、買いNGとなることを利用し、0.5の売りオンリーとして約定でスタート状態に戻している)

bitFlyer:0.5BTC CASH xxx万
Coincheck:0.5BTC CASH xxx万
maxLongPosition:1

minExitTargetProfitが随時解消してくれるものと思っていますが、ポジションの偏りが激しいため解消しきれずmaxLongPositionまで張り付いてしまうため、上記の方法(まとめて解消)を取っています。
つきまして、(現在のポジション+minsize > maxLongPosition※もう買えない)となる取引所については、その状態の際だけ動く数量とターゲットプロフィットが欲しく思っています。
※上記のように手で数量0.5に変えてminTargetProfitを0にしなくとも自動で指定していた数値になる機能。

coincheckとquoine間の取引NGに関して

現在coincheckとquoine間で裁定取引を
行っているのですが、特定のbit, askに関して
Bitflyerの売りがNGになるのと同様に、
一つだけがNGとして表示されます。
これは裁定取引フローの3に該当すると
思うのですが、何故、このようなNGが表示される
のかを教えて頂きたいです。
これは特に問題のない現象なのでしょうか?

APIエラーメッセージのfatalError定義への追加について

はじめまして。
src/constants.ts の fatalErrors で定義されているエラーメッセージ (この文字列が検出されるとシステムが停止される) に関しての情報です。

これと同類かと思われるが現時点の定義に無いAPIのエラーメッセージが、実際のログ info.log に残っていました。もしこれらも定義に加えるべきものでしたら、追加を検討いただけますと幸いです。

2018-01-09 19:23:17.141 ERROR [Arbitrager] HTTP request failed. Response from https://coincheck.com/api/exchange/orders. Status Code: 400 (Bad Request) Content: {"success":false,"error":"Amount BTC の所持金額が足りません"}

2018-01-09 19:36:09.519 ERROR [Arbitrager] HTTP request failed. Response from https://api.quoine.com/orders/. Status Code: 422 (Unprocessable Entity) Content: {"errors":{"user":["not_enough_free_balance"]}}

取引所の追加は出来ますでしょうか?

はじめまして。
ビットコイン自動裁定取引システムに興味を持ちました。

現在の取引所の他にBITPOINTを追加して頂くことは可能でしょうか?
もし宜しければ、ご検討を頂けますと幸いです。

Coincheck "Nonce must be incremented"エラー

Coincheck APIにて、Nonceを正しく増加させているにも関わらず、10ms以内に複数のリクエストを送ると"Nonce must be incremented"エラーが発生する。
Coincheck側でAPI取引を制限していると思われる。

APIの結果をキャッシュしてリクエスト回数を減らす必要がある。

裁定ポジション解消されない

解決できなかったため、再度質問させてください。

回答ありがとうございました。
バージョンを最新のものに更新して再度試してみました。
しかしそれでも、出来てないと思われます。

具体的に、coincheckで10個ポジションを持っていたら、
板が反転していなくてもminExitTargetProfitの条件を満たせば、
古いポジションに対して逆方向で指値が入っていってポジション解消されると思っています。
ポジションが増えては減りの繰り返し。

minExitTargetProfit: -1で設定しているので条件の問題ではないのかと思ってご相談させていただきました。
お忙しいとは思いますが、よろしくお願いします!

以下は最初の質問になります。
bitrinjani様
お世話になっております。

23日ツールをインストールしました。
19日ポジション解消ロジック追加されていたということですが、
どうも適応されていないようなので教えていただければと思います。

運転時間:3~5分/1回(残高不足、カタガケ、他エラーが出て手動停止)
アービトラージ回数:50回以上
minExitTargetProfit: -5,
minExitTargetProfitPercentは設定の中にありませんでした。

条件
・システムストップした後、適応されない
・片側だけしか約定しなかった場合も、適応されない

1回の運転時間は短いですが、50回以上アービトラージがあれば1回でもポジション解消されてもおかしくないのではないかと思っています。
なにか考えられる原因はあるでしょうか。

ちなみに、「ポジション解消」の理解についても質問があります。

ポジション解消の意味
例)coincheck 0.01BTC買い、quione 0.01BTC売り。それぞれ約定。
minExitTargetProfit: -5の場合
5円以上の収益が見込める時にそれぞれ反対ポジションで指値注文が入る。
coincheck 0.01BTC売り、quione 0.01BTC買い注文が入る。
ここまで全自動になった。
18日までは、アービトラージが出た時に注文が入るところまでで終わっていた。

①保有している買いと売りのポジションを見て、収益が5円以上になっていれば同時に指値注文される
②保有している買いと売りのポジションそれぞれを見て、個別で収益が5円以上になっていれば同時に指値注文される

どちらでしょうか。
お忙しいとは思いますが、ぜひ利益につなげたいのでお願い致します。

ポジションクローズ時のオープンペア情報の削除について

findClosable でクローズ可能なオープンペアを発見後に LimitCheck の判定により発注を見送った場合に、クローズを見送ったオープンペアの情報が削除されます。
この場合は、自動クローズを再度試みることができるので、削除しないほうがより良いと思われます。
ログを添付(※部分)しますので、確認いただけましたら幸いです。

2018-01-03 01:27:24.321 INFO [Arbitrager] --------------------------------------------------
2018-01-03 01:27:27.318 INFO [PositionService] ---------------------POSITION---------------------
2018-01-03 01:27:27.318 INFO [PositionService] Net Exposure: 0 BTC
2018-01-03 01:27:27.319 INFO [PositionService] Coincheck : -0.4 BTC, LongAllowed: OK, ShortAllowed: NG
2018-01-03 01:27:27.321 INFO [PositionService] Quoine : 0.4 BTC, LongAllowed: NG, ShortAllowed: OK
2018-01-03 01:27:27.321 INFO [PositionService] --------------------------------------------------
2018-01-03 01:27:27.321 INFO [Arbitrager] --------------------ARBITRAGER--------------------
2018-01-03 01:27:27.321 INFO [Arbitrager] Looking for opportunity...
2018-01-03 01:27:27.323 INFO [Arbitrager] Open pairs:
2018-01-03 01:27:27.323 INFO [Arbitrager] [Quoine Buy 0.1 BTC, Coincheck Sell 0.1 BTC] ※
2018-01-03 01:27:27.323 INFO [Arbitrager] [Quoine Buy 0.1 BTC, Coincheck Sell 0.1 BTC] ※
2018-01-03 01:27:27.324 INFO [Arbitrager] [Quoine Buy 0.1 BTC, Coincheck Sell 0.1 BTC] ※
2018-01-03 01:27:27.330 INFO [MaxTargetVolumeLimit] Target volume is larger than max target volume percent. ※
2018-01-03 01:27:27.331 INFO [Arbitrager] --------------------------------------------------
2018-01-03 01:27:30.361 INFO [PositionService] ---------------------POSITION---------------------
2018-01-03 01:27:30.361 INFO [PositionService] Net Exposure: 0 BTC
2018-01-03 01:27:30.361 INFO [PositionService] Coincheck : -0.4 BTC, LongAllowed: OK, ShortAllowed: NG
2018-01-03 01:27:30.361 INFO [PositionService] Quoine : 0.4 BTC, LongAllowed: NG, ShortAllowed: OK
2018-01-03 01:27:30.361 INFO [PositionService] --------------------------------------------------
2018-01-03 01:27:30.362 INFO [Arbitrager] --------------------ARBITRAGER--------------------
2018-01-03 01:27:30.362 INFO [Arbitrager] Looking for opportunity...
2018-01-03 01:27:30.364 INFO [Arbitrager] Open pairs:
2018-01-03 01:27:30.364 INFO [Arbitrager] [Quoine Buy 0.1 BTC, Coincheck Sell 0.1 BTC] ※
2018-01-03 01:27:30.364 INFO [Arbitrager] [Quoine Buy 0.1 BTC, Coincheck Sell 0.1 BTC] ※
2018-01-03 01:27:30.376 INFO [Arbitrager] Best ask : Coincheck Ask 1,647,000 0.2
2018-01-03 01:27:30.376 INFO [Arbitrager] Best bid : Quoine Bid 1,626,400 0.184
2018-01-03 01:27:30.376 INFO [Arbitrager] Spread : 20600
2018-01-03 01:27:30.376 INFO [Arbitrager] Available volume : 0.184
2018-01-03 01:27:30.376 INFO [Arbitrager] Target volume : 0.1
2018-01-03 01:27:30.376 INFO [Arbitrager] Expected profit : -2224 (-1.359%)
2018-01-03 01:27:30.377 INFO [InvertedSpreadLimit] No arbitrage opportunity. Spread is not inverted.
2018-01-03 01:27:30.377 INFO [Arbitrager] --------------------------------------------------

期待収益、ベストクオート等のCSV書き出し機能

#55 から分岐。
期待収益、ベストクオート等のCSV書き出し機能を追加。ローカルDBに格納しヒストリカルデータを取り出せるようにする。

  • 項目
    日付時刻、 Best Ask、Best Bid、Best組み合わせ時の予想収益+収益率%、Worst Ask、Worst Bid、Worst組み合わせ時の予想収益+収益率%

カタガケの原因

ツールありがとうございます。

カタガケが2パターンで起こりまして、
1つは原因がわかったのですが
もう1つの原因がわからずいるのでアドバイスお願いします。

【画面】
2017-12-27 13:08:39.572 [info] ---------------------POSITION---------------------
2017-12-27 13:08:39.573 [info] Net Exposure: 0 BTC
2017-12-27 13:08:39.574 [info] Coincheck : -0.06 BTC, 買い試行許可: OK, 売り試行許可: OK
2017-12-27 13:08:39.576 [info] Quoine : 0.06 BTC, 買い試行許可: OK, 売り試行許可: OK
2017-12-27 13:08:39.577 [info] --------------------------------------------------
2017-12-27 13:08:39.578 [info] --------------------ARBITRAGER--------------------
2017-12-27 13:08:39.579 [info] 裁定機会をチェック中...
2017-12-27 13:08:39.580 [info] オープン状態のオーダーペア:
2017-12-27 13:08:39.581 [info] [Quoine Buy 0.01, Coincheck Sell 0.01]
2017-12-27 13:08:39.582 [info] [Quoine Buy 0.01, Coincheck Sell 0.01]
2017-12-27 13:08:39.583 [info] [Quoine Buy 0.01, Coincheck Sell 0.01]
2017-12-27 13:08:39.583 [info] [Quoine Buy 0.01, Coincheck Sell 0.01]
2017-12-27 13:08:39.584 [info] [Quoine Buy 0.01, Coincheck Sell 0.01]
2017-12-27 13:08:48.571 [info] ---------------------POSITION---------------------
2017-12-27 13:08:48.571 [info] Net Exposure: 0 BTC
2017-12-27 13:08:48.573 [info] Coincheck : -0.07 BTC, 買い試行許可: OK, 売り試行許可: OK
2017-12-27 13:08:48.575 [info] Quoine : 0.07 BTC, 買い試行許可: OK, 売り試行許可: OK
2017-12-27 13:08:48.576 [info] --------------------------------------------------
2017-12-27 13:08:57.563 [info] ---------------------POSITION---------------------
2017-12-27 13:08:57.564 [info] Net Exposure: 0 BTC
2017-12-27 13:08:57.565 [info] Coincheck : -0.08 BTC, 買い試行許可: OK, 売り試行許可: OK
2017-12-27 13:08:57.567 [info] Quoine : 0.08 BTC, 買い試行許可: OK, 売り試行許可: OK
2017-12-27 13:08:57.568 [info] --------------------------------------------------
2017-12-27 13:09:06.583 [info] ---------------------POSITION---------------------
2017-12-27 13:09:06.584 [info] Net Exposure: 0 BTC
2017-12-27 13:09:06.584 [info] Coincheck : -0.09 BTC, 買い試行許可: OK, 売り試行許可: OK
2017-12-27 13:09:06.587 [info] Quoine : 0.09 BTC, 買い試行許可: OK, 売り試行許可: OK

アービトラージとは出ずにこの状態が続きました。
結果として同時間帯、
coincheck売り8件(他に小さい数量が3件)、quione15件となり7件カタガケとなりました。

MaxNetExposureLimit につきまして

表題の件について質問させてください

ソースを確認したところポジションの Net Exposure (の絶対値)が設定の maxNetExposureを超えている場合はトレードしない実装になっています。

しかし、今回のトレードがNet Exposure の偏りを緩和する方向のトレードであればチェックはパス(success)してもよいように感じるのですがそういうものではないのでしょうか?

class MaxNetExposureLimit implements LimitChecker {
  constructor(private readonly configStore: ConfigStore, private readonly positionService: PositionService) {}
  check(): LimitCheckResult {
    const success = Math.abs(this.positionService.netExposure) <= this.configStore.config.maxNetExposure;
    if (success) {
      return { success, reason: '', message: '' };
    }
    const reason = 'Max exposure breached';
    const message = t`NetExposureIsLargerThanMaxNetExposure`;
    return { success, reason, message };
  }
}

以上、よろしくお願いいたします。

現在のコードではshortAllowedは原則trueになります

はじめまして.
技術的にすごく興味があってコードを読ませていただきました.

PositionServiceImpl.tsの94行目
pos.shortAllowed = new Decimal(allowedShortSize).gte(minSize)
がありますが
その上部のコードで
const allowedShortSize = _.max([ 0, new Decimal(brokerConfig.maxShortPosition).plus(currentBtc).toNumber() ]) as number;
`
とあり,
maxShortPositionにplusしているため,brokerConfig.maxShortPositionが負の値あるいは0且つ現在btcが0でない限りtrueになりそうです.

maxShortPositionは現在BTC残額がこの値を下回った時はそれ以上売らない,という設定値として想定してお話しますが,この場合
const allowedShortSize = _.max([ 0, new currentBtc.minus.(Decimal(brokerConfig.maxShortPosition)).toNumber() ]) as number;
`
のようなコードであるのが良い(?)のではないでしょうか.
無学なものでType Scriptは書けないため正しいコードかどうかはわかりませんが上記のようなイメージが伝わるとうれしいです.
もしも修正方向として正しく,且つ修正する時間や手間が無い場合は勉強してプルリクをさせていただくことも可能ですのでご検討の方をよろしくお願いいたします.

bitflyerのレート配信について

bittflyer のレート配信ですがアップデート後も正常でしょうか?
coincheckとquoineしかIterationされていないように思います。

僕だけでしょうか?

指定時間の特定取引所の除外設定

本来であればbitFlyer側にAPIの改善要望を出すのが正しいのですが
もし、可能であればと思いリクエストさせて頂きます。

bitFlyerは毎日、日本時間でAM4:00 - 4:10の10分間メンテのためマーケットをクローズしており、AM4:11から板寄せが行われています。
この板寄せが行われる4:11からの1分間、約定が出来ない状況となっております。
この4:11からの1分間には相場より安い価格が提示される事が多く、約定機会と判断して注文が行われております。
できれば、bitFlyerは毎朝4:00 - 4:15まで無効として運用したいのですが、指定された時間に特定の取引所を除外する設定追加をご検討頂けないでしょうか。

minTargetProfitPercentのチューニングに関して

オープンのminTargetProfitPercentの設定を1%に
設定した場合に、仮にも全平均2%(勿論分散が大きいかもしれませんが)
だとすると価格差が開く傾向にありエグジットできる
可能性が下がると思います。プラスの予想収益
のみのログ(できれば、フィールドに時刻と予想利益を
csvで書き出しできるもの)があり、それを
元に統計を取れば、チューニングの閾値を
各々決定でき裁定機会の頻度が上がるのではないかと
思っております。また、簡易的に平均、分散を出力し、
それらの情報を元にminTargetProfitPercentを自動で決める
というのもありなのかな、と思いますが
個人的には前者の方法がいいのかなと思っております。
ご検討とご意見を頂けると幸いです。

そもそもの利益確保について

初めまして。

素人で申し訳ないのですがこのr2アプリを用いてそもそも利益を確保する方法が分かっておりません・・・。(勝つ方法を質問しているわけではなく価格差が出た場合に利益を確保する方法です。)

話を簡単にするためbitflyerとcoincheckだけで裁量取引を行うとします。

1BTCの ask, bid は以下の通りとします。

bitflyer
best ask 1,010,000円
best bid 1,000,000円

coincheck
best ask 1,030,000円
best bid 1,020,000円

通常であればbitflyerで1BTCを買い、その1BTCをcoincheckへ送信し、coincheckでその1BTCを売ると1万円の利益がでるのは理解できます。(送金中の価格変動や手数料などは無視)
1,020,000円(coincheck best bid) - 1,010,000円(bitflyer best ask) = 10,000円の利益

このr2アプリを利用しポジションを持ったとします。
ポジションはそれぞれ以下の通りになったとします。(簡単にするためサイズは1BTCとします)
bitflyer 1BTCの買いポジション
coincheck 1BTCの売りポジション

ここからが分からないのですが、何をどうしたら、何がどうなったら利益になるのでしょうか・・・?
裁定ポジション解消フロー
の説明に「オープン中のポジション(買いと売りのペア)を解消できるかチェックする」とありますが、上の例でいうとそれぞれの取引所の価格がどう変動すれば解消できることになるのでしょうか?

bitrinjani さん以外でもお分かりになる方は教えていただけると幸いです。

すみませんがよろしくお願いいたします。

インストールしたところエラーが出ます。

パソコンにbitrinjaniさんのr2をインストールして動かそうと思ったら、エラーが出ました。
年末にお忙しいと思いますが、対処の仕方がわかれば教えてください。
node.jsだとgit clone (最初から)でエラーが出てしまったため、git bashでインストールしました。

git clone https://github.com/bitrinjani/r2.git
cd r2
npm install
npm start

[email protected] prestart C:\Users\user\r2
rimraf dist && tsc -p tsconfig.json && cpy src/config.json dist

'rimraf' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] prestart: rimraf dist && tsc -p tsconfig.json && cpy src/conf ig.json dist
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] prestart script.
npm ERR! This is probably not a problem with npm. There is likely additional log
ging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to in
stall?

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\user\AppData\Roaming\npm-cache_logs\2017-12-29T11_37_32_3
75Z-debug.log

coincheckのnonceの判定エラー

coincheckにおいてnonceがパスできない不具合に遭遇しています。

ERROR HTTP request failed. Response from https://coincheck.com/api/exchange/leverage/positions?limit=20&status=open&order=desc. Status Code: 401 (Unauthorized) Content: {"success":false,"error":"Nonce must be incremented"}

coincheck apiドキュメント上のrubyのサンプルコードでは、

nonce = Time.now.to_i.to_s

で生成するため、 Date.now() と同値が得られるはずですが、
自分がrubyで検証した限りでも、unixtimeがミリ秒では Nonce must be incremented が返ってきます。
ワークアラウンドとしては、 (Time.now.to_f * 1_000_000).to_i.to_s とすることで回避しておりました。
=> Time.now.to_fの小数点が全て整数になるまで切り上げてto_iする
暫定でutil.tsのnonceで (Date.now() * 1000000).toString() を返却するようにしたところ、正常にAPIを通過できるようになりました。

このあたりは過去の修正で prevを使う形で修正されているようですが、少し意図がわかりかねる箇所があったため、一旦こちらの手元で動く状態にしてPRを送るようにさせていただきたいと思っています。

AmazonLinuxでバックグラウンドにて実行していると3時間ほどでプロセスが停止してしまう

AmazonLinuxでnohup node startしてバックグラウンドで実行しているのですが、
大体3時間ほど経過するとプロセスがダウンしてしまいます。
(Slackに標準出力を全て送信しているのですが、途切れてしまいます)

config.jsonやnode自体の設定などで対応可能でしょうか?
すいませんがご回答お願いいたします。

片方が約定しなかった場合のヘッジ機能

bitrinjani さん
こんにちは

表題の機能について、
一部約定の場合に Net Exposure が発生します。
filledSize を考慮した数量で注文を送信するなど対応が可能でしょうか?
ログを添付しますので、確認いただけましたら幸いです。
info.log

取引所毎のminSize, maxSize設定機能の追加

仮にminSizeをcoincheck 0.005BTC、Quoine 0.01BTCとした場合

  • bitflyer ⇔ coincheck =最低取引 0.005BTC
  • bitflyer,coincheck ⇔ Quoine =最低取引 0.01BTC

疑問: maxSizeの動作はどうなるべきか?

例:
Bitflyer: minSize=0.001, maxSize=0.001
Coincheck: minSize=0.005, maxSize=0.005
Quoine: minSize=0.01, maxSize=0.01

=> 各取引所のminSize, maxSizeの範囲に重なる部分がないため、一切取引が発生しない。

例:
Bitflyer: minSize=0.001, maxSize=0.005
Coincheck: minSize=0.005, maxSize=0.005
Quoine: minSize=0.01, maxSize=0.01

=> BitflyerとCoincheckの間で、0.005の取引のみ発生しうる。

例:
Bitflyer: minSize=0.001, maxSize=0.01
Coincheck: minSize=0.005, maxSize=0.01
Quoine: minSize=0.01, maxSize=0.01

=> 裁定可能数量が0.01以上のとき、どの取引所間でも0.01の取引が発生する。(できるだけ大きいサイズで取引しようとする現在の実装のため)
Bitflyer, Coincheck間で裁定可能数量が0.005以上0.01未満のとき、その数量で取引が発生する。ほとんどのとき裁定可能数量が0.01以上となる現状を考えると、非常にレアケース。

裁定ポジション解消されない

bitrinjani様
お世話になっております。

23日ツールをインストールしました。
19日ポジション解消ロジック追加されていたということですが、
どうも適応されていないようなので教えていただければと思います。

運転時間:3~5分/1回(残高不足、カタガケ、他エラーが出て手動停止)
アービトラージ回数:50回以上
minExitTargetProfit: -5,
minExitTargetProfitPercentは設定の中にありませんでした。

条件
・システムストップした後、適応されない
・片側だけしか約定しなかった場合も、適応されない

1回の運転時間は短いですが、50回以上アービトラージがあれば1回でもポジション解消されてもおかしくないのではないかと思っています。
なにか考えられる原因はあるでしょうか。

ちなみに、「ポジション解消」の理解についても質問があります。

ポジション解消の意味
例)coincheck 0.01BTC買い、quione 0.01BTC売り。それぞれ約定。
minExitTargetProfit: -5の場合
5円以上の収益が見込める時にそれぞれ反対ポジションで指値注文が入る。
coincheck 0.01BTC売り、quione 0.01BTC買い注文が入る。
ここまで全自動になった。
18日までは、アービトラージが出た時に注文が入るところまでで終わっていた。

①保有している買いと売りのポジションを見て、収益が5円以上になっていれば同時に指値注文される
②保有している買いと売りのポジションそれぞれを見て、個別で収益が5円以上になっていれば同時に指値注文される

どちらでしょうか。
お忙しいとは思いますが、ぜひ利益につなげたいのでお願い致します。

(質問)QuoineのAPI設定について

QuoineのAPI設定方法について教えてください。
config.jsonにて
"key": "6ケタのトークンID(数字)",
"secret": "発行されるランダムな英数字",
の設定でよいかと思っていますが、正しいでしょうか。

Quoine側のAPI設定で取引口座以外の権限を全て与えているのですが
[error] HTTP request failed. Response from https://api.quoine.com/trading_accounts. Status Code: 401 (Unauthorized) Content: This token does not allow GET trading_accounts
と表示され、認証が通りません。

QuoineのAPI発行は下記の手順で実施しています。
https://quoinexjp.zendesk.com/hc/ja/articles/115009426308

Quoineのサポートにも問い合わせているのですが、3日間反応が無く。。。
よろしくお願いいたします。

Target Profit の計算方法につきまして

@bitrinjani

現在ソースリーディングを行っており下記の行のtargetProfitの計算について一点気になったため質問させてください.
https://github.com/bitrinjani/r2/blob/master/src/SpreadAnalyzer.ts#L80

const targetProfit = _.round(invertedSpread * targetVolume - commission);

invertedSpreadは負の値の場合に利益となるため commission は減算ではなく以下のように加算すべきではないでしょうか?

const targetProfit = _.round(invertedSpread * targetVolume + commission);

以下は別件なのですがもし可能であればご教授いただけないでしょうか。

const targetProfit = _.round(invertedSpread * targetVolume - commission);
const midNotional = _.mean([bestAsk.price, bestBid.price]) * targetVolume;
const profitPercentAgainstNotional = _.round(targetProfit / midNotional * 100, LOT_MIN_DECIMAL_PLACE);

金融にそこまで詳しくなく分からないのですがここでいうNotionalとはどういった意味、ものなのでしょうか?
辞書で調べたところ想定元本などが出てくるのですが上記の計算では元本とは全く関係なく分からず困っております。すみませんがよろしくお願いいたします。

以上、よろしくお願いいたします。

Stopped Arbitragerについて

お世話になります。

現在、こちらのbitrinjaniを使用させていただいており、先ほど新しいプログラムに交換したのですが、
以下の通り、システムが停止してしまうようです。
以前はエラーになってもそのまま稼働していたのですが、停止するようになったのでしょうか。
また、このエラーの内容はどのようなことでしょうか。
現在、BitFlyerはレバレッジ1倍で、10万円ほど日本円が入っています。

ERROR HTTP request failed. Response from https://api.bitflyer.jp/v1/me/sendchildorder. Status Code: 400 (Bad Request) Content: {"status":-200,"error_message":"Insufficient funds","data":null}
INFO --------------------------------------------------
INFO Stopping Arbitrager...
INFO Stopped Arbitrager.

お忙しいところ大変申し訳ありませんが、お手すきの時にご連絡いただければ幸いです。

bitflyer約定しません

複数回発注しましたが,Quoinexが約定しましたが,Bitflyer側が全然約定してくれないね。
c#のバージョン使いましたが....(下記,id関係情報をxxxxにした)
2017/12/31 04:11:13.977 Debug [Rinjani.RestUtil.CheckError] Response from /v1/me/getchildorders?child_order_acceptance_id=xxxxxxxxxxxxxxx
Status Code: OK, Content:[{"id":0,"child_order_id":"xxxxxxxxxxx","product_code":"BTC_JPY","side":"BUY","child_order_type":"LIMIT","price":1520800.0,"average_price":0.0,"size":0.01,"child_order_state":"ACTIVE","expire_date":"2018-01-29T19:11:02","child_order_date":"2017-12-30T19:11:03","child_order_acceptance_id":"xxxxxxxxxxxxxx","outstanding_size":0.01,"cancel_size":0.0,"executed_size":0.0,"total_commission":0.000015}], ErrorMessage:
2017/12/31 04:11:17.110 Warn [Rinjani.Arbitrager.CheckOrderState] 最大試行回数(MaxRetryCount設定)に達しました。オーダーをキャンセルします。
2017/12/31 04:11:17.110 Debug [Rinjani.BrokerAdapterRouter.Cancel] {

maxNetExposureにつきまして

maxNetExposureについて質問させてください。

Qiitaの説明

maxNetExposure : 最大ネットエクスポージャー*。取引所の合計ネットエクスポージャーの絶対値がこの値を超える場合、取引を行わない。

*ここでのネットエクスポージャーとは、各取引所のポジションを合計した"BTC数量"です。一般にはエクスポージャーには数量ではなく割合を指しますが、簡略化のため数量としています。例えば、Bitflyerで0.1 BTC, Quoineで0.1 BTC, Coincheckでマイナス0.1 BTC(空売り)のとき、ネットエクスポージャーは 0.1 + 0.1 - 0.1 = 0.1 BTCとなります。仮にMaxNetExposure=0.05と設定されていた場合、0.1 > 0.05のためシステムは停止します。

Net Exposure とは要は「買い、売りの偏りを表している」という認識の上で話を進めさせていただきます。
(もしこの認識が違う場合はご指摘願います。)

maxNetExposureはその偏り以上の偏りが発生しないよう抑制するための設定だと考えていますが、それは新規の裁定取引を行わないようにするためのものでありExitは機会があれば行われるという認識でよろしかったでしょうか。
説明に「システムは停止します」とあるのでExitすらしてもらえなくなるのではと気になりまして。

以上、よろしくお願いいたします。

[提案] brokerのplugin化に関して

問題

現在、サポートされているbrokerが本体にパッケージングされていて、たとえば「zaifをサポートするか」という判断に、r2本体の制限を受けてしまう。
(bitrinjaniさんがサポートしない、と決めた取引所は永遠にサポートされない)

plugin化して、npmでインストール可能な形にできれば、取引所増加の対応が捗ると思うのですが、いかがでしょうか?

イメージ

$ yarn add r2-broker-zaif
$ vi src/config.json
{
  "brokers": [
    ...,
    {
      "broker": "Zaif",
      "enabled": true,
      "key": "xxxxxxxxxx",
      "secret": "xxxxxxxxxx",
      "maxLongPosition": 0.15,
      "maxShortPosition": 0.15,
      "cashMarginType": "NetOut",
      "leverageLevel": 10,
      "commissionPercent": 0
    }
  ]
}

# AppRootあたりで、brokerを登録する?
# あるいは、config.jsonからロード可能?
$ vi src/index.ts
const app = new AppRoot();
app.registerBroker(new BitflyerBroker());
app.registerBroker(new CoincheckBroker());
app.registerBroker(new QuoineBroker());
app.registerBroker(new ZaifBroker());

bitflyerでの手数料分不足による"Insufficient funds"エラー

はじめまして。

bitflyerでBTC売り注文されるとき、残高が 注文量+手数料 未満である場合に、 Insufficient funds が発生して注文できない現象を観測しました。

bitflyerの裁定チェック時には 残高が想定注文量+手数料 未満の場合は売り買い試行許可をNGとする等としたほうがよいかもしれませんがいかがでしょうか。

ご参考までに。

スプレッド縮小時のポジションクローズ機能の追加

スプレッド縮小時のポジションクローズ機能

  • スプレッド縮小時のクローズ注文
  • クローズ方向の注文に対する許容可能コストの設定
  • スプレッドが指定数以下であれば最後に約定したポジションを成行で注文?

部分約定時のonSingleLegの動作

bitrinjani さん
こんにちは

#26 の対応ありがとうございました。
早速対応版を稼動させていますが、
約定しなかった場合に Net Exposure が発生する場合がありました。
恐縮ですが、ログを添付しますので確認いただけましたら幸いです。
info.log

quionexの残高がないと表示されます。

quionexのウォレットに資金を入れ、有効証拠金には0.06BTCと表示されています。
ただ、運用すると残高なしと表示され、取引もできませんでした。
(npm run -s getBalanceを実行すると、quionexだけ0と表示されます)
他の方でもこのような現象が起きている方はいましたか。

maxSizeより大きな物量でオーダーされてしまう

maxsizeを0.01にしていますが、0.01以上の約定が行われてしまいました。
裁定取引の目標数量で最小がmaxsizeならそれ以上は約定しないと読みましたが
設定に間違いがありますでしょうか

2018-01-11 17:50:25.093 INFO [PositionService] ---------------------POSITION---------------------
2018-01-11 17:50:25.094 INFO [PositionService] Net Exposure: 0.031 BTC
2018-01-11 17:50:25.098 INFO [PositionService] Coincheck : 0.031 BTC, 買い試行許可: OK, 売り試行許可: OK
2018-01-11 17:50:25.100 INFO [PositionService] Bitflyer  :     0 BTC, 買い試行許可: OK, 売り試行許可: OK
2018-01-11 17:50:25.100 INFO [PositionService] --------------------------------------------------
2018-01-11 17:50:25.101 INFO [Arbitrager] --------------------ARBITRAGER--------------------
2018-01-11 17:50:25.103 INFO [Arbitrager] 裁定機会をチェック中...
2018-01-11 17:50:25.169 INFO [Arbitrager] ベストアスク           : Coincheck  Ask 1,750,100 0.1
2018-01-11 17:50:25.170 INFO [Arbitrager] ベストビッド           : Bitflyer   Bid 1,760,400 1.421
2018-01-11 17:50:25.171 INFO [Arbitrager] スプレッド            : -10300
2018-01-11 17:50:25.171 INFO [Arbitrager] 裁定可能数量           : 0.1
2018-01-11 17:50:25.172 INFO [Arbitrager] 目標数量             : 0.01
2018-01-11 17:50:25.172 INFO [Arbitrager] 予想収益             : 77 (0.439%)
2018-01-11 17:50:25.192 INFO [Arbitrager] >>裁定機会を発見。
2018-01-11 17:50:25.194 INFO [Arbitrager] >>オーダーを送信中... 目標価格 Coincheck  Ask 1,750,100 0.1
2018-01-11 17:50:25.213 INFO [Arbitrager] >>オーダーを送信中... 目標価格 Bitflyer   Bid 1,760,400 1.421

 "language": "ja",
  "demoMode": false,
  "priceMergeSize": 100,
  "maxSize": 0.01,
  "minSize": 0.005,
  "minTargetProfitPercent": 0.1,
  "maxTargetProfitPercent": 30,
  "exitNetProfitRatio": 20,
  "maxTargetVolumePercent": 50.0,
  "iterationInterval": 3000,
  "positionRefreshInterval": 5000,
  "sleepAfterSend": 5000,
  "maxNetExposure": 0.5,
  "maxRetryCount": 10,
  "orderStatusCheckInterval": 3000,
  "onSingleLeg": {
    "action": "Reverse",
    "actionOnExit": "Proceed",
    "options": {
      "limitMovePercent": 5,
      "ttl": 3000
    }
  },
  "brokers": [
    {
      "broker": "Coincheck",
      "enabled": true,
      "key": "*******",
      "secret": "******",
      "maxLongPosition": 0.5,
      "maxShortPosition": 0.5,
      "cashMarginType": "Cash",
      "commissionPercent": 0
    },
    {
      "broker": "Bitflyer",
      "enabled": true,
      "key": "*****",
      "secret": "******",
      "maxLongPosition": 0.5,
      "maxShortPosition": 0.5,
      "cashMarginType": "Cash",

Failed to get a spread analysis result.

2017-12-25 10:21:27.085 DEBUG [WebClient] Response content from https://api.quoine.com/trading_accounts: [{"id":412243,"leverage_level":10,"m$
2017-12-25 10:21:27.089 DEBUG [PositionService] Finished refresh.
2017-12-25 10:21:27.089 DEBUG [PositionService] Started PositionService.
2017-12-25 10:21:27.094 INFO [Arbitrager] Starting Arbitrager...
2017-12-25 10:21:27.095 INFO [Arbitrager] Started Arbitrager.
2017-12-25 10:21:27.096 INFO [AppRoot] Successfully started the service.
2017-12-25 10:21:29.692 DEBUG [QuoteAggregator] Aggregating quotes...
2017-12-25 10:21:29.693 DEBUG [WebClient] Sending HTTP request... URL: https://api.bitflyer.jp/v1/board Request: {"timeout":5000}
2017-12-25 10:21:29.695 DEBUG [WebClient] Sending HTTP request... URL: https://api.quoine.com/products/5/price_levels Request: {"timeout":50$
2017-12-25 10:21:29.744 DEBUG [WebClient] Response from https://api.quoine.com/products/5/price_levels. Status Code: 200 (OK)
2017-12-25 10:21:29.753 DEBUG [WebClient] Response from https://api.bitflyer.jp/v1/board. Status Code: 200 (OK)
2017-12-25 10:21:29.814 DEBUG [QuoteAggregator] New quotes have been set.
2017-12-25 10:21:29.815 DEBUG [QuoteAggregator] Calling onQuoteUpdated...
2017-12-25 10:21:29.816 INFO [PositionService] ---------------------POSITION---------------------
2017-12-25 10:21:29.818 INFO [PositionService] Net Exposure: -1.101 BTC
2017-12-25 10:21:29.820 INFO [PositionService] Bitflyer : 0.001 BTC, LongAllowed: OK, ShortAllowed: NG
2017-12-25 10:21:29.822 INFO [PositionService] Quoine : -1.102 BTC, LongAllowed: OK, ShortAllowed: NG
2017-12-25 10:21:29.823 INFO [PositionService] --------------------------------------------------
2017-12-25 10:21:29.824 DEBUG [PositionService] {"Bitflyer":{"broker":"Bitflyer","btc":0.00089896,"allowedLongSize":1.09910104,"allowedShort$
2017-12-25 10:21:29.824 INFO [Arbitrager] --------------------ARBITRAGER--------------------
2017-12-25 10:21:29.826 INFO [Arbitrager] Looking for opportunity...
2017-12-25 10:21:29.835 WARN [Arbitrager] Failed to get a spread analysis result. Check maxLongPosition and maxShortPosition in the broker c$
2017-12-25 10:21:29.836 DEBUG [Arbitrager] Error: No best bid was found.
at SpreadAnalyzerImpl. (/home/username/bitrinjani/r2/dist/SpreadAnalyzerImpl.js:67:23)
at Generator.next ()
at /home/username/bitrinjani/r2/dist/SpreadAnalyzerImpl.js:19:71
at new Promise ()
at __awaiter (/home/username/bitrinjani/r2/dist/SpreadAnalyzerImpl.js:15:12)
at SpreadAnalyzerImpl.analyze (/home/username/bitrinjani/r2/dist/SpreadAnalyzerImpl.js:38:16)
at ArbitragerImpl. (/home/username/bitrinjani/r2/dist/ArbitragerImpl.js:83:70)
at Generator.next ()
at fulfilled (/home/username/bitrinjani/r2/dist/ArbitragerImpl.js:16:58)
at

クローズ時のeffectiveMinExitTargetProfitをオープン時のProfitから算出

最近の相場では、bitFlyer、CoincheckとQuoineのスプレッドは開いたままの状態となっています。
例えば、
"minTargetProfit": 20,
"minExitTargetProfit": -10,
とした場合、オープンはしますが、クローズの機会が殆ど現れないのが現状です。
設定を手動で変更して "minExitTargetProfit":-200等にすればクローズできるかと思いますが、相場を見ながらの調整が必要なため、できればオープン時のProfitからeffectiveMinExitTargetProfitを算出できればと思いました。

DBにオーダ情報を格納した後に
https://github.com/bitrinjani/r2/blob/master/src/ArbitragerImpl.ts#L159
Profitを表示していますので
https://github.com/bitrinjani/r2/blob/master/src/ArbitragerImpl.ts#L162
このProfitを先程格納したキーに付加できれば
https://github.com/bitrinjani/r2/blob/master/src/ArbitragerImpl.ts#L209
での判定でProfitの8割以下であればクローズなどの判定が出来るかと思っています。
例)
Profit:200
最低確保したい利益:20%
Profit:200 * (0.2-1) = -160
-160以上利益を確保できるのではあればクローズ

自分でプルリクをお送りするのが良いかと思うのですが、DB周りのコードが理解できなく投稿させて頂きました。
検討頂けるとうれしいです。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.