mt4-zmq-bridge
Version:
Node.js and MetaTrader 4 communication bridge with ZeroMQ.
152 lines (98 loc) • 4.83 kB
Markdown
and [MetaTrader 4](https://www.metatrader4.com/) communication bridge with [ZeroMQ](http://zeromq.org/).
This module depends on this [MetaTrader 4 Expert Advisor](https://github.com/bonnevoyager/MetaTrader4-Bridge). Please introduce with it thoroughly before using this module.
```
npm install --save mt4-zmq-bridge
```
```js
const mt4zmqBridge = require('mt4-zmq-bridge');
```
mt4zmqBridge objects contain multiple enum properties and `connect` function.
Please refer to mentioned [MetaTrader 4 Expert Advisor](https://github.com/bonnevoyager/MetaTrader4-Bridge#request) for enum types.
A `function` accepting two arguments:
`reqUrl` URL to REQ server
`pullUrl` URL to PULL server
```js
const zmqBridge = mt4zmqBridge.connect('tcp://127.0.0.1:5555', 'tcp://127.0.0.1:5556');
```
It returns connection bridge object.
A `function` used to send [requests](https://github.com/bonnevoyager/MetaTrader4-Bridge#request) to [MetaTrader 4 Expert Advisor]((https://github.com/bonnevoyager/MetaTrader4-Bridge)).
It accepts any number of arguments. Request messages will be queued and have a timeout of 15 seconds by default. Timeout value can be set with `zmqBridge.setRequestTimeoutValue`.
The first argument is always [request type](https://github.com/bonnevoyager/MetaTrader4-Bridge#request). The rest of the arguments must match with used request type (check [API](https://github.com/bonnevoyager/MetaTrader4-Bridge#api)).
A response can be returned either by a Callback or a Promise. To use Callback response, please provide a function as the last argument. Otherwise, a Promise will be returned.
Successfully returned response is an array (e.g. `[ '110.522000', '110.542000', 'USDJPY' ]`). Error response will return error object (e.g. `Error('Invalid price.')`).
###### Examples
Callback type "USDJPY" rates request:
```js
zmqBridge.request(mt4zmqBridge.REQUEST_RATES, 'USDJPY', (err, res) => {
console.log(res); // [ '110.522000', '110.542000', 'USDJPY' ]
console.log(res[0]); // '110.522000' - market bid
console.log(res[1]); // '110.542000' - market ask
});
```
Promise type "USDJPY" rates request:
```js
zmqBridge.request(mt4zmqBridge.REQUEST_RATES, 'USDJPY')
.then(res => {
console.log(res); // [ '110.522000', '110.542000', 'USDJPY' ]
})
.catch(err => {})
```
[ ](https://github.com/bonnevoyager/MetaTrader4-Bridge#trade-operations) order for 'USDJPY'.
```
zmqBridge.request(
mt4zmqBridge.REQUEST_TRADE_OPEN, // request type
'USDJPY', // market symbol
mt4zmqBridge.OP_BUYLIMIT, // order type
1.2, // volume
105.23, // price
0, // slippage
100.10, // stop loss
110.76, // take profit
'evening trade', // comment
0, // magic number
mt4zmqBridge.UNIT_CONTRACTS // unit type
, (err, res) => {
console.log(res); // [ '140734412' ]
});
```
[ ](https://github.com/bonnevoyager/MetaTrader4-Bridge#api) pending order.
```
zmqBridge.request(mt4zmqBridge.REQUEST_TRADE_DELETE, 140734412).then(res => {
console.log(res); // [ '140734412' ]
});
```
More examples can be found in index.spec.js.
A `function` handling messages from REQ server. It is an empty function by default.
A `function` handling messages from PULL server. It is an empty function by default.
A `bool` telling us whether a request with a specific id is still waiting for the response.
A `bool` telling us whether a connection with REQ server is open or not.
A `bool` telling us whether a connection with PULL server is open or not.
An `object` containing [ZeroMQ REQ connection object](https://github.com/zeromq/zeromq.js/#examples-using-zeromq). Used mostly internally.
An `object` containing [ZeroMQ PULL connection object](https://github.com/zeromq/zeromq.js/#examples-using-zeromq). Used mostly internally.
`function` allowing to set a request timeout in miliseconds. The default request timeout is 15 seconds.
```
zmqBridge.setRequestTimeoutValue(30000);
```
IMPORTANT: Some tests will open real market orders. Work with tests only on demo accounts!
```
npm run test
```
[ ](https://github.com/BonneVoyager/node-mt4-zmq-bridge/blob/master/CHANGELOG.md)
[ ](LICENSE)
Node.js