AIシステムトレード開発 RSI_BREAKOUT


5/16  RSI_BREAKOUTのPYTHON版

以下、ブログ掲載記事の転記です。
http://1969681.blog66.fc2.com/blog-entry-611.html

リポジトリ
https://github.com/chanmoto/rsi_breakout

ポイント

あえてポイントだけ書くとすると・・・

MT4→Js/Pythonへの移植に関して

 今回、検討した内容に関しては、特段言及する必要もないが、Pythonを使うことで、ずいぶんとMT4をいじくりまわすよりも、やりやすかった。特にデバッグなどが、慣れたVSCODE+PDBの環境なので、サクサクと進めることができた。

 ざくっとかかった工数を書くが・・・

  • JS : 約3日
  • MT5 : 5日 → 結局、断念した。
  • Python : 約1日

 もちろんではあるが、RSIの計算や移動平均計算は、JSで調べたことを展開しているので、Pythonが一番、早いというわけではない。
しかしながら、JSで苦しんだ配列内のスライスループなど、Pythonならではで、やり易かったのは事実である。
 またチャート表示は、JSのライブラリを探すのに、GITHUBを調べまくったが
直ぐにキャンドルとインジケータが表示できたのも、優れたライブラリ環境のあるPythonならではのものである。

オリジナルコード

   Hi_stack[ll] = ArrayMaximum(RSI, ii[1+ll*2]-ii[0+ll*2]+1, ii[0+ll*2]+1);

移植版

a1 = ii[0 + linel * 2] + 1;
a2 = ii[1 + linel * 2] + 1;
b1 = ii[1 + linel * 2] + 1;
b2 = ii[2 + linel * 2] + 1;

(JS)
     HiStack[linel] = RSI.indexOf(RSI.slice(a1, a2).reduce((a, b) => a > b ? a : b), a1);

(Python)
     HiStack.append(RSI.index(max(RSI[a1:a2])))

JSの場合

リストのスライスの書き方が難しい。
Reduceの後のアロー関数とか・・・ なんでやねんという感じ

PYTHONの場合

そもそもスライスは超簡単・・・
それと、配列でネストしてアウトオブレンジを気にするよりも、
リストでAppendした方が圧倒的に低ストレスのプログラミングが可能
(JSも同じことが出来るのかもしれない。MT4/MT5はダメ言語だ。)

RSI平滑化に関して

これは副二次的なものではあるが、この1週間に調べまくった成果で
RSIのダマシを回避するのに、RSI平滑化を取り入れてみた。

若干ながら線の交錯が少なくなっているように思える。
このような小手先の検討というのは、まだまだ取り組む余地がありそうである。

  • 平滑化前 → RSI計算に、CLOSEを使用

  • 平滑化後 → HI,LOW,CLOSEのRSIで平均化

今後の予定

  • Pythonへの移植が完了したため、今後はAIシステム化を検討する。
  • 現時点では、JSはブログ宣伝用(APIパーツ化して、CSVデータを毎日、ダウンロード更新)
  • MT4 → 最強EAの再稼働 → ただしEAで使えるのは、OANDA東京サーバーのみ

→ 最低単位は0.1ロットからなので、資金が一万しかないので、当面はバーチャル口座でテスト運用のみとする

リポジトリ
https://github.com/chanmoto/chanmoto.github.io/tree/master/rsibreakout