Wizard In The Market
システムトレードの魔術師

*

Wine 上の MT4から ZeroMQ を使って Linux の pyzmq の通信をさせる

公開日: : 最終更新日:2019/04/09 Python , , ,

こんにちは。キリンです。

最近、年に数度の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ができない。ネットワーク関連のデバッグつらいです。

コードとか。

fx-kirin/mql4-zmq-test
はてブ数
Test zmq on MT4 with MT4 Build 419. Contribute to fx-kirin/mql4-zmq-test development by creating an account on GitHub.

ここにおいておきます。

mql4zmq.mq4 が基本的なPUBSUB用です。

にほんブログ村 為替ブログへ 
Fx-Kirin

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年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 68 follow us in feedly

関連記事

話題のクローラー・スクレイピング!PythonならScrapyが超優秀な件

Rubyの読書会に行ったら、Pythonの面白いお話を聞けたというお話です。 Rubyクローラー本の読書会に参

記事を読む

Python 2, Python 3 で string を bytes に変換する。

共通の処理系にしておきたかったので、メモ書き。 [bm url="https://python-future.or

記事を読む

VimでPythonのIDE 環境を一から構築する

追記 これ見ておいたほうがいいかも。 Vimを最強のPython開発環境にする2 - Λlisue's blog

記事を読む

JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法

Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の画像のように、Wid

記事を読む

Python での Log 収集

プロジェクトが大きくなるにつれて、プログラムの不備を見つけるのにログの構成、ログデザインを考えることが重要になってく

記事を読む

Python の超お手軽のネットワーク分散コンピューティングライブラリSCOOP

SCOOPとは ssh とPython の設定を適切にするだけで、簡単にネットワーク間での分散処理が実行できる。

記事を読む

PYPIへの登録を10秒でできるようになる方法

pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリをインストールするこ

記事を読む

Pythonで簡単に画像検出でLinux GUI操作自動化ライブラリを作ったよ

[2015/02/07 追記] [bm url="http://fx-kirin.com/python

記事を読む

numpy の2つ行列で片方にあるものだけを抽出する。

numpy で2つの時間のインデックスをarrayデータとして持っていて、x にはない時間のインデックスがyにはあっ

記事を読む

Flast-Sockets + redis-py で簡単 Websocket サーバー実装

参考にしたサイト Using WebSockets on Heroku with Python | Heroku

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

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でライブラリ

The art of debugging with GDB, DDD, and Eclipse の読書メモ

GDBの勉強がしたくて、下の本を原著で読んでみました。10年前の本だけど全然現役でした。

JupyterでボタンからJavascriptを実行して追加のアウトプットをさせない方法

Javascriptを実行するとアウトプットセルの行が増える これがとても面倒だった。上の

→もっと見る

PAGE TOP ↑