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: MTsocketAPI4.dll / MTsocketAPI5.dll

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}

Basic Examples for MT5 (for MT4 click here)

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",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();
        }
    }
}

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",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();
        }
    }
}

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", 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();
        }
    }
}

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", 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();
        }
    }
}

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", 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(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", 77);

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!

If we open the 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

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