【Python】mlp_finance で ローソク足チャートを生成する
おはようございます。
今回は、トレードに欠かせないローソク足チャートを描画したいと思います。
Bitflyer から取得できるデータでは単純に4本値をとれないため、Cryptowatch というサービスからデータを取得します。
プログラムは前回のものを流用します。
【Python】Pandas で取得した Ticker を使ってチャートを描画する
スポンサーリンク
パッケージのインストール
ローソク足を描画するために必要となる「matplotlib.finance」ですが、
現在は「mpl_finance」として分離しているようで、しかも PyCharm からパッケージ検索できなかったので pip で手動インストールしました。
地味にはまったぜ。。
PyCharm の Terminal から下記のコマンドを実行します。
1 | python -mpipinstallgit+https://github.com/matplotlib/mpl_finance |
画面の修正
また、一つボタンを追加します。(ついでに前回のボタンキャプションも変えました)
1 2 3 4 5 6 7 8 9 10 | <div class="entry_title"> <div class="pull_left">ティッカー情報</div> <div class="pull_right"> <input type="button"value="価格チャート"onclick="getTicker();" /> <input type="button"value="ローソク足"onclick="getOhlc();" /> <input type="button"value="更新"onclick="sendTicker();" /> <input type="button"value="更新開始"onclick="startTicker();" /> <input type="button"value="更新停止"onclick="stopTicker();" /> </div> </div> |
プログラムの修正
Cryptowatch からデータを取得するメソッドを追加
BfApi.py
クラスのフィールドにURLを追加
1 2 3 4 5 6 7 8 9 10 11 | 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 |
新規メソッド追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | defget_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) returndf defparse_to_unix_time(self,date_time): """ 日時をUNIXタイムスタンプに変換 :param date_time: :return: """ returnint(time.mktime(date_time.timetuple())) |
データ取得処理の追加
BfTool.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | classGetOhlc(RequestHandler): """ OHLC情報を取得 """ definitialize(self): logging.info("GetOhlc [initialize]") defpost(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)formi inrange(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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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"), ) |
起動してみる
無事に表示されました。
まとめ
目標としてはやっぱり自動取引ツールの作成なんですが、なかなか進まないですね。笑
次回は移動平均線でも描きたいと思ってます。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません