PythonでBTCトレーディングボット

PythonでBTCトレーディングボット

Python歴激浅の私ですが、PythonでBTCのトレーディングBotを作って走らせていました。参考にした手法はこちらです。

グリッドトレーディングといい、トレンドを一切考慮しないトレーディング手法です。簡単に言うと信用取引を使い、同じ金額で売りポジ買いポジの両方を入れて、上がったり下がったりして利益が出た方を利確するやり方ですね。この手法はレンジ相場では効果ありますが、長期に渡り一方通行に動くと終わりです。

ボットのロジック

自分は信用取引はしたくなかったので現物買いのみで自分なりのアレンジを入れて作りました。例えばBTCの現在価格がジャスト400万円だったとし、395万円で最初に手動で買い指値を入れておきます。価格が395万円になれば買い指値が実行されて、自動で新規売りが400万円で入ります。その後また価格が400万に戻った時に売りが決済されて395万で新規買い指値が自動で入ります。仮に300万円までの間で5万円間隔で買い指値注文を20本ほど事前に手動で入れていれば、300万円から400万円をウロチョロしている間は自動で延々と売買をしてくれるプログラムです。

ループ処理の中だけ以下にソース載せます。取引所はビットバンクで、ccxtというPythonのモジュールを使っています。

while True:
    #①まず注文一覧を取得
    order = bbk.fetch_open_orders(symbol=SYMBOL)

    buy_new = defaultdict(dict)
    sell_new = defaultdict(dict)

    #②現在の買い注文と売り注文のそれぞれの注文ID、金額、および数量を変数にセット
    for i in range(len(order)):
        if order[i]['info']['side'] == 'buy':
            buy_new[order[i]['info']['order_id']]['price'] = order[i]['info']['price']
            buy_new[order[i]['info']['order_id']]['amount'] = order[i]['info']['start_amount']
        
        elif order[i]['info']['side'] == 'sell':
            sell_new[order[i]['info']['order_id']]['price'] = order[i]['info']['price']
            sell_new[order[i]['info']['order_id']]['amount'] = order[i]['info']['start_amount']

    #③買い決済発生時(新規売り処理)
    if buy_or_sell == 'buy':
        #④前回の買い注文がセットされていない時はスルー(起動1回目のループ)
        if buy_old != null:
            #⑤注文idが前回買い注文にあって今回買い注文にない場合は、買いが決済されたので5万円の利幅で買い金額と同量の新規売りを入れる
            for key_old in buy_old.keys():
                if key_old not in buy_new:
                    status_str = bbk.fetch_order(key_old, symbol=SYMBOL)['info']['status']
                    if status_str == 'FULLY_FILLED':
                        amount = buy_old[key_old]['amount']
                        price = int(buy_old[key_old]['price']) + 50000
                        sell_order = bbk.create_limit_sell_order(SYMBOL, amount, price, PARAMS)

        #⑥今回注文を前回注文の変数にセット
        buy_old = buy_new
        #⑦売り買いのターン切り替え
        buy_or_sell = 'sell'

    #⑧売り決済発生時(新規買い処理)
    elif buy_or_sell == 'sell':
        上の処理の逆で、売り注文が決済されれば5万円の下の価格で新規買い注文を入れる

    #⑨5秒待ち
    time.sleep(5)

運用の結果は・・・

Remaining : 152 characters / 0 images
100

Sign up / Continue after login

Related stories

Writer

Share

Popular stories

Windows 10でstream-lnd-htlcsを実行する

45

Python + ngrokでLN決済APIサーバの構築

30