【Python】mlp_finance で ローソク足チャートを生成する
おはようございます。
今回は、トレードに欠かせないローソク足チャートを描画したいと思います。
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"), )
起動してみる
無事に表示されました。
まとめ
目標としてはやっぱり自動取引ツールの作成なんですが、なかなか進まないですね。笑
次回は移動平均線でも描きたいと思ってます。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません