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