※【2018/09/24 追記】新規にBinanceから価格取得するアプリを開発致しました。→ こちら
※※注意※※
今回ご紹介する方法は実際に取引が発生します。
それに加え損失が出る可能性も御座います。
その点を理解された上での利用をお願い致します。
取引で損失を出されてもこちらでは責任を負いかねますのでご了承ください。
今回は実践編ということで、実際にAPIを使用して
・現在の価格と7秒前の価格の差を比較し数%下がっていたら購入注文を出す。
※下がり幅のパーセンテージはご自身で変更できます。
・購入注文を出して10秒以上経ったらキャンセルオーダーを出す。
・購入できたら10秒待って現時点の価格で売り注文を出す。
・売りが終了したら、最初に戻って繰り返し
という処理を行うコードをご紹介します。
今回作成するコードをGithubに公開しておりますので、こちらから
ダウンロードをお願い致します。
ダウンロードを行って頂いたコードを元に説明を進めて参ります。
なお、言い訳になりますが、今回はとりあえずトレードを行うことに焦点を当てているため
エラー処理やコードの書き方があまりよろしくなく、
買いと売りがうまく実行されない場合がございます。
※全てのパターンのエラー処理を実装していないため。
その為、本記事では感覚をつかむ程度の感じで
参考にして頂ければ幸いです。
まだ「Python」と「BinanceのAPI」の準備を行っていない方はこちらから準備をお願い致します。
【2018/10/12 追記】イーサリウムのアプリ作成関連記事を作成いたしました。
【初心者】イーサリウムでアプリを作ろう!【準備編】
※【2018/09/24 追記】新規にBinanceから価格取得するアプリを開発致しました。→ こちら
※【1月28日 追記】CoinExchangeのAPIデータ取得方法をこちらに公開致しました。
step01. 設定ファイルの変更とテスト
早速トレードといきたいところですが、
まずはダウンロードしたファイルにBinanceのAPIを設定するところから始めましょう。
ダウンロードいただいたフォルダに「config」フォルダがありますが、
その中の「config.ini」ファイルを開いてください。
中にAPIキーとシークレットキーを保存します。
次のように文字を置き換えて保存します。
<API_KEY> = APIキー
<API_SECRET> = シークレットキー
API_SECRET = <API_SECRET>
次に「src」フォルダの「step01.py」というファイルを開きます。
こちらは7秒ごとに
・自分の使用できるBTCを表示
・全ての価格を表示
するプログラムです。
ソースコードの主な処理を行っている部分を
下に抜き出しました。
処理に関しては各コメントのとおりになります。
# ~~ 上記省略 ~~
while 1: # 自分のBTCを取得 balance = client.get_asset_balance(asset='BTC') # Freeは「現在使用できるBTC」 print("free myBTC : " + str(balance['free'])) # 7秒待ち time.sleep(7) # すべての価格を取得 prices = client.get_all_tickers() # 取得した価格を表示 print(prices)
こちらを使ってテストを行っていきます。
コマンドプロンプトより下のコマンドを実行しましょう。
実行すると「自分の使用できるBTC」と「全ての価格」が表示されればテスト成功です。
次に実際に買いを入れるプログラムを作成しましょう。
というエラーが出た場合にはWindowsの時刻同期を行ってください。
Windows7ですと
「右下の時間」> 「日付と時刻」 > 「インターネット時刻」> 「設定の変更」> 「今すぐ更新」
をクリックして時刻を同期してください。
step02. テストで買いを入れてみる
このステップではテストで買いを入れて見ましょう。
現在の価格と7秒前の価格差の比率が下がったら買いを
入れます。
まずは実際に買いが行われるか確認するため、
価格差が「0」パーセント以上で買いを入れるようにします。
買いの注文はテスト注文で行ってみます。
step02.pyを開いてください。
コードの28、29行は配列に「現在の価格」と「ゼロで初期化」した
値を代入しておきます。
# before, after prices beforePrices = [prices[i]['price'] for i in range(symbolLen)] afterPrices = [0 for i in range(symbolLen)]
下はコードの48行目からです。
7秒経ったら「afterPrices」に価格をいれ、
28行目で「beforePrices」に入れた価格を比較して価格差を算出しております。
価格差が「0」パーセント以上なら買いを入れます。
while 1: # 自分のBTCを取得 balance = client.get_asset_balance(asset='BTC') # Freeは「現在使用できるBTC」 print("free myBTC : " + str(balance['free'])) # 7秒待ち time.sleep(7) # すべての価格を取得 prices = client.get_all_tickers() # 取得した価格を表示 # print(prices) for i in range(symbolLen): # 7秒後の現在の価格を取得 afterPrices[i] = prices[i]['price'] # 前回の価格と現在の価格を比較し、パーセンテージを計算 pricePropotion = 100 - (float(afterPrices[i]) / float(beforePrices[i])) * 100 # BTCのそれぞれの銘柄で指定パーセンテージ下がったら買いを入れる。今回はテストの為0パーセントで買いを入れる。 if ( pricePropotion ) > 0.0: # Ticker BTC if re.search(r'BTC', prices[i]['symbol']) and (round (float(balance['free']) / (float(afterPrices[i]) * 1.03)) ) > 0.0: # 買いを入れたときの情報を表示 print('time: ' + datetime.now().strftime("%Y/%m/%d %H:%M:%S") + ' , ticker: ' + prices[i]['symbol'] + ' , PricePropotion: ' + str(pricePropotion) + ' , afterprice: ' + afterPrices[i] + ' , beforePrice: ' + beforePrices[i]) # 買いを入れるときにTickerの「シンボル」、「現在の価格」、「ループの番号」をbuyCoin関数に渡す buyCoin(prices[i]['symbol'], afterPrices[i], i) break
次に実際に買いを入れる処理です。
31行目の「buyCoin」関数です。
今回はテストで買いを入れてみます。
def buyCoin( symbol, afterPrice, tickerCount ): print("called buy") order = client.create_test_order( symbol=symbol, side=SIDE_BUY, type=ORDER_TYPE_LIMIT, timeInForce=TIME_IN_FORCE_GTC, price=100, quantity=10) print(order) return
実際に実行して「called buy」と表示されれば成功です。
コマンドプロンプトより下のコマンドを実行しましょう。
free myBTC : 0.00008020
time: 2018/01/21 02:25:56 , ticker: ZRXBTC , PricePropotion: 0.006529119874628009 , afterprice: 0.00015315 , beforePrice: 0.00015316
called buy
{}
free myBTC : 0.00008020
time: 2018/01/21 02:26:17 , ticker: TRXBTC , PricePropotion: 0.15600624024961007 , afterprice: 0.00000640 , beforePrice: 0.00000641
called buy
{}
free myBTC : 0.00008020
買い注文が呼ばれていますね。
次のステップでは実際の買いと売り注文を見ていきましょう。
step03. 自動売買
このステップでは実際に買いと売りを自動で行う処理を
見ていきましょう。
「tradeSystem.py」では最初に書いた
・現在の価格と7秒前の価格の差を比較し数%下がっていたら購入注文を出す。
※下がり幅のパーセンテージはご自身で変更できます。
初期設定は5%としております。
・購入注文を出して10秒以上経ったらキャンセルオーダーを出す。
・購入できたら10秒待って現時点の価格で売り注文を出す。
・売りが終了したら、最初に戻って繰り返し
という処理が盛り込まれております。
「tradeSystem.py」を開き中を見てみたら実際に実行してみてください。
コマンドプロンプトでは「ctrl + C」キーを押すまで処理が続けられます。
「ctrl + C」で終了すると「log」フォルダの中にログが抽出されます。
おわりに
いかがだったでしょうか?
駆け足で紹介した部分が多々あり、
内容を理解することが困難なところがあったかもしれません。
ですが、自動トレードを実装するハードルが
本記事によって少しでも下がったと感じていただければ
幸いです。
理解が出来なかった部分や質問等があれば、コメント等でいただければ
お答えさせて頂きます。
みなさま、もうけてくださいね!
apiでのticker取得はBTC建て以外は不可能なのでしょうか やり方を知っていたら教えてください。
ほんとーにごめんなさい!メジャー銘柄なのでXRPとBNBのペアがあると勝手に思い込んでいてエラーを出していました;;先ほどのコメントは無視してください。
aguseさん
コメントありがとうございます。
大丈夫です~( ˙ө˙)
また何かありましたら、ご遠慮なくコメントください(* ̄▽ ̄)ノ~~
Please. You have this code in Python/websocket?
I’m sorry but I have not created it,
and there are no prospects to create in the future.
いくつか質問させてください。
トレード初心者の者です。先日、binance apiにて、get_all_tickers()を実行して、オルトコインの価格表示をさせることに成功しました。
get_all_tickers()で7秒前より、価格が下がったコインを買って10後に売るというのが、今回の処理ですね。
(1)10秒後に価格が上がり利益がでることを期待した動作のようですが、10秒後に価格は上がりやすいのですか?
(2)ソースを全て読めていないので、売買の数量やコインの種類がよくわかりません。
売買数量は利用可能なBTCの一分ですか?それとも100%ですか?
売買するコインは最初に見つけた7秒前かかっていますがX%(デフォルト5%)下がったコインになりますか?
コメントありがとうございます!
質問頂いたことへ回答させていただきます。
ご質問 : (1)10秒後に価格が上がり利益がでることを期待した動作のようですが、10秒後に価格は上がりやすいのですか?
回答 : 色々試したり市場の動きを見た所、7秒の間に急激に下がった銘柄のコインは10秒ほどで元の価格へ戻ろうとする
動きをするものが多かったです。
ですが、この調査をしたのは2018年2月頃であり現在の市場は違った動きをするかもしれません。
ご質問 : (2)ソースを全て読めていないので、売買の数量やコインの種類がよくわかりません。
回答 : 説明不足ですみませんでした。。
こちらに関しまして、所持しているBTCを全て価格の下がった銘柄のコインを購入するプログラムとなっております。
ご質問 : 売買数量は利用可能なBTCの一分ですか?それとも100%ですか?
回答 : 上記の回答と重複しますが、100%となります。
ただし、プログラムを改造することによって所持BTCの一部を使うことも可能です。
ご質問 : 売買するコインは最初に見つけた7秒前かかっていますがX%(デフォルト5%)下がったコインになりますか?
回答 : プログラムの意図としては
「7秒後にX%下がったコインを購入」-> 「購入できた or キャンセルになったら再びループ」-> 「再度全てのコインデータを取得し7秒後にX%下がったコインを購入」
となっております。
ただし、半年以上前に書いたコードになりまして
現在はBinanceのAPIの仕様が変わっていたりした場合
意図通りに動作するか保証することは出来兼ねますので参考程度にしていただければ
幸いです。
以上になります!
他に何かありましたら、再度コメントいただければ幸いです。
【実践編】簡単、BinanceのAPIを使った自動売買の方法公開!
に記載されてル
Githubに公開されたソースをダウンロードしましたが
configファイルがみあたりません。別の場所にあるのでしょうか?
コメントありがとうございます!
「config」フォルダ内の「config.ini」というファイルがありまして、
そちらを変更していただければ動作するはずですがいかがでしょうか?
「master」リポジトリに切り替えてご確認いただければ幸いです。