Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bitFlyerの手数料取扱について #98

Open
Connie-Wild opened this issue Feb 1, 2018 · 6 comments
Open

bitFlyerの手数料取扱について #98

Connie-Wild opened this issue Feb 1, 2018 · 6 comments

Comments

@Connie-Wild
Copy link
Contributor

Connie-Wild commented Feb 1, 2018

bitFlyerの仕様として、手数料はBTCから徴収される事になっています。
その為、以下の通り注文するとInsufficient fundsが発生してしまいます。

1.0.1BTC オープンオーダ
2.手数料(0.15%)が差し引かれた0.09985BTCが所持BTCとなる。
3.0.1BTC クローズオーダ
4.0.1BTCに満たないためInsufficient fundsが発生

回避策として、bitFlyerのみオープン時にオープン時とクローズ時の手数料を含んだ量を注文する事を考えました。
1.0.1BTC オープンオーダ ⇒ 手数料(0.15%)×2を含んだ注文を実施
 ◆注文量式
 0.1×100/(100-0.15×2)=0.1003009027081244
 小数点第5位(bitFlyerの最小注文単位)で切り上げ
 ⇒0.1004BTCを買い注文
2.手数料(0.15%)が差し引かれた0.1002494BTCが所持BTCとなる。
3.0.1BTC クローズオーダ⇒0.1BTCを売り注文
4.手数料(0.15%)が差し引かれ、0.1BTCが売却され、0.0000994BTC=994Satoshiが口座に残る。

これを繰り返すと端数(994Satoshi)が積み重なってくるので、オープンオーダ時に
口座にあるBTC-(オープン済みBTC量×手数料(0.15%))=A
Aの数量が「手数料(0.15%)×2を含んだ注文を実施」で算出した
追加分のBTC量を上回っている場合は、手数料分を追加せずそのまま0.1BTCを注文。
とすれば、端数が溜まった時点で手数料として消費できるかと思います。

多分理論的に計算は合ってると思うのですが、どんなもんでしょうか。
※2/2 10:00に切り上げの小数点の認識が間違っていたので修正しました。

@bitrinjani
Copy link
Owner

#9 の件ですね。具体的な提案ありがとうございます。オープンが売りの場合も含め、テストしてみます。

@Connie-Wild
Copy link
Contributor Author

Connie-Wild commented Feb 2, 2018

ありがとうございます。
確かに #9 の件と同じですね。
売り買い試行許可をNGとするの部分で思考が止まってました。お恥ずかしい。

@date-ish-mac
Copy link

初めて書き込みさせて頂きます。
VBAベースでテストしていますが、単純ですが下記で手数料問題を回避しています。
・オープン時
 BF買の場合:発注量=OrderBTCAmount * (1 + BFOrderFee)
 BF売の場合:発注量=OrderBTCAmount * (1 - BFOrderFee)
・クローズ時
 BF買の場合:発注量=OrderBTCAmount * (1 - BFOrderFee)
 BF売の場合:発注量=OrderBTCAmount * (1 + BFOrderFee)
詳細は不明ですが、Bitflyerの取引履歴で見ると小数点以下7桁までの発注量が受理
されているようで、あまり誤差が発生しません。

@usametisia
Copy link

初めまして。

既に解決済みかもしれませんが、
自己で開発しているプログラムで同じ考察を行いましたので一応書き込みをさせて頂きます。

まず実際は無視出来る誤差になるかとは存じますが、
手数料は×2ではなく、^2(二乗)が正しいです。

数量は以下になるかと。

買いオープン  数量 * 手数料^2
売りクローズ  数量

売りオープン 数量 * 手数料
買いクローズ  数量 * 手数料

※売りスタート時は[数量 * 手数料^2]の数量が必要になります。

手数料の取り扱いはブローカーに寄って様々で紛らわしいですよね。

@bitrinjani
Copy link
Owner

買い・売り後にぴったりゼロにするには、×2でもなく^2でもなく、×(1+c)/(1-c)になると思います。
ここでcは手数料割合(0.0015など)です。
例えば、目標数量0.1, 手数料0.0015とすると、取引は以下となります。

買い: 0.1 * (1+0.0015)/(1-0.0015) = 0.100300450676
買い手数料: 0.1 * (1+0.0015)/(1-0.0015) * 0.0015 = 0.000150450676
買い後のポジション: 0.100300450676 - 0.000150450676 = 0.10015
売り: 0.1
売り手数料: 0.1 * 0.0015 = 0.0015
売り後のポジション: 0.10015 - 0.1 - 0.0015 = 0

どの計算方法でも誤差の範囲なので、実用上はx2で十分かと思います。

なお、この修正はアプリケーションの構造上若干難しい問題があるため現在手をつけていません。bitFlyerで細かい数量を保持しておけば起きないエラーのため、優先度低としています。

@usametisia
Copy link

ご教示ありがとうございます、確かにご指摘の通りですね。
勉強になりました。

どの計算方法でも誤差の範囲なので、実用上はx2で十分かと思います。
付け加えさせて頂くと、実運用していると手数料%は減っていくのでより小さくなりますね。

オープンソースでの開発大変かとは思いますが応援しています、頑張ってください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants