【Python】mlp_finance で ローソク足チャートを生成する

2018年4月24日Python,開発

おはようございます。

今回は、トレードに欠かせないローソク足チャートを描画したいと思います。
Bitflyer から取得できるデータでは単純に4本値をとれないため、Cryptowatch というサービスからデータを取得します。

プログラムは前回のものを流用します。

【Python】Pandas で取得した Ticker を使ってチャートを描画する

スポンサーリンク

パッケージのインストール

ローソク足を描画するために必要となる「matplotlib.finance」ですが、
現在は「mpl_finance」として分離しているようで、しかも PyCharm からパッケージ検索できなかったので pip で手動インストールしました。

地味にはまったぜ。。

PyCharm の Terminal から下記のコマンドを実行します。

python -m pip install git+https://github.com/matplotlib/mpl_finance

画面の修正

また、一つボタンを追加します。(ついでに前回のボタンキャプションも変えました)

    <div class="entry_title">
       <div class="pull_left">ティッカー情報</div>
       <div class="pull_right">
          <input type="button" value="価格チャート" />
          <input type="button" value="ローソク足" />
          <input type="button" value="更新" />
          <input type="button" value="更新開始" />
          <input type="button" value="更新停止" />
       </div>
    </div>

プログラムの修正

Cryptowatch からデータを取得するメソッドを追加

BfApi.py

クラスのフィールドにURLを追加

    def __init__(self, access_key="APIキー", secret_key="シークレットキー"):
        self.access_key = access_key
        self.secret_key = secret_key
        self.api_url = "https://api.bitflyer.jp"
        # Cryptowatchから BTCFX/JPYのデータを取得するURL
        self.ohlc_url = "https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc"
        self.pb_config = PNConfiguration()
        self.pb_config.subscribe_key = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f"
        self.pb_config.ssl = False
        self.pub_nub = PubNubTornado(self.pb_config)
        self.listener = None

新規メソッド追加

def get_ohlc(self, start, end, span=60):

    logging.info(self.parse_to_unix_time(start))
    logging.info(self.parse_to_unix_time(end))

    query = {
        'periods': span,
        'before': self.parse_to_unix_time(end),
        'after': self.parse_to_unix_time(start)
    }

    data = requests.get(self.ohlcc_url, params=query).json()["result"][str(span)]
    df = pandas.DataFrame(data)

    return df

def parse_to_unix_time(self, date_time):
    """
    日時をUNIXタイムスタンプに変換
    :param date_time:
    :return:
    """
    return int(time.mktime(date_time.timetuple()))

データ取得処理の追加

BfTool.py

class GetOhlc(RequestHandler):
    """
    OHLC情報を取得
    """

    def initialize(self):
        logging.info("GetOhlc [initialize]")

    def post(self):
        logging.info("GetOhlc [post]")

        api = BfApi()

        # 過去1時間のデータを取得
        end = datetime.now()
        start = end - timedelta(hours=1)
        df = api.get_ohlc(start=start, end=end, span=60)

        # X軸に表示するための時間配列を生成
        dates = [start + timedelta(minutes=mi) for mi in range(60)]

        # データをまとめる
        data = zip(mdates.date2num(dates), df[1], df[2], df[3], df[4])

        # チャートの描画
        ax = plt.subplot()

        # x軸の単位を指定(15分間隔で表示)
        ax.xaxis.set_major_locator(mdates.MinuteLocator([0, 15, 30, 45]))

        # x軸の表示を指定(時:分)
        ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))

        # mpl_financeのメソッドを仕様(描画幅やチャートの色などを指定。デフォルトは赤黒)
        candlestick_ohlc(ax, data, width=(1/24/60)*0.7, colorup='g', colordown='r')

        # チャート上部のテキスト
        plt.title('BTC / JPY  by Cryptowatch API')

        # チャートをpng形式で保存
        plt.savefig('price.png')

        # チャートを描画
        plt.show()

        logging.info(df)

URLマッピングの追加

BfTool.py

app = tornado.web.Application([
    (r"/", MainHandler),
    (r"/ws", SendWebSocket),
    (r"/balance", GetBalanceHandler),
    (r"/execution", GetExecutionHandler),
    (r"/childOrder", GetChildOrderHandler),
    (r"/sendOrder", SendChildOrderHandler),
    (r"/cancelOrder", CancelChildOrderHandler),
    (r"/sendTicker", SendTicker),
    (r"/startTicker", StartTicker),
    (r"/stopTicker", StopTicker),
    (r"/sendLine", SendLine),
    (r"/getTicker", GetTicker),
    (r"/getOhlc", GetOhlc)
    ],
    template_path=os.path.join(os.getcwd(), "templates"),
    static_path=os.path.join(os.getcwd(), "static"),
    js_path=os.path.join(os.getcwd(), "js"),
)

起動してみる

ローソク足チャート

無事に表示されました。

まとめ

目標としてはやっぱり自動取引ツールの作成なんですが、なかなか進まないですね。笑

次回は移動平均線でも描きたいと思ってます。

ではでは。

スポンサーリンク


関連するコンテンツ

2018年4月24日Python,開発Bitflyer,Python,プログラミング

Posted by doradora