初めに
皆さんこんにちは、ぷらする(@plusl_BTC)です。
リアルでは大学の学祭の真っ最中ですが、ちまちまと合間を見つけてこの記事を書いています。
さて、最近BTCFX界隈ではBotを作ろうという動きが盛んですね。
おそらく、漢 a.k.a GAMI さんに影響されたという方も多いと思います。
私も漏れず、一連のツイートを通してBotを運用し始めました。
このツイートは一番良かった時のものです!
最近は余り利益は伸びていないのですがね。。。
そんな中、BTCのトレードBotの技術交換、交流を目的としたSlackがつい最近誕生しました。
私も、早速入らせていただきましたが、やはりまだBotを稼働させている人は少ないのが現状です。どこから手をつけようかといった人も多く感じられます。
そこで、今回はコードを極限まで簡略化し、取り敢えずbFFX上で動くBotを作ってみたいと思います。
実際に稼げるほどのものではないですが、Bot開発のスタート地点としては良いものだと思います。
開発環境
今回はPythonを使ってBotを作ってみようと思います。(Python環境はある前提で話を進めていきます。需要があれば、Python環境構築の記事を書くかも?)
Pythonを使う理由はただ一つです。pybitflyerというラッパーが使えるからです。
このラッパーがとても便利で、RESTの処理を一切書かなくてもAPIを動かせます。
難しい処理を書かなくても良いので、初心者にとってはありがたい存在です。
インストール方法は至って簡単で,「pip install pybitflyer」と打てば終わりです。
それでは、実際にコードを書いていきましょう。
コーディング
コーディングと言っても、50行にも満たないので一気にソースを貼り付けちゃいます。
import pybitflyer import time #初期化 midprice = 0 before_midprice = 0 pos = 0 # Long : 1, Short : -1, No position : 0 public_api = pybitflyer.API() api = pybitflyer.API(api_key="[YOUR API_KEY]", api_secret="[YOUR API SERCRET]") #中間価格の初期化 midprice = before_midprice = public_api.board(product_code = "FX_BTC_JPY")["mid_price"] #注文用のメソッド def placeOrder(side): size = 0.001 # 枚数 api.sendchildorder(product_code = "FX_BTC_JPY",child_order_type = "MARKET",side = side , size = size) #メインループ while True: time.sleep(60) #現在の中間価格を取得 midprice = public_api.board(product_code = "FX_BTC_JPY")["mid_price"] #決済注文 if pos == 1: print("Close Long position") placeOrder("SELL") pos = 0 continue elif pos == -1: print("Close Short position") placeOrder("BUY") pos = 0 continue #1分前より価格が高く、ノーポジの時 if midprice - before_midprice > 0 and pos == 0: print("Long Entry") placeOrder("BUY") #ロングエントリー pos = 1#現在のポジションを更新 #1分前より価格が低く、ノーポジの時 if before_midprice - midprice > 0 and pos == 0: print("Short Entry") placeOrder("SELL") #ショートエントリー pos =-1 #現在のポジションを更新 before_midprice = midprice # 価格をシフト
まずは、簡単にエントリーロジックを説明します。といっても、とても簡単です。
- 1分間隔で、midprice(Best AskとBest Bidの中間価格)を取得します。
- この値が1分前より高ければロング、低ければショートでエントリーします。
- エントリー1分後にポジションを損益に関係なく決済。
たったこれだけですが、これでも立派なBotです。(利益を別にして)
まだBotを動かしたことがない方は一回動かしてみると面白いかもです。
では次に、簡単にコードを見ていきましょう
public_api = pybitflyer.API() api = pybitflyer.API(api_key="[YOUR API_KEY]", api_secret="[YOUR API SERCRET]")
private APIをここまで簡単に扱えるのは素晴らしいですね。
2種類のインスタンスを生成しているのは、api_keyなどを設定すると、public APIにアクセスする際にも暗号化をしてしましまい処理が増えるからです。
public_api.board(product_code = "FX_BTC_JPY")["mid_price"]
このコードでは実際にbitFlyerのAPIにアクセスしています。
メソッド名はAPIに準拠しており、bitFlyerのドキュメントからコピペすれば大体使えます。
また引数は、クエリパラメータををkey = valueとすれば大丈夫です。複数の場合はコンマで続けるだけです。
ドキュメントを見れば、どんな引数を取ればいいか分かるでしょう。
メソッドの戻り値はJSONではなく、dict形式です(連想配列とも言うらしい)。
ですので、[key]で簡単に値を取ることが出来ます。今回は[mid_price]を取得しています。
後はプログラミングをやったことがある人なら何をしているか分かると思います。
このBotの問題点
さて、簡単なBotのコードを紹介しましたが、このBotはかなりの問題点があります。
- エラー処理がない
- 遅延処理がない
- そもそも儲からない
どれも致命的な問題ですね。
ここをいかに改善していくかというのがBotを作る上で大事になってきます。
かく言う私もまだ余り良いロジックを思いついてません、、、
この壁を乗り越えた人はガッポリ儲けれるかもしれませんね!
最後に
簡単にですが、Botのサンプルコードを載せて見ました。
これを見て、みなさんがBot開発の意欲が上がってくれれば幸いです。
最後になりますが、私はこのBotが初めて作ったオリジナルソフトになります。
そんな初心者でも実際に動かすまで持っていくことが出来ます!
まず手を動かす、これが一番大事です!
ぜひ皆さんもBot作ってみましょう!
よろしければtipなんか投げてくれると今後の励みになります
BTC: 1PZMtgahgEZAZfhErwjQAFAN1Tyt8Yv948