Bitcoin Auto Trade on BitMEX Part 2

ゴールデンクロスで自動売買するプログラムを探していたら、たまたま見つけた MACD型の自動売買プログラム。

実際に使ってみてチョットよさそうだったのでご紹介します。

投稿日:2019/01/10    カテゴリ:AutoTrade

以前ご紹介した BitMEX 提供の自動売買ソフト(BitMEX sample market maker)、いくつかの欠点があり、運用が 1週間も続きませんでした。

その後も懲りずに自動売買について模索する中で MACDヒストリカル を用いたシンプルなボットを発見。

とりあえず無料なので試してみました。

BitMEX で自動売買を検討している方の参考になれば幸いです。

 

今回ご紹介する無料の自動売買プログラム

BitMEX-simple-trading-robot

  • GitHub(MITライセンス)、 紹介記事 Medium
  • MACD ヒストリカルを用いた自動売買
  • Python3 プログラム

 

自動売買の様子

Windows Serverで稼働中の様子。

味気ないコマンド画面ですが、システムが動いていることは確認できます。

 

自動取引の様子

 

自動売買の運用成績

まだ 12時間しか動かしていないので手探りの部分は多いですが、 以下のように感覚としてはよさそう。

** 画像内の + $5 などは、ポジション取得時からポジション決済時のビットコイン価格差を示すものです。実際の利益とは異なります。

 

このボットのメリット

  • 落ちない、動き続ける
  • 暴落時に強い??
  • 無料
  • シンプルなコード

 

このボットのデメリット

  • 成り行き注文になるので手数料が取られる
  • 私の場合、MACDヒストリカル、、、、がよく分かっていません。。。
  • Windowsサーバーの場合、 C++ の開発環境がないので visual-cpp-build-tools のインストールが必要

 

現在運用中のパラメーターなど

GitHubからダウンロードしただけでは本番環境で利用できません。

現在稼働中のコードを以下に紹介します。

 

【configuration.py】


TEST_EXCHANGE=False
API_KEY="ご自身のBitMEX APIキー"
API_SECRET="ご自身のBitMEX APIシークレットキー"

AMOUNT_MONEY_TO_TRADE=1 #これで $100 分のポジションとる
LEVERAGE=100

TIMEFRAME = '5m' # 本当は 30m をやってみたいが、ちょっと下の設定を変えたぐらいではダメだった

time_to_wait_new_trade = {'1m': 60,
                          '5m': 60*5,
                          '1h': 60*60,
                          '1d': 60*60*24}

 

【main_loop.py】


import bitmex
import time

from configuration import *

from strategy import Strategy
from trader import Trader

client = bitmex.bitmex(
    test=TEST_EXCHANGE,
    api_key=API_KEY,
    api_secret=API_SECRET
)

strategy = Strategy(client, timeframe=TIMEFRAME)
trader = Trader(client, strategy, money_to_trade=AMOUNT_MONEY_TO_TRADE, leverage=LEVERAGE)

while True:
    if round(time.time()) % time_to_wait_new_trade[TIMEFRAME] == 0:
        trader.execute_trade()
        time.sleep(10)

 

【strategy.py】


import talib
import pandas as pd


class Strategy():
    def __init__(self, client, timeframe='5m'):
        self.client = client
        self.timeframe = timeframe

    def predict(self):
        ohlcv_candles = pd.DataFrame(self.client.Trade.Trade_getBucketed(
            binSize=self.timeframe,
            symbol='XBTUSD',
            count=100,
            reverse=True
        ).result()[0])

        ohlcv_candles.set_index(['timestamp'], inplace=True)

        macd, signal, hist = talib.MACD(ohlcv_candles.close.values,
                                        fastperiod=8, slowperiod=28, signalperiod=9)

        # sell
        if hist[-2] > 0 and hist[-1] < 0:
            return -1
        # buy
        elif hist[-2] < 0 and hist[-1] > 0:
            return 1
        # do nothing
        else:
            return 0

 

【trader.py】


class Trader():
    def __init__(self, client, strategy, money_to_trade=100, leverage=5): #leverage=5
        self.client = client
        self.strategy = strategy

        self.money_to_trade = money_to_trade
        self.leverage = leverage

    def execute_trade(self):
        prediction = self.strategy.predict()

        print(f"Last prediction: {prediction}")

        try:
            if prediction == -1:
                response = self.client.Order.Order_new(
                    symbol="XBTUSD",
                    side="Buy", #元 side="Sell",
                    orderQty=self.money_to_trade * self.leverage,
                ).result()
            if prediction == 1:
                response = self.client.Order.Order_new(
                    symbol="XBTUSD",
                    side="Sell", #元 side="Buy"
                    orderQty=self.money_to_trade * self.leverage,
                ).result()
        except Exception:
            print("Something goes wrong!")

        return

 

今後

現在は 5分足で動かしていますのでどうしても だまし値 を拾って、ムダなポジション取りが発生しているように思います。

時間を見ては 30m で運用してみたいですね。

 

 


ハイレバで自動売買を楽しむなら

BitMex


 



コメント

コメント数 0

まだコメントはありません