#5/16 RSI_BREAKOUTのPYTHON版
以下、ブログ掲載記事の転記です。
http://1969681.blog66.fc2.com/blog-entry-611.html
リポジトリ
https://github.com/chanmoto/rsi_breakout
#ポイント
あえてポイントだけ書くとすると・・・
-
チャートは mplfinance を使用。
参考資料:https://saturday-in-the-park.netlify.app/tradingtools/06_plotdailychart/ -
RSIはHI,LO,CLOSEの各RSIの平均値を使用した。
参考資料:https://www.mql5.com/ja/code/21823
#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平滑化を取り入れてみた。
若干ながら線の交錯が少なくなっているように思える。
このような小手先の検討というのは、まだまだ取り組む余地がありそうである。
#今後の予定
- Pythonへの移植が完了したため、今後はAIシステム化を検討する。
- 現時点では、JSはブログ宣伝用(APIパーツ化して、CSVデータを毎日、ダウンロード更新)
- MT4 → 最強EAの再稼働 → ただしEAで使えるのは、OANDA東京サーバーのみ
→ 最低単位は0.1ロットからなので、資金が一万しかないので、当面はバーチャル口座でテスト運用のみとする
リポジトリ
https://github.com/chanmoto/chanmoto.github.io/tree/master/rsibreakout