こんにちは、たっきん(Twitter)です!
連日暑い日が続いてますね(;´д`)
僕は冷房の効いた部屋で冷た~いアイスを食べながらこのブログを書いています。
さて、OANDA APIとBokehを使ったFXトレードツールっぽいものの作りこみ状況ですが、前回のブログからさらに機能を追加して「テクニカル指標」と指定した日時の「過去チャート」が参照できるようになりました!( ̄▽ ̄)
なので今日は追加した機能を紹介していきたいと思います。
※前回のブログの内容はこちらを参照してください。
追加機能
今回追加した機能は表示モードから選べるようにしてみました。
テクニカル指標
追加したテクニカル指標は「単純移動平均」、「MACD」、「ボリンジャーバンド」の3つになります。
表示モードの選択でテクニカル指標を選ぶと各テクニカル指標の表示有無とパラメータの調整ができるようになります。
各テクニカル指標のパラメータはスライドバーで設定できるようになってます。
単純移動平均 | MACD | ボリンジャーバンド |
---|---|---|
![]() | ![]() | ![]() |
指定した日時の過去チャート参照
表示モードの選択で為替データ取得期間を選ぶと「最新」か「日時指定」のチャートが見れるようになります。
日時指定を選択するとさらに年、月、日などが指定できるようになり、最後に実行ボタンを押すと指定された日時のチャートが表示されます。
動画とソースコード
今回追加した機能はYouTubeにもアップしていますので興味あったら見てみてください!
ソースコードは以下から閲覧できます。
次の予定ですが、チャートの表示機能の作りこみはこのくらいにして、次から過去チャートをつかったテクニカル自動分析的なものを作っていこうかなぁと考えてます。
また何か更新があったらこのブログで随時紹介していきたいと思っています。
まだまだ暑い日が続きますので皆さんも熱中症には気を付けてくださいね!
では!
コメント
たっきんさん
はじめまして、やくといいます。
OANDAのオープンオーダーに興味があってMT4で使っていたのですが、もう少し活用してみたいと思うようになり、検索してみてこちらのBlogに行きつきました。
pythonは以前に活用したいと思って挫折というかそのままにしていた環境(winpython)があり、そちらでたっきんさんのソースを動かしてみています。
https://takilog.com/oandaapi-get-pricingstream/
こちらの記事のソースは動かすことができたのですが、bokeh導入後のものが知識不足でうまく動かせません。
たっきんさんが前提としている環境があれば、教えていただけないでしょうか。
同様な環境を構築してみて、試してみたいと思っています。
よろしくお願いします。
やくさん
どう動かないのか(どのようなエラーメッセージが表示されるのか)等をおしえていただけるとこちらもアドバイスしやすくなります。
僕の環境はwinpythonではなくAnaconda Python(Python3)であるため、環境違いで動作しない可能性も捨てきれません。
前提条件ですが、環境変数Pathに以下のディレクトリを通してます。
確かこのPathを通していないとpythonが実行できなかった記憶があります。
・[Anacondaインストール場所]\Anaconda3\Library\bin
またBokehですが、Bokehサーバー上で実行しましたか?
(Anaconda Promptでmain.pyのあるディレクトリに移動後、以下コマンドを実行するだけです。)
・bokeh serve --show main.py
Bokehサーバーを立ち上げた上で実行しないとBokehアプリケーションの一部が動作しないみたいです。
最後に僕が使っているパッケージのバージョン情報を載せておきますので参考までに。
# Name Version
bokeh 1.2.0
anaconda 2019.07
anaconda-client 1.7.2
anaconda-navigator 1.9.7
anaconda-project 0.8.3
conda 4.7.10
conda-build 3.18.9
conda-env 2.6.0
conda-package-handling 1.3.11
conda-verify 3.4.2
msys2-conda-epoch 20160418
python 3.7.3
pandas 0.24.2
たっきんさん
確認していただき、ありがとうございます。
OandaAPIの関連記事、私にとってはとてもタイムリーな情報で掲載していただいてすごく感謝しています。
Oandaのオープンオーダーのデータを取得することが目標なので、4つ目の記事のコードを勉強してみようかと思っています。
私の環境のWinPythonなのですが、pythonを使ってみようと思った際にUSBメモリに入れて持ち運べるということが気に入って選びました。
その後買った書籍でもanacondaが前提でした。たっきんさんの記事でも紹介されていました。
そちらが良く使われているようなので、その環境に移行することも考えます。
たっきんさんの記事のコードだと、
https://takilog.com/oandaapi-get-pricingstream/
https://takilog.com/oandaapi-draw-candlestick/
https://takilog.com/oandaapi-draw-technical/
https://takilog.com/oandaapi-open-order-position/
この4つの記事の分は、動かすことができました。
こちらの記事の分はうまく動かせません。
【OANDA API】テクニカル指標と過去チャート参照機能を追加したよ!
https://takilog.com/like-trade-tool-002/
長くて恐縮なのですが、実行時のエラーは以下の通りです。
Spyder上での実行結果です。
当初、main.pyを見たところeclipseの方が走って「AttributeError: unexpected attribute 'default_size' to Select,」となっていたので、eclipseが入ってないためかと思っていましたが、
bokeh serve --show main.py をwinpythonのコマンドプロンプト上で実行しても同じ場所で「AttributeError: unexpected attribute 'default_size' to Select,」となりました。ブラウザ上にBekeh Applicationは開いたのですが何も出ません。
--------------
runfile('E:/pySource/takkin-fx-autotrader-develop/main.py', wdir='E:/pySource/takkin-fx-autotrader-develop')
Reloaded modules: bokehlib, bokehlib.bokeh_common, fx, fx.oanda_common, fx.your_account
---------- Debug ----------
Traceback (most recent call last):
File "", line 1, in
runfile('E:/pySource/takkin-fx-autotrader-develop/main.py', wdir='E:/pySource/takkin-fx-autotrader-develop')
File "E:\WPy32\python-3.6.8\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
execfile(filename, namespace)
File "E:\WPy32\python-3.6.8\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "E:/pySource/takkin-fx-autotrader-develop/main.py", line 8, in
vi = _viewer.Viewer()
File "E:\pySource\takkin-fx-autotrader-develop\autotrader\viewer.py", line 107, in __init__
default_size=200)
File "E:\WPy32\python-3.6.8\lib\site-packages\bokeh\model.py", line 261, in __init__
super(Model, self).__init__(**kwargs)
File "E:\WPy32\python-3.6.8\lib\site-packages\bokeh\core\has_props.py", line 253, in __init__
setattr(self, name, value)
File "E:\WPy32\python-3.6.8\lib\site-packages\bokeh\core\has_props.py", line 288, in __setattr__
(name, self.__class__.__name__, text, nice_join(matches)))
AttributeError: unexpected attribute 'default_size' to Select, possible attributes are callback, css_classes, disabled, height, js_event_callbacks, js_property_callbacks, name, options, sizing_mode, subscribed_events, tags, title, value or width
「AttributeError: unexpected attribute 'default_size' to Select」のエラーの意味は「Selectオブジェクトの属性にdefault_sizeが存在しないのにdefault_sizeが指定されています」となります。
なので単純にBokehパッケージのバージョンが古いだけのような気がします。
ちなみに、僕が使っているbokehバージョン 1.2.0 だとwidget.pyモジュールのWidgetクラスにちゃんとdefault_sizeが定義されています。
※WidgetクラスはSelectクラスの抽象クラスです。
■widget.py
@abstract
class Widget(LayoutDOM):
''' A base class for all interactive widget types.
'''
orientation = Enum("horizontal", "vertical", help="""
Orient the widget either horizontally (default) or vertically.
Note that not all widgets support vertical orientation.
""")
default_size = Int(default=300, help="""
The default size (width or height) in the dominating dimension.
The dominating dimension is determined by widget orientation.
""")
margin = Override(default=(5, 5, 5, 5))
あとBokehサーバ上で実行する際もmain.py内のeclipseの方が走るのも正常に動かない原因の1つとなります。
上記ログではeclipseの方が呼ばれています。
どうしてもeclipseの方が呼ばれてしまうのなら、main.pyを修正して"Bokehサーバー実行用"の方が走るようにするのがいいと思います。
たっきんさん
前回のコメントで引用したログは、Spyder上で直接実行した際のログでした。
WinPythonからbokeh serve --show main.pyと実行した際には、bokeh用のコードが動いていました。
説明がまずかったようですみません。
要確認はbokehのバージョンということで、状況を確認してupdateしたところ動作するようになりました。bokeh1.3.4になりました。
実は確認した際に、PCにはminiconda2をインストールしていてPath上そちらが優先されていたことがわかり、そこにもすごく古いbokehが入っていました。それが良くなかったのかもしれません。
いずれにせよ動作するようになったので、コードを参考にさせていただいてpythonとOandaAPIを自分でも使えるように理解していきたいと思います。
いろいろ教えていただき、ありがとうございました。
今後ともよろしくお願いします。
やく
このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシーと利用規約が適用されます。