ここ最近、BTCUSDTの自動売買スキャルピングBOTの作成に時間を割いてます。
仮想通貨界隈をみていると、やっぱりトレードで成功している人の方が圧倒的に多いんですよね。
去年ならまだしも、ガチホ勢、マイニング勢もつらい。
チャートは最低限のテクニカルしかみていませんでしたが、しっかりと色々な手法を勉強して、自動売買BOTを作成しようと思って現在頑張ってます。
お金に関わる事なのでソースコードの公開はできませんが、こんな感じになったよっていう報告を書いてみます。
スキャルピングとは
スキャルピングとは数十秒~数十分というごく短いスパンの間に、何度も売買を繰り返して、小さな利益を積み重ねる手法です。
板に出てもすぐに売買されるので、手動でやると、かなり瞬発力が問われます。
ちょっとやってみたけど、瞬時に板から消えるので、無理ですね。
ということで、プログラム向きなんですよね。
どの取引所を使うか
悩んだのは使う取引所。APIを使うのは当たり前として、どの取引所を使うかです。
僕はFCoinを使いました。
スキャルピングは1日に数十回~数百回トレードするので手数料が重要になります。
Fcoinは、前に記事に書きましたがFTを指定枚数保有しておくと、売買手数料が翌日還元されます。実質無料です。この特権を上手につかってみました。
どの取引ペアを使うか
小さく安定して利益を取りたかったので、なるべく値動きは少ないものを選びました。
そして出来高もたくさんあるもの。ということで、以下をチョイス。
- 値動きの変動は少ない通貨を選ぶ⇒USDT
- 出来高が多い通貨ペアを選ぶ⇒BTC/USDT
FCoinのAPIを使ったPythonベースソース
冒頭に書いたようにお金に絡む事なので責任がもてないので、自分のソースコードはお見せ出来ませんが、ベースソースは以下を使いました。
上記ベースはPython 3.5以上だと動かないです。2.7.10で動作確認済み。
これを原型とどめないほど大幅に改造しまくったという感じです。
APIの仕様書はコチラ
https://developer.fcoin.com/zh.html#45fa4e00db中国語なので分かりづらい。翻訳して使いました。
以下のようなアルゴリズムでコーディングしました。
- 5秒毎にループ
- APIが動作可能かチェック。502エラーなら30分スリープ
- Bid(売値)とAsk(買値)をAPIで取得
- btc、usdtの保有枚数をAPIで確認、購入時はAskの最安値、売却時はBidの最高値と板の枚数を取得しチェック
- 一定期間(数十秒)の価格をList(配列)に格納しチェック。底値にタッチしたら買いエントリー
- レンジ幅は10分と狭くし、少しでも利益(0.03%以上)が出れば利確
損切りは-3%- 買いポジションから1時間以上経過したら強制利確(損切り)
その他、細々としたものはあるけど、ざっとこんな感じ。
USDTはドルと近い値段なので、もともと値動きは少ないです。したがって、大きな利益は望めません。あんまり欲張ると、まったく売買されないBOTになっちゃう感じです。USDTだと1%でも多い感じ。試行錯誤して、利益幅は0.02~0.05%がベストでした。
でも、BTC/USDTは、日々かなりの出来高なので、僅かな期間でも小さく上下を繰り返しています。
スキャルピングには適しているかなと思います。
損切は必須。BOTでは、ないとお話にならない感じです。
どういうタイミングで損切りするかが肝になります。ここはまだ試行錯誤中。
あとは、APIが生きているかのチェックは必須ですね。
どの取引所のAPIも、しょっちゅう止まります。そういうときは502エラーが出るので、チェックする仕組みはトレードBOTには必須です。
作成過程の様子
こちらの記事でまとめました。
実践結果
こんな感じで動いているのですが
あとは条件さえマッチすれば、自動的に売買。数分毎に約定してます。
FCoinはレバレッジはなく現物のみなので、1日の利益は0.2%~3%、トレード回数は100回前後ってとこです。かろうじてですが、だいたいプラスになってます。
もうちょっと損切りを改良すれば利益率は上がるかなと思って、いじくり回している感じですが、最初に作ったトレードBOTとしては上出来かなって思いました。
やって分かったのは、スキャルピングはトレード回数が多いので手数料が地味に気になります。
FCoinは、手数料無料になるからよいものの、他だとたぶんキツイですね。
pythonでのトレードBOT作成の課題
MT(MetaTrade)と違って、簡単にテクニカル指標(ボリンジャーバンドとかMACDなど)は使えません。それぞれプログラムで組む必要があります。これが課題だねえ。
そして、通貨の価格データも過去データは簡単には使えないので、そこも課題。
今回は、極めて短いスパンの価格をList(配列)に格納して比較チェックしたのですが、テクニカル使うときは最低でも数日分のデータはないと使えないですからね。みんなどうしてるんだろう・・。
ご質問はコメント欄からお願いします