先の記事で書いた通り、サーバー構築にAWSがパフォーマンスやコスト面でバランスが取れていて素晴らしいということを書いたが、FXの自動運用ソフトMT4を稼働させるための24時間365日運用に必要なマシンをAWSで作ってみようかと思う。
現在使っているのマシンはさくらのVPSforWindows
現在はさくらのVPS for Windowsを利用している。
こちらを選択した理由はWindowsが利用可能なサーバーでかつ、SSDが標準搭載されているモデルだったからだ。
Windowsマシンの場合ディスクI/Oは、かなり重要だ。
なぜなら、コマンドプロンプトベースで行う作業はかなり少なく、GUIベースであるからであること、かつ、MT4は、かなりディスクをガリガリI/Oするソフトだからだ。
ただ、今の時点であまりマシンにお金をかけられないということもあり、ディスク容量はそれほどいらないがSSDであることを求めた結果メモリが1GB以上積むと利用料が高額になりすぎて、現状では採算が合わない可能性があり、2番目に小さいプランを契約しているが、それだとやはりメモリが小さくてパフォーマンスが満足のいかないモデルになっている。
AWSに移せば満足の行くスペックになるのか?
表面上のスペックについてはそうとは言えない。
費用とスペックを比較したところ、多少AWSに有利な面はあるが、ほとんど変わらないと言ってもいい。
大きな違いは契約・解約の手軽さ
さくらのVPSは、VPS管理専用のコンパネがあり、昔ほど面倒ではないが、とはいえ、結構おっくうになる。
開発を1か月したいから1ヵ月だけ契約なんて言う時に、ちょっと面倒だなと思ってしまう。
その点で言えばAWSは、ワンボタンでマシンを作れるので、運用のマシンと開発用のマシンを分けて使うことができる。
MT4についてはソフトは一定だし、開発用のソフトも、一つインストールするだけだから、開発をやるときだけ契約して終わったらすぐ削除で大丈夫だ。
これであれば、大容量のプランを一時的に契約し、バックテストまで終了したらすく削除すれば低コストで済む。
EA開発はメモリとディスクI/Oとの戦いだ
EA事態を作るのは開発用のソフトやソースを直接いじるにしても、大したマシンスペックは必要ない。
メモ帳が開ける程度で十分なのだが、問題はバックテストだ。
2005~2019年のバックテストを行おうとしたら、ヒストリデータで10GB程度、バックテスト時に発生する一時ファイルで10~20GB 程度、複数の通貨ペアを行おうとしたらこの要領の×複数分が必要だ。
またバックテストを速く走らせるにはCPUより、大量のメモリがあればあるほど早い。また、ディスクI/Oが重要になる。
なので、大容量のSSDとメモリを1次的に利用したいが、これだけのスペックのマシンを調達しようとすると、購入すると何十万で済むかどうか、サーバーレベルのスペックが必要になる。
だから、一時的に使って、終わったら離脱できるクラウドサービスが重宝される。
大きなメモリ、CPUは小さくて良い。SSDで、いじち的にだけ利用可能なスペースで200GBくらい。これが数時間~数日程度で一本のEAができると言ってもいい。
運用用は先述の通り、常設なのでlightsailや、さくらのVPSの様な月額モデルでいいが、開発は時間課金のクラウドサービスだと、寝ているときはOFFにするだけで課金されない利便性がある。逆に、バックテスト期間中だけ、しっかり走ってくれればいい。
そういうことを考えると、AWSなら、時間単位で切ったり付けたりできるメリットはある。
同じ予算でも使っていない時間まで支払う必要がない分、スペックを上げることができる。
マージソフトはメモリ量に依存する
今私が作っているEAはスキャルピングEAで、2005~2019年のバックテスト結果が1万~2万データ程度のトレードが発生する。
トレードはポジション購入とポジション売却で2回発生するので、2~4万程度のデータになる。
そうなると、1つのトレード結果だけで4万行もあるデータを2つも3つも作って統合することになるが、この統合ソフトはメモリ量以上の処理ができないようで、バックテスト結果1つが5GBあったら、8GBメモリでは2つの結果すらマージできないのだ。
そういう意味でも、マージするときだけ大きなメモリを持つマシンを作ってマージするだけでもEA開発の幅が大きく広がる。
そんな意味でもAWSは今後のEA開発で検討に値するのではないだろうか。