FC2ブログ
にほんブログ村 為替ブログ システムトレード 自作EA派へ にほんブログ村 為替ブログ ユーロドルへ

ほったらかしのメタトレードで資産1億円を目指す

今月から楽天のアフェリエイトをやっています。
サイトを経由するだけで、購入金額の1%が懐に入ってきます。
ぜひぜひ、皆様もお試しくださいね。

今月から楽天のアフェリエイトをやっています。
サイトを経由するだけで、購入金額の1%が懐に入ってきます。
ぜひぜひ、皆様もお試しくださいね。

03 | 2021/04 | 05
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

最強EA 9.2

無料ダウンロード

ようやくプログラミングが進みました。

いろいろ、つまずいた点がありましたので報告します。


python側


#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
from zmq import Context, REQ
from flask import Flask, request
import pdb

def mains(msg):
context = Context()
print("Connecting to hello world server...")
socket = context.socket(REQ)
socket.connect("tcp://localhost:5555")
# pdb.set_trace()
for i in range(10):
socket.send(msg)
message = socket.recv()
print("Received reply %s [ %s ]" % (i, message))

def jsonConversion(jsonStr):
data = json.loads(jsonStr)
return data

app = Flask(__name__)

@app.route("/", methods=['POST'])
def webhook():
msg = request.get_data()
res = jsonConversion(msg)

res2 = res['webhook_event']['body'].encode()
mains(res2)
return msg

if __name__ == "__main__":
app.run()



metatrade側


#include <Zmq/Zmq.mqh>

void OnStart()
{
string port = "5555";
uchar data[];

Context context("helloworld");
Socket socket(context,ZMQ_REP);
socket.bind(StringFormat("tcp://*:%s" ,port));

while(true)
{
ZmqMsg request;

socket.recv(request);
ArrayResize(data,request.size());
request.getData(data);
string msg = CharArrayToString(data);

Sleep(1000);

csv_out(msg);
// Send reply back to client
socket.send("msg");
}
}
//+------------------------------------------------------------------+

void csv_out(string &msg)
{

Print(msg);
}







python側は、WEBHOOKを受けるサーバー機能と、
MQL4にzeroMQでメッセージを送るクライアント機能
中継サーバーのような恰好になっている。

サーバーは、FLASKというWEBフレームワークを使っている。

FLASKは、ちょうどWEBページのフォルダ構造を
プログラムで書くような格好になっている。

関数定義されている名前には、まったく意味がないことに驚いた。
(スクリプト言語なので、@app.routeの次の行が実行されるのが
約束事のようになっている)

WEBHOOKのメッセージを受け取るには、
requestライブラリにある、get_dataメソッドを使う必要がある。

これはmetatrade側も同様であるが、
ソケットを繋いでも、戻ってくるのは、リクエストオブジェクト自体であり、
メッセージを引き出すには、getDATAメソッドを使う必要がある。

次に、送られるメッセージは文字列では無くて、バイナリデータというものである。
この辺りは、文字列-バイナリ変換しなければならないのである。

PYTHON側で言えば、encode()、decode()のメソッド
Metatrade側で言えば、CharArrayToString()関数となる。

とりあえず、手当たり次第にググったソースを真似して作ったわけだが・・・
このあたり、自分自身もプログラマとしての知識不足を実感する。

参考ソース





関連記事
スポンサーサイト





2019/08/23 05:06|MT4連携TB:0CM:0

管理者にだけ表示を許可する

トラックバックURLはこちら
http://1969681.blog66.fc2.com/tb.php/576-53c10990

motochan

Author:motochan
人に感謝されることをやっていく。誰かに喜ばれること。先に歩いて、道を作っていくこと。喜ばれることを、生きがいにしていく。時代は、後でついてくるもの。自分で感じたことを、自分がやっていく。世の中にないものは、自分で考えていく。理想とするものは、自分が自ら考える。自己の満足が、他人の満足につながる。


詳細はコチラ>>

Copyright(C) 2006 テクニカル講座上級の部屋 All Rights Reserved.
Powered by FC2ブログ. template designed by 遥かなるわらしべ長者への挑戦.