Wine 上の MT4から ZeroMQ を使って Linux の pyzmq の通信をさせる
こんにちは。キリンです。
最近、年に数度のMQLを書くときがきたのですが、Pythonに慣れまくっていると苦行でしかないですねw昔は毎日のようにMQLばかり書いていた時期があるのが懐かしいです。あのころにPythonの有用性を知っていたら、もっと成長できていなんじゃないかなぁと思ったり。技術ブログばっかり書いていて、珍しく前書きみたいなものを書いているんですが、これにはきっかけがありまして、MT4の検索をしていると昔の自分の記事がたまにヒットして、あの頃はちゃんと頻繁にブログを書いていたなぁと思ったからでして。あの頃は毎日何か書けるネタがないかと探している日々だったのですが、今となっては逆にかけるネタはたくさん思い当たるのにほとんど書かなくなってしまったので、アウトプットをもう少し増やしてもいいかなぁと思っています。ただ、子育てと仕事の上に最近は咳喘息で日々体調が悪いので、かなり難しいのですが。
注意書き
この記事はMT4のBuild419を対象としたものです。2019年にもなってこんな化石みたいに古いMT4を使っているのは私ぐらいしかいないんじゃないかと思う次第ですが、ご了承ください。こういう誰得なんだよって記事のほうが書くことのハードルが下がるんです。最近のMT4のほうが言語の充実などもあり、優秀みたいですね。
ZMQ をMT4で動かす
注書きにあるように、バージョンが古いから情報の検索が難しいんですが、github頼みでなんとかレポジトリがいくつか見つかりました。
[2019/04/09 追記]
これが現行バージョンでは一番良さそう。
多分現行のバージョンで一番良いのがこれですね。最新版のMT4用にクラスとか使ってしっかり書いてありました。ただ、build419では動かない、もしくは動かすが大変。DLLの呼び出しに構造体とか使ってる時点でアウトです。
これは下に書くmql4zmqを最新バージョンで動かすためにフォークしたプロジェクトっぽい。このプロジェクト曰く、安定版であるZeroMQ 2.2 は現行バージョンでも後方互換されているとのこと。
コミット履歴に2012年のものがある!これだ!とこれをベースに使っていくことにしました。ただ、ZMQのバージョンが2.1.4と少し心もとない。どうやら、OTMql4Zmqで使われているDLLとほとんど一緒みたいだったので、OTMql4Zmqからバージョン2.2のDLLを持ってきて、mql4zmqに上書きしました。
exampleを参考に実装していく。
mql4zmqのexampleを参考に実装していくことになるのですが、そこのexampleがrubyのzmqを使って通信するサンプルしかおいていなく、今のLinuxに入っているrubyだとgem i zmq
してもコンパイルエラーで止まってしまい、そのままでテストができないというつらい状況でした。rubyのzmqのバージョン2.1.4だし。そんなコンパイル環境を現環境に入れたくない。ということで、MQLを書き直してMQL上だけでテストを試みることになるのですが、ここでもまたハマる現象が現れます。
Wine 環境でZMQを使うときにはまること
- Wine側のMQLから一度使ったポートはなかなか開放されない
- どうしても使えない場合は
wineserver -k
をしてwinewerver を殺してください。
- どうしても使えない場合は
- Wine側でPUSHPULL用にバインドしたポートを、ポート開放してからPUBSUB用に使おうとしても動かない
socket を close して terminate してもポートが再バインドできないんですよね。MT4再稼働でもだめで、wineserverの再起動でなんとか直りました。
pyzmqではまったこと。
- pyzmq 17.0.0 は zmq 2.2 とPUBSUB する際、zmq側からSubscribeできない。
- pyzmq 17.1.2を使うと直った。
こいつに一番手こずらされました。PUSHPULLはできるくせにPUBSUBができない。ネットワーク関連のデバッグつらいです。
コードとか。
ここにおいておきます。
mql4zmq.mq4 が基本的なPUBSUB用です。



About Fx-Kirin
2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。
- Web |
- More Posts (410)
Adsense
関連記事
-
-
SQLAlchemy のマイグレーションライブラリ Alembic を使ってみる。
SQLAlchemyの作者が作ったデータベースマイグレーションツール。個人的には、SQLAlchemyは使わないが、
-
-
Python x64 & MinGW64 環境の構築
流石に詰まりまくったのでまとめることにする。 MSYS2 をインストール 個人的にこれからメインで使いたいと思っ
-
-
Interactive Brokers 証券の Python API を利用する
Interactive Brokers 証券とは 日本には珍しく自動売買プラットフォームが提供されいてる証券会社です。
-
-
Call Python/Numpy Function within Metatrader 4
Github Link [bm url="https://github.com/fx-kirin/mt4-nump
-
-
vim-ipythonをWindows 7 x64で使うとR6034 が出る件
個人的なただの忘備録。 Visual Studioのコマンドプロンプトから実行すること。 http://st
-
-
PythonのThreadを待機させるか、必要の度に作成するのかのベンチマーク比較
QueueとThreadのベンチマーク比較 2つのケースについて比較検証してみました。 実際に処理する内
-
-
ctypes で c_char array を c_char_p に変換する
なかなか情報がなかったのでメモ書き。
-
-
Python 2, Python 3 で更新したファイルを調べてreloadするパッケージを作った。
pdbでのデバッグにはreload機能がない IPythonには優秀なautorelaod機能がマジックコマンドで
-
-
Quantopian の pyfolio を単利運用に対応させる。
pyfolio は どんなデータを入れても複利運用として計算してしまうので、人によっては望まない検証方法だったりし
Adsense
NEW ENTRY
-
- Linux Mint 20 での日本語の設定について。
フォントの設定とかはいろいろなところで触れられているので、他にない情報だけ。 TL;DR F
-
- joblib によって謎のバグが起こる
joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消
-
- Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine
My pc was periodically shut down on 7:40 am JS
-
- Ubuntu で仮想ディスプレイを使う
雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c
-
- PYPIへの登録を10秒でできるようになる方法
pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ
Twitter
RSS
カテゴリー
-
人気記事一覧
任意のインジケータのシグナルでアラートやメール機能を追加する 391ビュー
Pythonで簡単自動化!PyAutoGuiが便利すぎて感動したのでご紹介 184ビュー
まだBokehで消耗してるの?これからはPandas-Bokehを使おうぜ 140ビュー
Synology DS216j の MySQL に外部からつなぐ 110ビュー
Ubuntu で仮想ディスプレイを使う 96ビュー
Linux Mint 20 での日本語の設定について。 92ビュー
Add Alert and SendMailの改造 90ビュー