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

*

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

公開日: : Python , , ,

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

最近、年に数度のMQLを書くときがきたのですが、Pythonに慣れまくっていると苦行でしかないですねw昔は毎日のようにMQLばかり書いていた時期があるのが懐かしいです。あのころにPythonの有用性を知っていたら、もっと成長できていなんじゃないかなぁと思ったり。技術ブログばっかり書いていて、珍しく前書きみたいなものを書いているんですが、これにはきっかけがありまして、MT4の検索をしていると昔の自分の記事がたまにヒットして、あの頃はちゃんと頻繁にブログを書いていたなぁと思ったからでして。あの頃は毎日何か書けるネタがないかと探している日々だったのですが、今となっては逆にかけるネタはたくさん思い当たるのにほとんど書かなくなってしまったので、アウトプットをもう少し増やしてもいいかなぁと思っています。ただ、子育てと仕事の上に最近は咳喘息で日々体調が悪いので、かなり難しいのですが。

注意書き

この記事はMT4のBuild419を対象としたものです。2019年にもなってこんな化石みたいに古いMT4を使っているのは私ぐらいしかいないんじゃないかと思う次第ですが、ご了承ください。こういう誰得なんだよって記事のほうが書くことのハードルが下がるんです。最近のMT4のほうが言語の充実などもあり、優秀みたいですね。

ZMQ をMT4で動かす

注書きにあるように、バージョンが古いから情報の検索が難しいんですが、github頼みでなんとかレポジトリがいくつか見つかりました。

多分現行のバージョンで一番良いのがこれですね。最新版の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
  • 66 follow us in feedly

関連記事

Python Mock で オリジナルのインスタンメソッドのを呼びたい時

autospec と sideeffect を組み合わせるのが解決策だった。

記事を読む

Python での Log 収集

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

記事を読む

まだ Python の datetime で消耗しているの? maya 使おうぜ

この記事は Python Advent Calendar 2016 の 24日目の記事です。 当初は SCOOP

記事を読む

no image

stop automatically closeing vim-ipython output with jedi-vim

Even though I commented out the following code in vim_ipytho

記事を読む

Interactive Brokers 証券の Python API を利用する

Interactive Brokers 証券とは 日本には珍しく自動売買プラットフォームが提供されいてる証券会社です。

記事を読む

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

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

記事を読む

Python2 から Python3 へのC Extension の移行

最初に追加 モジュールの初期化と状態情報を書き換える initmyextension 関数などの初期状態の関

記事を読む

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

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

記事を読む

絶対ダメ! マルチスレッドでの共通変数のインクリメント演算

デバッグ中の発見 とあるマルチスレッドプログラムをPythonで書いていた際に遭遇した誤使用です。C/C++等

記事を読む

vim-slime を使って VIM の内容をコンソールに送信

この記事はVim Advent Calendar 2016の20日目の記事です。 選択行の内容をコンソールに送信

記事を読む

Message

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

Adsense

Avoiding the problem of connect to outside of LAN with L2TP/IPSec on Ubuntu 18.04.

とても困って、原因の特定に2日かかった。疲れた。確定申告したいのに。 The IPSEC tu

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

こんにちは。キリンです。 最近、年に数度のMQLを書くときがきたのですが、Pythonに慣れま

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

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

Synology DS216j の MySQL に外部からつなぐ

Synology DS216j をNAS(RAID1 12TB)として使っています。もっぱらデー

VMWare Player をヘッドレスモードで使う。

[bm url="http://www.ryanchapin.com/fv-b-4-713/Ru

→もっと見る

PAGE TOP ↑