60 AIモデルの作成
61 買いを入れる
62 売りを入れる
63 トレードを実行する
64 アルゴリズムによるトレードの実装
65 バックテストで自動トレードをテストしてみる
66 自動トレードをする。
一通り終わった、しかしよくよく見返してみると61がうまくいってない。
62もうまくない。
61のエラー
action=send_order error=timeout
Traceback (most recent call last):
File "C:/Users/user/Desktop/bitcoin_python/original/pyfxtrading/61/main.py", line 29, in <module>
ai.buy(candle)
File "C:\Users\user\Desktop\bitcoin_python\original\pyfxtrading\61\app\controllers\ai.py", line 83, in buy
trade = self.API.send_order(order)
File "C:\Users\user\Desktop\bitcoin_python\original\pyfxtrading\61\oanda\oanda.py", line 184, in send_order
raise OrderTimeoutError
oanda.oanda.OrderTimeoutError
fxdata.sqlにデータを取り込んだ後、実行すると出る。
どうやら1ドル100円換算で
use_percent = 0.9→0.009にしてあげないといけない。
62では61の買い注文が入った状態で実行しなくてはならないため
# ai.buy(candle)
を追加して買いを入れた。
636465バックテストeventサイン出るのを確認。
66自動トレードをしてみる。OK?
67コードの改善点
ai.py __init__
self.optimized_trade_params = Noneのとき
self.update_optimize_params(False)をしてデータをため込んでからトレード実行
streamdata.py
stream = StreamData()
グローバルに宣言しているが、シングルトンなどつかってスレッド情報と並列にコマンドを実行。スレッドセーフ。
candle.py
データをどんどん書き込んでいるがデータベースが膨れ上がるので、古いデータは削除する。
dfcandle.py
def optimize_params(self):
で5つの処理を行っているが、並列処理してもいいかも。
ema_performance, ema_period_1, ema_period_2 = self.optimize_ema()
bb_performance, bb_n, bb_k = self.optimize_bb()
ichimoku_performance = self.optimize_ichimoku()
rsi_performance, rsi_period, rsi_buy_thread, rsi_sell_thread = self.optimize_rsi()
macd_performance, macd_fast_period, macd_slow_period, macd_signal_period = self.optimize_macd()
oanda.py
今回オアンダAPIを使ったが、他社APIを使ってもOKです。
requirements.txt
Flaskでなくてジャンゴとかでもいい。
webログインサインアップ機能。プラグインも豊富。
SQLAlchemyを使ったが、ジャンゴにはORマッパーなどが付属している。
データベースのハンドル。
chart.html
jqueryを使ったがリアクトとかjavascriptとか他のフレームワーク
settings.ini
パラメータいじるのもOK
dfcandle.py
optymize_params関係
ストラテジの改変