Skip to content

C# (.Net Core 7)

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.

New MTsocketAPI C# Library

Download Library

Examples using C# Library

Example 1: Get actual EURUSD price from MT5 with new MTsocketAPI C# library:

using MTsocketAPI.MT5;

namespace Test
{
    internal class Program
    {

        static void Main(string[] args)
        {
            try
            {
                Terminal mt5 = new Terminal();
                if (!mt5.Connect())
                {
                    Console.WriteLine("Connect failed. Please check that MTsocketAPI is running");
                    return;
                }

                Quote quote = mt5.GetQuote("EURUSD");

                Console.WriteLine(quote.TIME + " Ask: " + quote.ASK + " Bid: " + quote.BID);

                Console.WriteLine("Finished!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
                return;
            }
        }
    }
}
Reply
2024.02.27 19:08:37.858 Ask: 1.08529 Bid: 1.08527

Example 2: Send Order to MT5 with MTsocketAPI C# library:

using MTsocketAPI.MT5;

namespace Test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Terminal mt5 = new Terminal();
                if (!mt5.Connect())
                {
                    Console.WriteLine("Connect failed. Please check that MTsocketAPI is running");
                    return;
                }

                TradeResult result = mt5.SendOrder("EURUSD", 0.01, OrderType.ORDER_TYPE_BUY);

                if (result.RETCODE == (long)TradeRetCode.TRADE_RETCODE_DONE)
                    Console.WriteLine("Request completed!. Order: " + result.ORDER);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
                return;
            }
        }
    }
}
Reply
Request completed. Order: 145579904

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

using MTsocketAPI.MT5;

namespace Test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {

                Terminal mt5 = new Terminal();
                mt5.OnPrice += Mt5_OnPrice;
                if (!mt5.Connect())
                {
                    Console.WriteLine("Connect failed. Please check that MTsocketAPI is running");
                    return;
                }

                mt5.TrackPrices(new List<string>() { "EURUSD","GBPUSD" });

                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
                return;
            }
        }

        private static void Mt5_OnPrice(object? sender, Quote e)
        {
            Console.WriteLine("Quote: " + e.ToString());
        }
    }
}
Reply
Quote: {"SYMBOL":"GBPUSD","ASK":1.26898,"BID":1.26889,"FLAGS":0,"TIME":"2024.02.27 19:39:09.015","VOLUME":56353}
Quote: {"SYMBOL":"GBPUSD","ASK":1.26898,"BID":1.26889,"FLAGS":0,"TIME":"2024.02.27 19:39:09.015","VOLUME":56353}
Quote: {"SYMBOL":"EURUSD","ASK":1.08539,"BID":1.08534,"FLAGS":0,"TIME":"2024.02.27 19:39:09.343","VOLUME":58261}
Quote: {"SYMBOL":"EURUSD","ASK":1.08538,"BID":1.08534,"FLAGS":0,"TIME":"2024.02.27 19:39:09.598","VOLUME":58261}
Quote: {"SYMBOL":"GBPUSD","ASK":1.26898,"BID":1.26888,"FLAGS":0,"TIME":"2024.02.27 19:39:10.358","VOLUME":56354}
Quote: {"SYMBOL":"EURUSD","ASK":1.08538,"BID":1.08533,"FLAGS":0,"TIME":"2024.02.27 19:39:11.278","VOLUME":58262}
Quote: {"SYMBOL":"GBPUSD","ASK":1.26898,"BID":1.26889,"FLAGS":0,"TIME":"2024.02.27 19:39:12.030","VOLUME":56355}
Quote: {"SYMBOL":"GBPUSD","ASK":1.26897,"BID":1.26889,"FLAGS":0,"TIME":"2024.02.27 19:39:12.324","VOLUME":56355}
Quote: {"SYMBOL":"GBPUSD","ASK":1.26897,"BID":1.26892,"FLAGS":0,"TIME":"2024.02.27 19:39:12.470","VOLUME":56356}
Quote: {"SYMBOL":"EURUSD","ASK":1.08539,"BID":1.08533,"FLAGS":0,"TIME":"2024.02.27 19:39:12.487","VOLUME":58262}
Quote: {"SYMBOL":"EURUSD","ASK":1.08538,"BID":1.08533,"FLAGS":0,"TIME":"2024.02.27 19:39:12.646","VOLUME":58262}
Quote: {"SYMBOL":"GBPUSD","ASK":1.26898,"BID":1.26892,"FLAGS":0,"TIME":"2024.02.27 19:39:12.698","VOLUME":56356}

Examples

Note

All these codes are uploaded to GitHub

Example 1: Get actual EURUSD price from MT5 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",71);

            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();
        }
    }
}
Reply
{
   "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":"The operation completed successfully"
}

Example 2: Send Order to MT5 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",71);

            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();
        }
    }
}
Reply
{"MSG":"ORDER_SEND","RETCODE":10009,"DEAL":2015119247,"ORDER":2020570871,"VOLUME":0.10,"PRICE":1.064860,"BID":1.064830,"ASK":1.064860,"REQUEST_ID":3136973155,"RETCODE_EXTERNAL":0,"ERROR_ID":0,"ERROR_DESCRIPTION":"The operation completed successfully"}

Example 3: Stream actual EURUSD price from MT5 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", 71);
            TcpClient tcpClient_data = new TcpClient("127.0.0.1", 72);

            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();
        }
    }
}
Reply
{"MSG":"TRACK_PRICES","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"The operation completed successfully"}

{"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 MT5 (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", 71);

            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();
        }
    }
}
Reply
Symbol: EURUSD  Ask: 1.07934  Bid: 1.07931  Time: 2022.04.19 12:02:28.0

Example 2: Stream OHLC data from MT5 (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", 71);
            TcpClient tcpClient_data = new TcpClient("127.0.0.1", 72);

            JArray jArr = new JArray();
            jArr.Add("EURUSD");

            JObject jObj = new JObject();
            jObj["MSG"] = "TRACK_OHLC";
            jObj["TIMEFRAME"] = "PERIOD_M1";
            jObj["SYMBOLS"] = jArr;

            Byte[] data = System.Text.Encoding.ASCII.GetBytes(jObj.ToString(Newtonsoft.Json.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);
                Console.WriteLine(responseData);
            } while (true);

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

            tcpClient_cmd.Close();
            tcpClient_data.Close();
        }
    }
}
Reply
{"MSG":"TRACK_OHLC","SUCCESS":["EURUSD"],"ERROR_ID":0,"ERROR_DESCRIPTION":"The operation completed successfully"}

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 MT5 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", 71);

            JObject jo = new JObject();
            jo["MSG"] = "TRADE_HISTORY";
            jo["MODE"] = "POSITIONS";
            jo["FROM_DATE"] = "2023/08/20 00:00:00";
            jo["TO_DATE"] = "2023/08/24 13:00:00";

            Byte[] data = System.Text.Encoding.ASCII.GetBytes(jo.ToString(Newtonsoft.Json.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["POSITIONS"])
            {
                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_CLOSE"].ToString() + "," +
                    item["PRICE_OPEN"].ToString() + "," +
                    item["TYPE"].ToString() + "," +
                    item["VOLUME"].ToString() + "," +
                    item["SL"].ToString() + "," +
                    item["TP"].ToString() + "," +
                    item["SWAP"].ToString() + "," +
                    item["COMMISSION"].ToString() + "," +
                    item["COMMENT"].ToString() + "," +
                    item["PROFIT"].ToString() +
                    Environment.NewLine);
            }

            Console.WriteLine("Finished!");

            stream.Close();
            tcpClient.Close();
            }
        }
    }
Reply
Finished!

tradeHistory.csv
OPEN_TIME,CLOSE_TIME,TICKET,SYMBOL,MAGIC,PRICE_OPEN,PRICE_CLOSE,TYPE,LOTS,STOP_LOSS,TAKE_PROFIT,SWAP,COMMISSION,COMMENT,PROFIT
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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
2023.08.20 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

Info

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