Basic Usage with TELNET

MTsocketAPI opens two TCP ports by default:

  • TCP 77 (Commands): This port can be used for send commands and receive MTsocketAPI replies.
  • TCP 78 (Data): This port can be used to stream tick or OHLC prices for the selected Timeframe.

Note: You can connect multiple clients to TCP 78 (data) port.

You can use any tool, script or application to start sending commands. For example:

  • Telnet command
  • PuTTY or any other telnet tool
  • Java
  • .NET Core / .NET Framework / PowerShell
  • Python
  • C / C++
  • NodeJS
  • R
  • Any software that can use sockets (TCP)

First steps:

You can connect to default port TCP/77 to start sending queries to MTsocketAPI using TELNET:

telnet localhost 77

Then paste the following code:

{"MSG": "HELP"}

And finally hit Enter and you will get a list of available commands:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
{"MSG":"HELP"}
{"MSG":"HELP","AVAILABLE_COMMANDS":["TRACK_PRICES","TRACK_OHLC","CUSTOM_INDICATOR","MA_INDICATOR","ATR_INDICATOR","SYMBOL_INFO","SYMBOL_LIST","TERMINAL_INFO","ACCOUNT_STATUS","QUOTE","ORDER_SEND","ORDER_MODIFY","ORDER_CLOSE","OPENED_POSITIONS","TRADE_HISTORY","EXIT"],"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}

If you want to get more information about each command:

{"MSG": "HELP","COMMAND":"QUOTE"}

Reply:

{
    "MSG":"HELP",
    "COMMAND":"QUOTE",
    "DESCRIPTION":"Get Quote from a SYMBOL",
    "MANDATORY_TAGS":["SYMBOL (String)"],
    "OPTIONAL_TAGS":[null],
    "ERROR_ID":0,
    "ERROR_DESCRIPTION":"no error"
}

We can see that the command QUOTE has a mandatory tag named SYMBOL and this tag accepts strings only.

Let’s see and example:

Example 1: Get Price

If we want to view the current EUR/USD price:

{"MSG": "QUOTE", "SYMBOL": "EURUSD" }

Important: Please check with your broker that the symbol name exists. Some brokers use EURUSD, EURUSD.fx, EUR/USD… You can see the symbols names using SYMBOL_LIST command.

Reply:

{
    "MSG":"QUOTE",
    "SYMBOL":"EURUSD",
    "ASK":1.09047,
    "BID":1.09045,
    "FLAGS":6,
    "TIME":"2022.04.11 12:15:31.0",
    "VOLUME":0,
    "ERROR_ID":0,
    "ERROR_DESCRIPTION":"no error"
}

Note: You can also subscribe to one or more symbols and MTsocketAPI will start streaming tick or OHLC data over the port TCP78 (data). To stream tick data use TRACK_PRICES command and to stream OHLC data use TRACK_OHLC command. See the following examples.

Example 2: Send Order

You want to place a 0.01 lots Buy Order (at market) on EURUSD:

{"MSG": "ORDER_SEND", "SYMBOL": "EURUSD", "TYPE":"ORDER_TYPE_BUY", "VOLUME": 0.01}

Reply:

{
    "MSG":"ORDER_SEND",
    "TICKET":47094374,
    "ERROR_ID":0,
    "ERROR_DESCRIPTION":"no error"
}

As you can see you received the ticket number assigned to your order.

Example 3: Close Order

Now if we want to close our newly created order:

{"MSG": "ORDER_CLOSE", "TICKET": 47094374}

And this is the reply:

{
    "MSG":"ORDER_CLOSE",
    "TICKET":47094374,
    "TYPE":"FULLY_CLOSED",
    "ERROR_ID":0,
    "ERROR_DESCRIPTION":"no error"
}

Example 4: Get Order History

Finally, let’s check the closed price and profit for this order:

{
    "MSG": "TRADE_HISTORY",
    "FROM_DATE": "2022/04/11 12:26:00",
    "TO_DATE": "2022/04/11 12:31:00"
}

Note: You can use any date format accepted by MT4. More info.

Result:

{
    "MSG":"TRADE_HISTORY",
    "TRADES":[
        {
        "SYMBOL":"EURUSD",
        "MAGIC":0,
        "TICKET":47094374,
        "OPEN_TIME":"2022.04.11 12:26:56",
        "CLOSE_TIME":"2022.04.11 12:30:07",
        "OPEN_PRICE":1.09026,
        "CLOSE_PRICE":1.09006,
        "TYPE":0,
        "LOTS":0.01,
        "STOP_LOSS":0.00000,
        "TAKE_PROFIT":0.00000,
        "SWAP":0.00,
        "COMMISSION":0.00,
        "COMMENT":null,
        "PROFIT":-0.20
        }
    ],
    "ERROR_ID":0,
    "ERROR_DESCRIPTION":"no error"
}

Now we disconnect softly:

{
    "MSG": "EXIT",
}

Result:

Bye

Here you can see the Full API Command List