見出し画像

[Puppeteer] ETHUSDを自動売買してみよう on Bybit版Puppeteer

ETHを自動売買したいのだが

先日お知り合いになった専業トレーダーさんから「ETHを自動売買したいけど、できますか?」という質問がありました。
以前、Binance版Puppeteerを作成していた頃には、BTC以外の他通貨の対応も視野に入れて開発をしていたので、出来ない相談ではないと思い、ちょっと調べてみることにしました。

取引所によって微妙にAPIの応答が異なっていたりするので、すぐの対応は難しいのかな?と思いつつAPIに渡す通貨のシンボル情報をソースコード内でGrepしてみると、意外や意外、改造できそうなことがわかりました。
という訳で、Bybit版Puppeteerを他通貨対応してみました。

**********************************************
最新版はv1.0.1です。
バグがある可能性があります。
アップデートは慎重にお願いします。
**********************************************

あれほどマジックナンバーは使わないようにしていたが

プログラミングを始めたばかりの頃に「プログラム中にマジックナンバーは使わない」というお作法(?)があることを知って衝撃を覚えた記憶があります。
マジックナンバーとは

のことです。
ソースコード中に「number=12」とか書かれていても、これって「12月」の意味?それとも、ただの閾値?または何かの定数?って感じになって、長い年月の後は意味不明な数字として独り歩きしてしまいます。

Pythonの場合、明確に定数指定をするキーワードが存在しないので、記述上のお作法で言語上の制約をクリアしているようです。

で、今回は数字ではなかったのですが、ソースコード中に

”BTC”

っていう文字列がところどころ残っていました。
お恥ずかしい話、はなからBTC以外の取引をするつもりがないかのような実装です。
幸いなことにそれほど多くの固定文字列は書き込まれてはいませんでしたが、ソースコード中のコメントに含まれている”BTC”という文字列が多くて、全部をチェックするのに結構時間がかかりました。

サンプルで動作確認

まず、サンプルPuppetで定義を

"//" : "bybit取引所で対応する通貨ペア等を記述",
"SYMBOL" : "ETH/USD",
"INFO_SYMBOL" : "ETHUSD",
"COIN_BASE" : "ETH",
"COIN_QUOTE" : "USD",
"//" : "bybit取引所の価格の最小幅(0.05ドル)",
"PRICE_UNIT" : 0.05,

のように設定します。
起動したところ以下のような出力を得ました。

2020-05-22 22:11:48, INFO    , tick:202.4
2020-05-22 22:11:48, INFO    , bid:202.4, ask:202.45
2020-05-22 22:11:48, INFO    , pos_qty:0, avg_price:0
2020-05-22 22:11:48, INFO    , balance[walletBalance]=0
2020-05-22 22:11:48, INFO    , candle[last]:[1590153000000, 202.4, 202.4, 202.4, 202.4, 456.02766795]
・・・・(以下、略)・・・

一応、取引所の情報を取っているっぽい。

いざ、ETH取引に出陣

という訳で、Bybit版warlockでETHUSDの取引を行ってみたいと思います。
(ETHのテストコインを使って、TestNetでの試験運転です)

BTCと違ってETHの場合は閾値の設定等が色々と違うので定義ファイル(JSONファイル)の値を色々と書き換えます。
何しろ価格の桁が違いますから。
しかし、warlockのソースコード自体には手を加えません。
さて、そのまま動くでしょうか?

結果

スクリーンショット 2020-05-22 21.31.11

なんとか動いているようですね。
今後、さらなる検証(実弾試験)は必要だと思いますが、いい感じです。

宣伝

Bybit版Puppeteerは

から。

Bybit版Warlockは

から。

楽しいBotライフを!



ソフトウェア・エンジニアを40年以上やってます。 「Botを作りたいけど敷居が高い」と思われている方にも「わかる」「できる」を感じてもらえるように頑張ります。 よろしくお願い致します。