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.