Java

WARNING: All these source codes are only examples used for testing. We don’t provide any guarantee or responsibility about it. Use these examples at your own risk.

Basic Examples for MT4 (for MT5 click here)

Example 1: Get actual EURUSD price from MT4 using Java

getQuote.java

import java.net.*;
import java.io.*;
/**
 *
 *  $ javac getQuote.java (Compile)
 *  $ java getQuote (Run)
 *
 **/
class getQuote
{
    public static void main(String[] args)
    {
           try
           {
                Socket socket = new Socket("localhost", 77);

                OutputStream output = socket.getOutputStream();
                InputStream input = socket.getInputStream();

                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));

                String jsonString;

                writer.write("{\"MSG\":\"QUOTE\",\"SYMBOL\":\"EURUSD\"}\r\n");
                writer.flush();

                jsonString = reader.readLine();
                System.out.println(jsonString);

           }
           catch (UnknownHostException ex) {
                System.out.println("Server not found: " + ex.getMessage());
           }
           catch (IOException ex) {
                System.out.println("I/O error: " + ex.getMessage());
           }
        }
}

Result:

{
   "MSG":"QUOTE",
   "SYMBOL":"EURUSD",
   "ASK":1.08263,
   "BID":1.08261,
   "FLAGS":6,
   "TIME":"2022.04.13 12:01:48.0",
   "VOLUME":0,
   "ERROR_ID":0,
   "ERROR_DESCRIPTION":"no error"
}

Example 2: Send Order to MT4 using Java

sendOrder.java

import java.net.*;
import java.io.*;
/**
 *  $ javac sendOrder.java (Compile)
 *  $ java sendOrder (Run)
 *
 *     */
class sendOrder
{
    public static void main(String[] args)
    {
           try
           {
                Socket socket = new Socket("localhost", 77);

                OutputStream output = socket.getOutputStream();
                InputStream input = socket.getInputStream();

                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));

                String jsonString;

                writer.write("{\"MSG\":\"ORDER_SEND\",\"SYMBOL\":\"EURUSD\",\"VOLUME\":0.02,\"TYPE\":\"ORDER_TYPE_BUY\"}\r\n");
                writer.flush();

                jsonString = reader.readLine();
                System.out.println(jsonString);

           }
           catch (UnknownHostException ex) {
                System.out.println("Server not found: " + ex.getMessage());
           }
           catch (IOException ex) {
                System.out.println("I/O error: " + ex.getMessage());
           }
        }
}

Result:

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

Example 3: Stream actual EURUSD price from MT4 using Java

streamPrices.java

import java.net.*;
import java.io.*;
/**
 *  $ javac streamPrices.java (Compile)
 *  $ java streamPrices (Run)
  **/
class streamPrices
{
    public static void main(String[] args)
    {
           try
           {
                Socket socket_cmd = new Socket("localhost", 77);
                Socket socket_data = new Socket("localhost", 78);

                OutputStream output_cmd = socket_cmd.getOutputStream();
                InputStream input_cmd = socket_cmd.getInputStream();

                InputStream input_data = socket_data.getInputStream();

                BufferedReader reader_cmd = new BufferedReader(new InputStreamReader(input_cmd));
                BufferedReader reader_data = new BufferedReader(new InputStreamReader(input_data));

                BufferedWriter writer_cmd = new BufferedWriter(new OutputStreamWriter(output_cmd));

                String jsonString;

                writer_cmd.write("{\"MSG\":\"TRACK_PRICES\",\"SYMBOLS\":[\"EURUSD\"]}\r\n");
                writer_cmd.flush();

                jsonString = reader_cmd.readLine();
                System.out.println(jsonString);

                while ((jsonString = reader_data.readLine()) != null) {
                        System.out.println(jsonString);
                }
           }
           catch (UnknownHostException ex) {
                System.out.println("Server not found: " + ex.getMessage());
           }
           catch (IOException ex) {
                System.out.println("I/O error: " + ex.getMessage());
           }
        }
}

Result:

{"MSG":"TRACK_PRICES","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}
{"TIME":"2022.04.18 12:28:31","SYMBOL":"EURUSD","ASK":1.08088,"BID":1.08085,"VOLUME":24073}
{"TIME":"2022.04.18 12:28:36","SYMBOL":"EURUSD","ASK":1.08088,"BID":1.08084,"VOLUME":24073}
{"TIME":"2022.04.18 12:28:37","SYMBOL":"EURUSD","ASK":1.08087,"BID":1.08083,"VOLUME":24075}
{"TIME":"2022.04.18 12:28:43","SYMBOL":"EURUSD","ASK":1.08087,"BID":1.08084,"VOLUME":24076}
{"TIME":"2022.04.18 12:28:44","SYMBOL":"EURUSD","ASK":1.08088,"BID":1.08084,"VOLUME":24076}
{"TIME":"2022.04.18 12:28:45","SYMBOL":"EURUSD","ASK":1.08087,"BID":1.08084,"VOLUME":24078}

Advanced Examples

Example 1: Get actual EURUSD price from MT4 (using JSON library) using Java

getQuoteJSON.java

import java.net.*;
import java.io.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
 *  $ javac -cp .:json-simple-1.1.1.jar getQuoteJSON.java (Compile)
 *  $ java -cp .:json-simple-1.1.1.jar getQuoteJSON (Run)
 * */
class getQuoteJSON
{
    public static void main(String[] args)
    {
           try
           {
                Socket socket = new Socket("localhost", 77);

                OutputStream output = socket.getOutputStream();
                InputStream input = socket.getInputStream();

                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));

                String jsonString;
                JSONObject jo = new JSONObject();
                
                jo.put("MSG","QUOTE");
                jo.put("SYMBOL","EURUSD");

                writer.write(jo.toString() + "\r\n");
                writer.flush();

                jsonString = reader.readLine();

                JSONParser parser = new JSONParser();
                JSONObject json = (JSONObject) parser.parse(jsonString);

                System.out.println("Time: " + json.get("TIME") + " Symbol: " + json.get("SYMBOL") + " Ask: " + json.get("ASK"));
           }
           catch(ParseException pe) {
               System.out.println("position: " + pe.getPosition());
               System.out.println(pe);
           }
           catch (UnknownHostException ex) {
                System.out.println("Server not found: " + ex.getMessage());
           }
           catch (IOException ex) {
                System.out.println("I/O error: " + ex.getMessage());
           }
        }
}

Result:

Time: 2022.04.18 12:45:03.0 Symbol: EURUSD Ask: 1.08068

Example 2: Stream OHLC data from MT4 (using JSON library) with Java

getStreamJSON.java

import java.net.*;
import java.io.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
 *  $ javac -cp .:json-simple-1.1.1.jar getStreamJSON.java (Compile)
 *  $ java -cp .:json-simple-1.1.1.jar getStreamJSON (Run)
 * */
class getStreamJSON
{
    public static void main(String[] args)
    {
           try
           {
                Socket socket_cmd = new Socket("localhost", 77);
                Socket socket_data = new Socket("localhost", 78);

                OutputStream output_cmd = socket_cmd.getOutputStream();
                InputStream input_cmd = socket_cmd.getInputStream();

                InputStream input_data = socket_data.getInputStream();

                BufferedReader reader_cmd = new BufferedReader(new InputStreamReader(input_cmd));
                BufferedReader reader_data = new BufferedReader(new InputStreamReader(input_data));
                BufferedWriter writer_cmd = new BufferedWriter(new OutputStreamWriter(output_cmd));

                JSONArray  ja = new JSONArray();
                JSONObject jj = new JSONObject();
                jj.put("SYMBOL","EURUSD");
                jj.put("TIMEFRAME","PERIOD_M1")
                jj.put("DEPTH",1)
                ja.add(jj);

                JSONObject jo = new JSONObject();

                jo.put("MSG","TRACK_OHLC");
                jo.put("OHLC",ja);

                //System.out.println(jo.toString());
                writer_cmd.write(jo.toString() + "\r\n");
                writer_cmd.flush();

                String jsonString;

                while ((jsonString = reader_data.readLine()) != null) {
                        //System.out.println(jsonString);
                        JSONParser parser = new JSONParser();
                        JSONObject json = (JSONObject) parser.parse(jsonString);
                        JSONArray jarr= (JSONArray)json.get("OHLC");
                        JSONObject jelem= (JSONObject)jarr.get(0);
                        System.out.println("Time: " + jelem.get("TIME") + " Symbol: " + json.get("SYMBOL") + " Open: " + jelem.get("OPEN") + " Close: " + jelem.get("CLOSE") + " High: " + jelem.get("HIGH") + " Low: " + jelem.get("LOW"));
                }
           }
           catch(ParseException pe) {
               System.out.println("position: " + pe.getPosition());
               System.out.println(pe);
           }
           catch (UnknownHostException ex) {
                System.out.println("Server not found: " + ex.getMessage());
           }
           catch (IOException ex) {
                System.out.println("I/O error: " + ex.getMessage());
           }
        }
}

Result:

Time: 2022.04.18 13:24:00 Symbol: EURUSD Open: 1.08060 Close: 1.08050 High: 1.08061 Low: 1.08043
Time: 2022.04.18 13:25:00 Symbol: EURUSD Open: 1.08049 Close: 1.08053 High: 1.08061 Low: 1.08049
Time: 2022.04.18 13:26:00 Symbol: EURUSD Open: 1.08052 Close: 1.08059 High: 1.08059 Low: 1.08050

Example 3: Export Trade History from MT4 to a CSV file using Java

getHistory.java

import java.net.*;
import java.io.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
 *  $ javac -cp .:json-simple-1.1.1.jar getHistory.java (Compile)
 *  $ java -cp .:json-simple-1.1.1.jar getHistory (Run)
 * */
class getHistory
{
    public static void main(String[] args)
    {
           try
           {
                Socket socket = new Socket("localhost", 77);

                OutputStream output = socket.getOutputStream();
                InputStream input = socket.getInputStream();

                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));

                String jsonString;
                JSONObject jo = new JSONObject();
                jo.put("MSG","TRADE_HISTORY");
                jo.put("FROM_DATE","2022/04/13 07:00:00");
                jo.put("TO_DATE","2022/04/15 00:00:00");

                writer.write(jo.toString() + "\r\n");
                writer.flush();

                jsonString = reader.readLine();
                System.out.println(jsonString);

                JSONParser parser = new JSONParser();
                JSONObject json = (JSONObject) parser.parse(jsonString);
                JSONArray jarr= (JSONArray)json.get("TRADES");

                FileWriter myFile = new FileWriter("tradeHistory.csv");

                myFile.write("OPEN_TIME,CLOSE_TIME,TICKET,SYMBOL,MAGIC,OPEN_PRICE,CLOSE_PRICE,TYPE,LOTS,STOP_LOSS,TAKE_PROFIT,SWAP,COMMISSION,COMMENT,PROFIT\r\n");

                for(int i = 0; i < jarr.size(); i++) {
                        JSONObject item = (JSONObject) jarr.get(i);

                        myFile.write(item.get("OPEN_TIME").toString() + "," +
                                item.get("CLOSE_TIME").toString() + "," +
                                item.get("TICKET").toString() + "," +
                                item.get("SYMBOL").toString() + "," +
                                item.get("MAGIC").toString() + "," +
                                item.get("OPEN_PRICE").toString() + "," +
                                item.get("CLOSE_PRICE").toString() + "," +
                                item.get("TYPE").toString() + "," +
                                item.get("LOTS").toString() + "," +
                                item.get("STOP_LOSS").toString() + "," +
                                item.get("TAKE_PROFIT").toString() + "," +
                                item.get("SWAP").toString() + "," +
                                item.get("COMMENT") + "," +
                                item.get("PROFIT").toString() +
                                "\r\n");
                }

                myFile.close();

                System.out.println("tradeHistory.csv created!");

           }
           catch(ParseException pe) {
               System.out.println("position: " + pe.getPosition());
               System.out.println(pe);
           }
           catch (UnknownHostException ex) {
                System.out.println("Server not found: " + ex.getMessage());
           }
           catch (IOException ex) {
                System.out.println("I/O error: " + ex.getMessage());
           }
        }
}

Result:

{
   "MSG":"TRADE_HISTORY",
   "TRADES":[
      {
         "SYMBOL":"EURUSD",
         "MAGIC":0,
         "TICKET":47103675,
         "OPEN_TIME":"2022.04.13 12:30:25",
         "CLOSE_TIME":"2022.04.13 13:11:25",
         "OPEN_PRICE":1.08424,
         "CLOSE_PRICE":1.08268,
         "TYPE":"BUY",
         "LOTS":0.02,
         "STOP_LOSS":0.00000,
         "TAKE_PROFIT":0.00000,
         "SWAP":0.00,
         "COMMISSION":0.00,
         "COMMENT":null,
         "PROFIT":-3.12
      },
      {
         "SYMBOL":"EURUSD",
         "MAGIC":0,
         "TICKET":47103114,
         "OPEN_TIME":"2022.04.13 09:14:18",
         "CLOSE_TIME":"2022.04.13 13:11:26",
         "OPEN_PRICE":1.08342,
         "CLOSE_PRICE":1.08270,
         "TYPE":"BUY",
         "LOTS":0.02,
         "STOP_LOSS":0.00000,
         "TAKE_PROFIT":0.00000,
         "SWAP":0.00,
         "COMMISSION":0.00,
         "COMMENT":null,
         "PROFIT":-1.44
      },
      {
         "SYMBOL":"GBPUSD",
         "MAGIC":0,
         "TICKET":47102744,
         "OPEN_TIME":"2022.04.13 07:52:48",
         "CLOSE_TIME":"2022.04.13 08:00:26",
         "OPEN_PRICE":1.29926,
         "CLOSE_PRICE":1.29862,
         "TYPE":"SELL",
         "LOTS":0.02,
         "STOP_LOSS":0.00000,
         "TAKE_PROFIT":0.00000,
         "SWAP":0.00,
         "COMMISSION":0.00,
         "COMMENT":null,
         "PROFIT":1.28
      },
      {
         "SYMBOL":"EURUSD",
         "MAGIC":0,
         "TICKET":47099159,
         "OPEN_TIME":"2022.04.12 13:26:59",
         "CLOSE_TIME":"2022.04.13 08:00:25",
         "OPEN_PRICE":1.08522,
         "CLOSE_PRICE":1.08236,
         "TYPE":"SELL",
         "LOTS":0.01,
         "STOP_LOSS":0.00000,
         "TAKE_PROFIT":0.00000,
         "SWAP":0.00,
         "COMMISSION":0.00,
         "COMMENT":"from #47099158",
         "PROFIT":2.86
      }
   ],
   "ERROR_ID":0,
   "ERROR_DESCRIPTION":"no error"
}

tradeHistory.csv created!

If we open the tradeHistory.csv:

OPEN_TIME,CLOSE_TIME,TICKET,SYMBOL,MAGIC,OPEN_PRICE,CLOSE_PRICE,TYPE,LOTS,STOP_LOSS,TAKE_PROFIT,SWAP,COMMISSION,COMMENT,PROFIT
2022.04.13 12:30:25,2022.04.13 13:11:25,47103675,EURUSD,0,1.08424,1.08268,BUY,0.02,0.0,0.0,0.0,0.0,null,-3.12
2022.04.13 09:14:18,2022.04.13 13:11:26,47103114,EURUSD,0,1.08342,1.0827,BUY,0.02,0.0,0.0,0.0,0.0,null,-1.44
2022.04.13 07:52:48,2022.04.13 08:00:26,47102744,GBPUSD,0,1.29926,1.29862,SELL,0.02,0.0,0.0,0.0,0.0,null,1.28
2022.04.12 13:26:59,2022.04.13 08:00:25,47099159,EURUSD,0,1.08522,1.08236,SELL,0.01,0.0,0.0,0.0,0.0,from #47099158,2.86

Have you found any bug or error? Please notify us.