この記事で、ヒゲキャッチプログラムの仕組みを考えました
Pythonでシミュレーションをしたところ、意外と勝てそうな事がわかりました
上の記事で書いたように取引手数料とスプレッドが問題点です
取引手数料が、たかが0.05%だと思いますが、ヒゲキャッチプログラムでは1日に何回も取引するので、取引手数料が結構痛いです
この問題の解決策は、ズバリ注文方法を指値注文にすることなので、指値でヒゲキャッチができるような仕組みを考えていこうと思います
Contents
Pythonでヒゲキャッチプログラムを作る
アルゴリズム
指値注文でヒゲをキャッチするようなアルゴリズムに変更します
アルゴリズム
・5分に1度、ヒゲキャッチ用指値注文を出す
・指値注文は、現在価格より30,000円下に0.01BTCの買い注文
・約定していなければ、5分後に指値注文はキャンセルする
・買い注文が約定したら、15,000円上に売りの指値を出す
・売り注文が約定したら(ヒゲキャッチが完了したら)、また5分ごとにヒゲキャッチ用指値注文を出し続ける
フローチャート
仕様を満たすように、フローチャートを考えました
・5分に1度、指値注文を出し続ける部分
・15秒に一度、約定しているか調べる部分
5分に1度、指値注文を出し続ける部分
5分に1度、指値注文を出し続ける仕組みを考えました
15秒に一度、約定しているか調べる部分
15秒に一度、出した注文が約定しているか確認する仕組みを考えました
出した指値が約定したか約定していないかは知らされないので、15秒に1度、プログラムに確認させます
実装
※ビットコイン自動売買プログラムのサンプルを載せますが、以下の点をご注意ください
・取引における損失について、責任は負いかねます
・API Keyの流出など、セキュリティ面での責任は負いかねます
・上記以外のいかなる障害・トラブルにおいても責任を負いかねます
Pythonプログラムを書いたので、一応載せておきます
#ステータスを保存しておくグローバル変数
#ビットコインを持っているか記録(int)
have_btc = 0
#買い注文のidを記録(int)
buy_order_id = 0
#売り注文のidを記録(int)
sell_order_id = 0
#パラメータ
buy_amount = 0.001
crash = 30000
back = 1/2
#5分に1回指値注文を出し続けるjob
def job1():
global have_btc
global buy_order_id
global sell_order_id
#ビットコインを持っているなら
if have_btc == 1:
print("have_bitcoin")
#ビットコインを持っていないなら
else:
#オーダーを更新
import python_bitbankcc
API_KEY = 'xxxxxxxxxx'
API_SECRET = 'xxxxxxxxxxx'
pub = python_bitbankcc.public()
prv = python_bitbankcc.private(API_KEY, API_SECRET)
#5分前のオーダーをキャンセル
if buy_order_id != 0:
value = prv.cancel_order('btc_jpy',buy_order_id)
print("canceled: "+str(buy_order_id))
# 現在の価格情報を取得
value = pub.get_ticker('btc_jpy')
bid_price = int(value["buy"])
print("now_bid_price= "+str(bid_price)+"yen")
print("placed_limit_order_at "+str(bid_price-crash)+"yen")
#30,000円低いところに指値注文
value = prv.order("btc_jpy", str(bid_price-crash), str(buy_amount), 'buy', 'limit')
buy_order_id = value['order_id']
#15秒に1回約定しているか確認するjob
def job2():
global have_btc
global buy_order_id
global sell_order_id
import python_bitbankcc
API_KEY = 'xxxxxxxx'
API_SECRET = 'xxxxxxxxxxxxxxxxxxx'
#もしビットコインを持っていないことになっているなら(もしかしたら約定してるかもしれない)
if have_btc == 0:
#ヒゲキャッチ1回目は除く
if buy_order_id != 0:
#注文状況を確認
prv = python_bitbankcc.private(API_KEY, API_SECRET)
order_info = prv.get_order('btc_jpy', buy_order_id)
if order_info['status'] == "FULLY_FILLED":
#ビットコインは持っていることになる
have_btc =1
#買った時の価格を取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)
order_info = prv.get_order('btc_jpy', buy_order_id)
bought_price = int(order_info["price"])
print("bought_price= "+str(bought_price)+"yen")
print("placed_limit_order_at "+str(bought_price+crash*back)+"yen")
#15,000円高いところに指値注文
value = prv.order("btc_jpy", str(bought_price + crash * back), str(buy_amount), 'sell', 'limit')
sell_order_id = value["order_id"]
#もしビットコインを持っているなら
if have_btc == 1:
#約定しているのか確認する
#注文の情報を取得
prv = python_bitbankcc.private(API_KEY, API_SECRET)
order_info = prv.get_order('btc_jpy', sell_order_id)
#もし約定していたら
if order_info['status'] == "FULLY_FILLED":
#ビットコインは持っていないことになる
have_btc = 0
このプログラムで使う仮想通貨取引所はbitbankです
bitbankはこのような特徴があり、自動売買におすすめの取引所です
・スプレッドが小さい
・APIが使える
・アルトコインを取引所で買える
bitbankbitbankのAPIの使い方について詳しく知りたい方は、この記事をご覧ください
まとめ
この記事では、ヒゲキャッチのアルゴリズムを考え、ヒゲキャッチプログラムを作りました
ヒゲキャッチプログラムを作る参考になったら嬉しいです
なお、プログラムを動かすのは自己責任でお願いします(重要)
次の記事
リンク
暗号資産取引所bitbank
bitbank
コメント