Skip to content

C# (.Net Core 7)

Warning

Please note that all source codes provided are for testing purposes only. No guarantee or responsibility is provided for their use. Use of these examples is at your own risk.

Basic Examples

Example 1: Get actual EURUSD price from MT4 with C#

using System;
using System.Net.Sockets;

namespace ConsoleApp
{
    internal class Program
    {
        static int bufferLen = 8192;

        static void Main(string[] args)
        {

            TcpClient tcpClient = new TcpClient("127.0.0.1",77);

            Byte[] data = System.Text.Encoding.ASCII.GetBytes("{\"MSG\":\"QUOTE\",\"SYMBOL\":\"EURUSD\"}\r\n");

            NetworkStream stream = tcpClient.GetStream();

            stream.Write(data, 0, data.Length);

            data = new Byte[bufferLen];

            String responseData = String.Empty;

            int bytes = stream.Read(data, 0, data.Length);

            responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

            Console.WriteLine(responseData);

            stream.Close();
            tcpClient.Close();
        }
    }
}

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 with C#

using System;
using System.Net.Sockets;

namespace ConsoleApp
{
    internal class Program
    {
        static int bufferLen = 8192;

        static void Main(string[] args)
        {

            TcpClient tcpClient = new TcpClient("127.0.0.1",77);

            Byte[] data = System.Text.Encoding.ASCII.GetBytes("{\"MSG\":\"ORDER_SEND\",\"SYMBOL\":\"EURUSD\",\"VOLUME\":0.02,\"TYPE\":\"ORDER_TYPE_SELL\"}\r\n");

            NetworkStream stream = tcpClient.GetStream();

            stream.Write(data, 0, data.Length);

            data = new Byte[bufferLen];

            String responseData = String.Empty;

            int bytes = stream.Read(data, 0, data.Length);

            responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

            Console.WriteLine(responseData);

            stream.Close();
            tcpClient.Close();
        }
    }
}

Result:

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

Example 3: Stream actual EURUSD price from MT4 with C#

using System;
using System.Net.Sockets;

namespace ConsoleApp
{
    internal class Program
    {
        static int bufferLen = 8192;

        static void Main(string[] args)
        {

            TcpClient tcpClient_cmd = new TcpClient("127.0.0.1", 77);
            TcpClient tcpClient_data = new TcpClient("127.0.0.1", 78);

            Byte[] data = System.Text.Encoding.ASCII.GetBytes("{\"MSG\":\"TRACK_PRICES\",\"SYMBOLS\":[\"EURUSD\"]}\r\n");

            NetworkStream stream_cmd = tcpClient_cmd.GetStream();
            NetworkStream stream_data = tcpClient_data.GetStream();

            stream_cmd.Write(data, 0, data.Length);

            data = new Byte[bufferLen];

            String responseData = String.Empty;

            int bytes = stream_cmd.Read(data, 0, data.Length);

            responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

            Console.WriteLine(responseData);

            do
            {
                bytes = stream_data.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                Console.WriteLine(responseData);
            } while (true);

            stream_cmd.Close();
            stream_data.Close();

            tcpClient_cmd.Close();
            tcpClient_data.Close();
        }
    }
}

Result:

{"MSG":"TRACK_PRICES","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}

{"TIME":"2022.04.19 11:45:51","SYMBOL":"EURUSD","ASK":1.07878,"BID":1.07876,"VOLUME":32111}
{"TIME":"2022.04.19 11:45:52","SYMBOL":"EURUSD","ASK":1.07878,"BID":1.07877,"VOLUME":32113}
{"TIME":"2022.04.19 11:45:53","SYMBOL":"EURUSD","ASK":1.07878,"BID":1.07876,"VOLUME":32114}
{"TIME":"2022.04.19 11:45:55","SYMBOL":"EURUSD","ASK":1.07876,"BID":1.07874,"VOLUME":32114}
{"TIME":"2022.04.19 11:45:56","SYMBOL":"EURUSD","ASK":1.07875,"BID":1.07872,"VOLUME":32115}
{"TIME":"2022.04.19 11:45:57","SYMBOL":"EURUSD","ASK":1.07875,"BID":1.07873,"VOLUME":32117}
{"TIME":"2022.04.19 11:46:00","SYMBOL":"EURUSD","ASK":1.07878,"BID":1.07877,"VOLUME":32118}
{"TIME":"2022.04.19 11:46:01","SYMBOL":"EURUSD","ASK":1.07878,"BID":1.07875,"VOLUME":32119}
{"TIME":"2022.04.19 11:46:01","SYMBOL":"EURUSD","ASK":1.07877,"BID":1.07874,"VOLUME":32120}
{"TIME":"2022.04.19 11:46:02","SYMBOL":"EURUSD","ASK":1.07875,"BID":1.07873,"VOLUME":32121}
{"TIME":"2022.04.19 11:46:03","SYMBOL":"EURUSD","ASK":1.07876,"BID":1.07873,"VOLUME":32121}

Advanced Examples

Example 1: Get actual EURUSD price from MT4 (using JSON library) with C#

using System;
using System.Net.Sockets;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleApp
{
    internal class Program
    {
        static int bufferLen = 8192;

        static void Main(string[] args)
        {

            TcpClient tcpClient = new TcpClient("127.0.0.1", 77);

            JObject jo = new JObject();
            jo["MSG"] = "QUOTE";
            jo["SYMBOL"] = "EURUSD";

            Byte[] data = System.Text.Encoding.ASCII.GetBytes(jo.ToString(Formatting.None) + "\r\n");

            NetworkStream stream = tcpClient.GetStream();

            stream.Write(data, 0, data.Length);

            data = new Byte[bufferLen];

            String responseData = String.Empty;

            int bytes = stream.Read(data, 0, data.Length);

            responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

            JObject jresult = JsonConvert.DeserializeObject<JObject>(responseData);

            Console.WriteLine("Symbol: {0}  Ask: {1}  Bid: {2}  Time: {3}", jresult["SYMBOL"], jresult["ASK"], jresult["BID"], jresult["TIME"]);

            stream.Close();
            tcpClient.Close();
        }
    }
}

Result:

Symbol: EURUSD  Ask: 1.07934  Bid: 1.07931  Time: 2022.04.19 12:02:28.0

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

using System;
using System.Net.Sockets;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleApp
{
    internal class Program
    {
        static int bufferLen = 8192;

        static void Main(string[] args)
        {
            TcpClient tcpClient_cmd = new TcpClient("127.0.0.1", 77);
            TcpClient tcpClient_data = new TcpClient("127.0.0.1", 78);

            JObject jObj = new JObject();
            jObj["MSG"] = "TRACK_OHLC";

            JArray ja = new JArray();

            JObject jo = new JObject();
            jo["SYMBOL"] = "EURUSD";
            jo["TIMEFRAME"] = "PERIOD_M1";
            jo["DEPTH"] = 1;
            ja.Add(jo);

            jObj["OHLC"] = ja;

            Byte[] data = System.Text.Encoding.ASCII.GetBytes(jObj.ToString(Formatting.None) + "\r\n");

            NetworkStream stream_cmd = tcpClient_cmd.GetStream();
            NetworkStream stream_data = tcpClient_data.GetStream();

            stream_cmd.Write(data, 0, data.Length);

            data = new Byte[bufferLen];

            String responseData = String.Empty;

            int bytes = stream_cmd.Read(data, 0, data.Length);

            responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

            Console.WriteLine(responseData);

            do
            {
                bytes = stream_data.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                JObject jresult = JsonConvert.DeserializeObject<JObject>(responseData);
                Console.WriteLine("Time: {0}  Symbol: {1}  Open: {2}  Close: {3}  High: {4}  Low: {5}", jresult["OHLC"][0]["TIME"], jresult["SYMBOL"], jresult["OHLC"][0]["OPEN"], jresult["OHLC"][0]["CLOSE"], jresult["OHLC"][0]["HIGH"], jresult["OHLC"][0]["LOW"]);
            } while (true);

            stream_cmd.Close();
            stream_data.Close();

            tcpClient_cmd.Close();
            tcpClient_data.Close();
        }
    }
}

Result:

{"MSG":"TRACK_OHLC","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"no error"}

Time: 2022.04.19 12:15:00  Symbol: EURUSD  Open: 1.07865  Close: 1.07854  High: 1.07867  Low: 1.07854
Time: 2022.04.19 12:16:00  Symbol: EURUSD  Open: 1.07855  Close: 1.07874  High: 1.07879  Low: 1.07855
Time: 2022.04.19 12:17:00  Symbol: EURUSD  Open: 1.07880  Close: 1.07867  High: 1.07881  Low: 1.07860
Time: 2022.04.19 12:18:00  Symbol: EURUSD  Open: 1.07869  Close: 1.07870  High: 1.07872  Low: 1.07859
Time: 2022.04.19 12:19:00  Symbol: EURUSD  Open: 1.07871  Close: 1.07868  High: 1.07872  Low: 1.07868
Time: 2022.04.19 12:20:00  Symbol: EURUSD  Open: 1.07867  Close: 1.07877  High: 1.07878  Low: 1.07867
Time: 2022.04.19 12:21:00  Symbol: EURUSD  Open: 1.07878  Close: 1.07883  High: 1.07884  Low: 1.07869

Example 3: Export Trade History from MT4 to a CSV file with C#

using System;
using System.Net.Sockets;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleApp
{
    internal class Program
    {
        static int bufferLen = 8192;

        static void Main(string[] args)
        {
            TcpClient tcpClient = new TcpClient("127.0.0.1", 77);

            JObject jo = new JObject();
            jo["MSG"] = "TRADE_HISTORY";
            jo["FROM_DATE"] = "2022/04/12 13:00:00";
            jo["TO_DATE"] = "2022/04/15 13:00:00";

            Byte[] data = System.Text.Encoding.ASCII.GetBytes(jo.ToString(Formatting.None) + "\r\n");

            NetworkStream stream = tcpClient.GetStream();

            stream.Write(data, 0, data.Length);

            data = new Byte[bufferLen];

            String responseData = String.Empty;

            int bytes = stream.Read(data, 0, data.Length);

            responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

            JObject jresult = JsonConvert.DeserializeObject<JObject>(responseData);

            System.IO.File.AppendAllText("tradeHistory.csv", "OPEN_TIME,CLOSE_TIME,TICKET,SYMBOL,MAGIC,OPEN_PRICE,CLOSE_PRICE,TYPE,LOTS,STOP_LOSS,TAKE_PROFIT,SWAP,COMMISSION,COMMENT,PROFIT" + Environment.NewLine);

            foreach (var item in jresult["TRADES"])
            {
                System.IO.File.AppendAllText("tradeHistory.csv", 
                    item["OPEN_TIME"].ToString() + "," +
                    item["CLOSE_TIME"].ToString() + "," +
                    item["TICKET"].ToString() + "," +
                    item["SYMBOL"].ToString() + "," +
                    item["MAGIC"].ToString() + "," +
                    item["PRICE_OPEN"].ToString() + "," +
                    item["PRICE_CLOSE"].ToString() + "," +
                    item["TYPE"].ToString() + "," +
                    item["LOTS"].ToString() + "," +
                    item["STOP_LOSS"].ToString() + "," +
                    item["TAKE_PROFIT"].ToString() + "," +
                    item["SWAP"].ToString() + "," +
                    item["COMMISSION"].ToString() + "," +
                    item["COMMENT"].ToString() + "," +
                    item["PROFIT"].ToString() +
                    Environment.NewLine);
            }

            Console.WriteLine("Finished!");

            stream.Close();
            tcpClient.Close();
        }
    }
}

Result:

Finished!

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,7103675,EURUSD,0,1.08424,1.08268,BUY,0.02,0,0,0,0,,-3.12
2022.04.13 09:14:18,2022.04.13 13:11:26,7103114,EURUSD,0,1.08342,1.0827,BUY,0.02,0,0,0,0,,-1.44
2022.04.13 07:52:48,2022.04.13 08:00:26,7102744,GBPUSD,0,1.29926,1.29862,SELL,0.02,0,0,0,0,,1.28
2022.04.12 13:26:59,2022.04.13 08:00:25,7099159,EURUSD,0,1.08522,1.08236,SELL,0.01,0,0,0,0,from #47099158,2.86
2022.04.12 13:26:59,2022.04.12 13:27:15,7099158,EURUSD,0,1.08522,1.08524,SELL,0.01,0,0,0,0,to #47099159,-0.02
2022.04.12 13:24:31,2022.04.12 13:26:58,7099144,EURUSD,0,1.08547,1.08523,SELL,0.01,0,0,0,0,from #47099143,0.24
2022.04.12 13:24:31,2022.04.12 13:24:55,7099143,EURUSD,0,1.08547,1.08559,SELL,0.01,0,0,0,0,to #47099144,-0.12
2022.04.12 13:23:10,2022.04.12 13:24:30,7099140,EURUSD,0,1.08556,1.08549,SELL,0.01,0,0,0,0,from #47099139,0.07
2022.04.12 13:23:10,2022.04.12 13:23:27,7099139,EURUSD,0,1.08556,1.08561,SELL,0.01,0,0,0,0,to #47099140,-0.05
2022.04.12 13:21:07,2022.04.12 13:21:21,7099135,EURUSD,0,1.0859,1.08582,BUY,0.02,0,0,0,0,,-0.16
2022.04.12 12:12:43,2022.04.12 19:38:00,7098889,EURUSD,0,1.07,1.08273,BUY LIMIT,0.02,1.0021,0,0,0,expiration [2022.04.12 19:38],0
2022.04.12 12:01:37,2022.04.12 13:18:42,7098870,EURUSD,0,1.08678,1.08562,BUY,0.01,0,0,0,0,,-1.16


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