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.
Basic Examples for MT4 (for MT5 click here)
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.