ArbitrageWin v1.1.0.2-リリース

APIエラー時にどう対応する?

今のボットは、裁定取引機会の検索を実行し続け、発注するときにAPIエラーしても自動で停止しないです。これは、利益を積極的に獲得するためです。なんですが、日本の取引所では、たまにメンテナンスのために深夜に数分間サーバーをアクセスできない時もがあります。対策としては最良の方法では?

基本的に2つの方法があります。
1. 主に発注の時にAPIサーバーからエラーが発生した場合、すぐにボットを停止します。安全は安全ですが、ちょっと不便のどころがあります。もしも取引所側で毎日ただの数分間の停止の場合、毎日ボ​​ットを再起動する必要があるため、効率的ではないようです。

2. APIで発注するときエラーが発生した場合、ボットを数分間一時的に停止し、次の裁定取引チャンスの検索を自動的に再開します。ある時間中でAPIエラー続くの場合は停止する。

ArbitrageWinの新しいリリースでは、方法「2」に改良をします。

⇒ 発注するたびに、APIエラー時に10分間停止する。
⇒ 12時間以内、もしAPIエラー時に6回続くの場合は、完全にボートを停止します。ユーザーにLINEで通知する。その場合はユーサーが手動で再起動が必要です。

このロジックを入れれば、APIエラーを最小限することができると思います。

 

裁定取引オーダー順番を調整

最近、8/23にBitbankとBinance間、こな裁定取引のシナリオを見ました。シナリオは次のとおりです。

BitbankでAPIから返された買いの入札価格は0.00708xxがあって、BinanceやBittrexなどの他の取引所の平均価格は0.00721xxxでしたが、2つのスプレッドの差が1.8%利益取れるの意味です。

裁定戦略の観点からみると、利益を獲得する良い機会のようですね。したがって、ボットエンジンが次の通りを実行します。

1.売り注文をBinanceに発注する
2.売り側は完了してから、買いをBitbankに発注して、利益を獲得つもりです。

しかし、今回の裁定取引は売り買いはすべて完了しませんでした。 Bitbankでの買いは約定しなかったため、リープオーダーになった。

実際に調べたら、Bitbankの歩み値を見て、0.00708xxの価格で約定してたの取引がなかった。Bitbankのチャートに表示された画面にも、0.00708xxという約定の価格はどこでも表示されませんでした。

何で0.00708xx板をAPIから返されたと不思議でした。可能性としては、他の取引ボットで、ミリ秒単位で0.00708xxという低い指値を出したり、キャンセルしたりと繰り返ししてました。ちょどその時に、システムがこの板を取れましてスプレッドを計算しました。裁定取引機会が存在するかどうかを判断して発注出しました。

このシナリオを回避する最良の方法とは?
ーーーーーーーーーーーーーーーーーーーー

取引所からの価格板を確認する方法はないので、裁定ロジックを少し調整が必要と思います。

「各取引所でのスプレッドを確認しながら、どちらが先に発注するかと判断するのことです。スプレッドが大きや取引量が少ないの取引所は先にオーダーをだして、約定すれば、次の取引所にも約定の可能性が高くなる。」

先ほどのシナリオの場合は、Bitbankのスプレッドの方が大きい:

1.買い注文をBitbankに発注する
2.買い側は完了してから、売りをBinanceに発注して、利益を獲得。
3.買い側は完了しなかったら、Bitbankのオーダーをキャンセルして、それでおわり。

 

Setting in Bull and Bear Market

In previous blog, I mentioned about the various risk and why the altcoin balance is deviate from initial balance when performing arbitrage. We understand how leave order happen. The more leave order, the more the deviation from the original start position if it doesn’t get filled. Leave order means you have done one way transaction and the other side of the order is waiting to be filled. Either buy or sell.

In a bull market when the liquidity is high, you have higher possibility of filling buy and sell orders. Hence, capture the profit. But in bear market, investors are more cautious in buying the selling, therefore, the chances of being filled in either buy or sell is relatively lower. In this period, you may find number of leave order is higher in your Exchange.

What is the best way avoiding it?

Let’s take this as example in my portfolio:
My total position : 1 BTC and 20 ETH

In bull market, I would set as below:
=>  Max size = 2 ETH(10% each time of my total ETH position)
=>  Spread = 0.80%

The main point of setting higher in Max Size is to capture bigger profit because I understand the buy and sell order would be relatively easy to be filled. Also, in bull market the spread tend to be wider than bear market. Setting higher spreads would allow me to avoid those smaller profit and maximize the profit in each arbitrage.

In bear market, I would set as below:
=>  Max size = 0.50 ETH (2.5% each time of my total ETH position)
=>  Spread = 0.40%

I set it lower in max size because I want to reduce the risk of being off from my starting position due to the large number of leave order. Also, I would set the spread lower because the spreads tend to be narrower in bear market. If possible I wouldn’t set it lower than 0.40% to avoid higher market risk for the smaller profit captured in arbitrage.

Last but not least, I will always buy back or sell the extra position to adjust my position back to original start position every once or twice a week

Note: This is based on personal experience of performing arbitrage. This is not financial advice and strictly for reference only

 

7月の裁定取引のパフォーマンス – 第二弾

前回のブログで述べたように、7月の第1週は静かで市場は横ばいでした。 

https://arbitragewin.com/wp/2019/07/09/7%e6%9c%88%e3%81%ae%e8%a3%81%e5%ae%9a%e5%8f%96%e5%bc%95%e3%81%ae%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3%e3%82%b9/

しかしそれ以来、BTCマーケットはいろなな要因で、特にFacebookのLibraコインに関する規制上の不明な方向やトランプ大統領から変なコメント「ビットコインはお金ではなく、その価値は非常に不安定」の影響を受けました。

裁定取引戦略は最近の弱気市場にどのように反応しますか?

LTCBTC、MONABTC、BCHBTCおよびETHBTCのスプレッドは0.50%から1.00%の間で変動しますが、それでも簡単に利益を獲得できるという意味ではありません。主な理由は市場の流動性です。 BTCJPYは極端に価格が動いたが、投資家はBTCを売っても、アルコインを買うのではないの状況ですね。

仮に

  1. 90%の投資家がBTCを売却して、現金で保管すると。残りの10%がそれをアルコインに買う。それ状況で、BTC価格の急激な下落を引き起こしても、アルコールを買うバイヤーも少ないの状況です。裁定取引の売買約定のチャンス少なくなる。
  2. 90%の投資家がBTCを売却して、現金で保管ではなく、アルコインを買う。それ状況だと、BTC価格の急激な下落を引き起こし、アルコールを買うバイヤーも多くなるため、裁定取引の売買約定のチャンス割と多くなる。

6月のような強気市場では、投資家は売買に熱心です。これは市場で十分な流動性を生み出した。弱気市場と違うのは、投資家は売買取引に慎重になる傾向があります。アービトラージ戦略の重要な要素は、スプレッドと流動性です。利益を確保するために買いと売りを約定することが必要です。

もともと運用に充てていたBTCの数量が減っているの理由とは?

1.片方の約定:

裁定取引とは売り買い両方とも約定することで、利益を確保するとの仕組みです。但し、片方の約定はどういう意味ですか?

例: 総資産 BTC = 1.0 BTC ETH = 20

  • ⇒ 下記例として、もし片方、買いの方のみ約定して、売りの方は残ってまま【リーブオーダーという】だっとしたら、この時点でETHの数は2個増えて、BTCの数は減らしたの状況です。そのまま続きだと、BTCの数減らして、ETH数を増やした。
  • ⇒ リーブオーダー自体は元々のバランスをズレる。先の例として、ETH 2個増やした同時に、BTC減らしたです。もしリーブオーダーの場合は、この時点で、BTC数減って、ETH2個増えた。
  • ⇒ リーブオーダーが約定次第に、先の増えたの2ETHとBTCバランスを戻します。

裁定取引を行いたいとき、未確定の場合:
① 2ETH ⇒ 0.030 BTC 買、 確定 ➡ BTC = 0.97 へ減って ETH = 22 へ増えた
② 2ETH ⇒ 0.032 BTC 売りできず 未確定➡ BTC = 0.97 変わらず ETH = 22 変わらず

この時点で、BTCのバランスをズレます。時間たって、上記(2)約定する場合は:

2ETH ⇒ 0.032 BTC 確定➡ BTC = 1.002 、ETH = 20 に戻す。この時点は、バランスを戻りました。

2.端数実行リスク

取引所で取扱い出来る最小数設定してるので、それ以下の数を約定の場合は、反対側の取引を発注しません。

先ほど(1)の例と説明しましょう。

最初は、2ETH(買)を発注するときに、もしただの0.01ETHしか約定してないの場合は、システムは1.99のETHオーダーををキャンセルして、0.01ETHの売側は、発注はしません。

理由は下記の通りです:
0.01 ETHで、BTC換算にすると【0.01 * 0.03BTC = 0.0003BTC】しかないので、ほとんどの取引所は最小発注は0.0005BTC以上しないといけないので、この時点で、20 ETHから20.01になって、BTC数も0.0003BTCの分を減ります。

3.システムと取引所との通信タイミング

どういう意味でしょうか?また、(1)の例と説明しましょう。

2 ETH(買)を発注した後、約定したかどうかを確認の上、売りの方にオーダーを出すの仕組みにです。ですが、取引所とシステムとの間の通信にはタイムラグがあるのケースもあります。
「約定してない」なメッセージを取引所からシステムに返しての一瞬、取引所のどころで約定しまった。システム側は約定してないの認識のため、売りの発注はしないの状況です。

その時の数はずれます。
2ETH ⇒ 0.030 BTC 買、 確定 ➡ BTC = 0.97 へ減って ETH = 22 へ増えた。

どうするの?

色々な理由で、元々の数をずれるのは現実です。常に自分の数を調整して、減ってた時に買い戻す。増えた時に売りだすのは一番大事と思います。それはマーケットリスクを最小限にするのことです。