r2 icon indicating copy to clipboard operation
r2 copied to clipboard

クローズがされない件について

Open marumarusan opened this issue 8 years ago • 12 comments

かなりの初心者なのですが、ご質問させてください。 qiitaとissuesは読んだのですが、理解が浅はかなのかうまくクローズされません。

現状だと

2018-01-19 01:19:43.615 INFO Open pairs:
2018-01-19 01:19:43.615 INFO [Bitflyer Buy 0.008 BTC, Coincheck Sell 0.008 BTC, Entry PL: 71 JPY]
2018-01-19 01:19:43.615 INFO [Bitflyer Buy 0.008 BTC, Coincheck Sell 0.008 BTC, Entry PL: 61 JPY]
2018-01-19 01:19:43.616 INFO [Bitflyer Buy 0.008 BTC, Coincheck Sell 0.008 BTC, Entry PL: 64 JPY]
2018-01-19 01:19:43.616 INFO [Bitflyer Buy 0.008 BTC, Coincheck Sell 0.008 BTC, Entry PL: 61 JPY]

このように溜まり、取引ができなくなります。

exitNetProfitRatio を使えば指定した%だけスプレッドが縮小したタイミングでクローズが走る認識でして、つまり0を指定すれば即クローズなのかと思っておりましたが、クローズされません。

念の為現在のConfigを貼ります。 浅はかな質問だと思いますが、何卒ご教授の程よろしくお願いします

{
  "language": "en",
  "demoMode": false,
  "priceMergeSize": 100,
  "maxSize": 0.008,
  "minSize": 0.008,
  "minTargetProfitPercent": 0.5,
  "exitNetProfitRatio": 20,
  "maxTargetVolumePercent": 50.0,
  "iterationInterval": 3000,
  "positionRefreshInterval": 5000,
  "sleepAfterSend": 1000,
  "maxNetExposure": 1,
  "maxRetryCount": 10,
  "orderStatusCheckInterval": 3000,
  "onSingleLeg": {
    "action": "Reverse",
    "actionOnExit": "Proceed",
    "options": {
      "limitMovePercent": 5,
      "ttl": 3000
    }
  },
  "brokers": [
    {
      "broker": "Coincheck",
      "enabled": true,
      "key": "hogehoge",
      "secret": "hogehoge",
      "maxLongPosition": 0.06,
      "maxShortPosition": 0,
      "cashMarginType": "Cash",
      "commissionPercent": 0.05
    },
    {
      "broker": "Bitflyer",
      "enabled": true,
      "key": "hogehoge",
      "secret": "hogehoge=",
      "maxLongPosition": 0.06,
      "maxShortPosition": 0,
      "cashMarginType": "Cash",
      "commissionPercent": 0.15
    },

marumarusan avatar Jan 18 '18 16:01 marumarusan

下記の例で解説します。

手数料を考えない場合の利益/コスト(A) (A) - 手数料 = 手数料を引いた分の利益/コスト

オープン時(利益が正の数場合) (A) : 350 手数料 : 20 ⇒330(手元に入る利益)

クローズ時(利益が負の数場合) (A) : -350 手数料 : 20 ⇒-370 (クローズに必要なコスト)

ポジションを取った時点で手数料分「40円」の負けが確定しているので、各取引所間の価格差(スプレッド)が縮小しない限り、exitNetProfitRatioを0に指定したとしてもクローズできません。

Connie-Wild avatar Jan 18 '18 16:01 Connie-Wild

即座にクローズすると @Connie-Wild のおっしゃる手数料のコストのほかに個々の取引所自体の価格差(一般的に言うところのスプレッド)も発生します。

単一の取引所でも買う時と売る時の価格は違ってますよね? なので瞬間的にはクローズするコストはマイナスになります。

どうしても即クローズしたいなら exitNetProfitRatio をマイナスにします。 当然損失がでます。

PeterGrainfield avatar Jan 18 '18 16:01 PeterGrainfield

CUI上で具体例を出すと、exitNetProfitRatio =0の場合ですと オープン時

2018-01-19 01:32:00.789 INFO [PairTrader] >>Profit is 350.

クローズ時

2018-01-19 01:32:00.789 INFO [PairTrader] >>Profit is -370.

でないとクローズしないという事でしょうか?

ちなみに

2018-01-19 01:55:09.786 INFO Coincheck :     0 BTC, LongAllowed: OK, ShortAllowed: NG
2018-01-19 01:55:09.786 INFO Bitflyer  : 0.044 BTC, LongAllowed: OK, ShortAllowed: OK
2018-01-19 01:55:09.786 INFO --------------------------------------------------
2018-01-19 01:55:09.786 INFO --------------------ARBITRAGER--------------------
2018-01-19 01:55:09.786 INFO Looking for opportunity...
2018-01-19 01:55:09.789 INFO Open pairs:
2018-01-19 01:55:09.789 INFO [Bitflyer Buy 0.01 BTC, Coincheck Sell 0.01 BTC, Entry PL: 53 JPY]
2018-01-19 01:55:09.789 INFO [Bitflyer Buy 0.005 BTC, Coincheck Sell 0.005 BTC, Entry PL: 33 JPY]
2018-01-19 01:55:09.790 INFO [Bitflyer Buy 0.005 BTC, Coincheck Sell 0.005 BTC, Entry PL: 26 JPY]
2018-01-19 01:55:09.790 INFO [Bitflyer Buy 0.005 BTC, Coincheck Sell 0.005 BTC, Entry PL: 29 JPY]

このような状態になっても放置していればいずれクローズする感じなんですよね?多分

非常に混乱し何がわからないかわからない状態になってきました・・・・ 何かこの辺りについての知識が書いてあるリンクありますでしょうか

marumarusan avatar Jan 18 '18 16:01 marumarusan

Profit is -350でクローズします。 Profit isに表示される数値は手数料を引いた後のものになります。

このような状態になっても放置していればいずれクローズする感じなんですよね?多分

そのうちCoincheckとBitflyerの価格が反転したらクローズするかもしれません。 理解ができないようであれば、損失が拡大するまえに手を引くのも懸命な判断かと思います。

Connie-Wild avatar Jan 18 '18 17:01 Connie-Wild

ご返答ありがとうございます。 踏まえてご質問があります。

r2の基本指針の確認

認識の齟齬だと申し訳ないのですが、 私の認識ではr2のシステムは基本的にオープン+クローズで1セットの認識でしたが これは運がよければ、1セットになるというニュアンスなのでしょうか? 運次第ではオープンのみで、手動で別取引所に移動するのうな感じのフローになるのかなと (ただQiitaにはそのような事が書いていなかった為、間違ってたら申し訳ございません。)

クローズなのですが改めて例を出して再確認させてください。

状態

A=Bitflayer 初期値:残金110円 所持BTC=0btc B=Coincheck 初期値:残金0円 所持BTC=1btc 合計:残金110円 所持BTC=1btc

取引例

オープン

A:ask=110円 bid=100円
B:ask=150円 bid=120円
(1BTCあたり)

Aで1btcを買う:残金=0円   所持BTC=1btc
Bで1btcを売る:残金=150円 所持BTC=0btc
合計:残金150円 所持BTC=1btc 利益=50円

クローズ

A:ask=150円 bid=120円
B:ask=110円 bid=100円
(1BTCあたり)

Aで1btcを売る:残金=120円 所持BTC=0btc
Bで1btcを買う:残金=40円  所持BTC=1btc
合計:残金160円 所持BTC=1btc 利益=0円

オープンの逆の取引でexitNetProfitRatio=100が成立した状態。(クローズ取引)

ただこんなに都合よくいかないので

A:ask=110円 bid=100円
B:ask=110円 bid=100円
(1BTCあたり)

Aで1btcを売る:残金=110円,所持BTC=0btc
Bで1btcを買う:残金40円,所持BTC=1btc
合計:残金140円 所持BTC=1btc 利益=-10円

exitNetProfitRatio=80が成立した状態(クローズ取引)

といったニュアンスで認識しておりました。 間違っていたらご指摘よろしくお願いします。

クローズの回避方法

状態によってはクローズの頻度が少なくオープンに偏りが見れるケースがあります。(私の状態) この場合は

  • exitNetProfitRatioのしきい値を下げてクローズの確率を上げる
  • 取引所の残金を増やし、クローズ機会が来るまで極力オープンを途切らせないようにする

ぐらいしか対応がない感じの認識でした。 こちらも間違ってないでしょうか?

marumarusan avatar Jan 19 '18 01:01 marumarusan

そもそも、クローズできる可能性のある「minTargetProfitPercent」の設定を適切に行うのが必要になります。 最適値を設定できれば、0.05BTCくらいの幅でも十分に利益が出せます。 その議論はこちらでされています。 https://github.com/bitrinjani/r2/issues/55

Connie-Wild avatar Jan 19 '18 02:01 Connie-Wild

取引例は残金、利益の計算に若干の混乱が見られますが、ニュアンスとしてはあっていると思います。

状態によってはクローズの頻度が少なくオープンに偏りが見れるケースがあります。

これは正常です。クローズされるかどうかは市場の動きとパラメータ次第です。他の方も指摘しているとおり、クローズを急ぐ設定にすると手数料分だけ損しやすくなります。

bitrinjani avatar Jan 19 '18 13:01 bitrinjani

@bitrinjani なるほど。一応考えて設定を行い10時間程回しspreadStat.csvを見てみました。 すると [best] target profitの平均が22  [best] target profit percentの平均が0.33 [worst] target profitの平均が-28 [worst] target profit percentの平均が0.43 という結果になりました。 これは長い期間回していると期待値としてマイナスになり、再チューニングが必要という認識で間違いないでしょうか?

marumarusan avatar Jan 19 '18 14:01 marumarusan

はい、その認識です。 最適値はトレーダーそれぞれの腕の見せ所になります。

Connie-Wild avatar Jan 19 '18 15:01 Connie-Wild

調整してみたのですがやはり平均を取ると、worstのほうが絶対値として大きい値になってしまいます。 ただログをみてみたのですが、

2018-01-21 01:06:04.801 INFO [PairTrader] >>Profit is 91.
2018-01-21 01:06:15.919 INFO [PairTrader] >>Profit is 90.
2018-01-21 01:06:31.341 INFO [PairTrader] >>Profit is 95.
2018-01-21 01:06:43.195 INFO [PairTrader] >>Profit is 102.
2018-01-21 01:09:20.722 INFO [PairTrader] >>Profit is -65.
2018-01-21 01:09:46.741 INFO [PairTrader] >>Profit is 92.
2018-01-21 01:10:47.341 INFO [PairTrader] >>Profit is -85.
2018-01-21 01:11:01.228 INFO [PairTrader] >>Profit is -70.
2018-01-21 01:11:16.290 INFO [PairTrader] >>Profit is -66.
2018-01-21 01:11:31.369 INFO [PairTrader] >>Profit is -71.
2018-01-21 01:11:58.504 INFO [PairTrader] >>Profit is 88.
2018-01-21 01:12:16.408 INFO [PairTrader] >>Profit is 86.
2018-01-21 01:12:30.486 INFO [PairTrader] >>Profit is 90.

このようなログで、数値を合算するとプラスのように見えます。 これは長期的に回してもプラスになると考えていいのでしょうか

marumarusan avatar Jan 20 '18 16:01 marumarusan

@marumarusan おそらく、spreadStat.csvがなんなのか勘違いされているのではないでしょうか? spreadStat.csvは統計用の情報なので、その時刻のbest/worstレートが記録されているだけなので、過去に出した注文を記録していません。 3秒ごとにbestとworstの条件で注文し続けたら期待値マイナスなのは当たり前です。 worstのほうが大きくても平均の周りでぶれがあるので、有利なタイミングでオーダーを出したらいいわけです。

一方、注文時の収益は提示されているinfo.logのものです。

このようなログで、数値を合算するとプラスのように見えます。 これは長期的に回してもプラスになると考えていいのでしょうか  

Profitのマイナスがプラスに比べて小さいので有利なタイミングでオープン、クローズしてるように見えます。いまのところうまくいってるように見えます。 市場は生ものなので、長期的にはどうなるかはわかりません。 その時の状況にあったパラメータ調整は必要だと思います。

PeterGrainfield avatar Jan 20 '18 16:01 PeterGrainfield

commissionPercentを適切な値、例えばcoincheckは現物取引(Cash)の場合手数料0%、bitflayerは0.15%等指定した上で、「>>Profit is」に表示される数値を合算した値が、プラスになるのであればその分が取引の利益になっているかと思います。 ただ、Cashで運用している場合は、BTC自体の価格により資産総額が上下するので、長期的に運用した場合にプラスになるかは誰にもわかりません。

Connie-Wild avatar Jan 20 '18 19:01 Connie-Wild