-
Notifications
You must be signed in to change notification settings - Fork 296
/
ZeroMQ_MT4_Python_Template.py
66 lines (48 loc) · 1.78 KB
/
ZeroMQ_MT4_Python_Template.py
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 24 16:48:05 2017
@author: Darwinex Labs (www.darwinex.com)
"""
# IMPORT zmq library
import zmq
# Sample Commands for ZeroMQ MT4 EA
eurusd_buy_order = "TRADE|OPEN|0|EURUSD|0|50|50|Python-to-MT4"
eurusd_sell_order = "TRADE|OPEN|1|EURUSD|0|50|50|Python-to-MT4"
eurusd_closebuy_order = "TRADE|CLOSE|0|EURUSD|0|50|50|Python-to-MT4"
get_rates = "RATES|GBPUSD"
# Sample Function for Client
def zeromq_mt4_ea_client():
# Create ZMQ Context
context = zmq.Context()
# Create REQ Socket
reqSocket = context.socket(zmq.REQ)
reqSocket.connect("tcp://localhost:5555")
# Create PULL Socket
pullSocket = context.socket(zmq.PULL)
pullSocket.connect("tcp://localhost:5556")
# Send RATES command to ZeroMQ MT4 EA
remote_send(reqSocket, get_rates)
# Send BUY EURUSD command to ZeroMQ MT4 EA
# remote_send(reqSocket, eurusd_buy_order)
# Send CLOSE EURUSD command to ZeroMQ MT4 EA. You'll need to append the
# trade's ORDER ID to the end, as below for example:
# remote_send(reqSocket, eurusd_closebuy_order + "|" + "12345678")
# PULL from pullSocket
remote_pull(pullSocket)
# Function to send commands to ZeroMQ MT4 EA
def remote_send(socket, data):
try:
socket.send(data)
msg = socket.recv_string()
print msg
except zmq.Again as e:
print "Waiting for PUSH from MetaTrader 4.."
# Function to retrieve data from ZeroMQ MT4 EA
def remote_pull(socket):
try:
msg = socket.recv(flags=zmq.NOBLOCK)
print msg
except zmq.Again as e:
print "Waiting for PUSH from MetaTrader 4.."
# Run Tests
zeromq_mt4_ea_client()