python FX シストレ③AIモデルの作成から

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関係

ストラテジの改変