Skip to content

Commit ac37054

Browse files
authored
Add files via upload
1 parent 3e9a807 commit ac37054

File tree

1 file changed

+77
-24
lines changed

1 file changed

+77
-24
lines changed

MT5socketAPI/Terminal.cs

Lines changed: 77 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,51 @@ public enum OrderType
1414
ORDER_TYPE_BUY_STOP,
1515
ORDER_TYPE_SELL_STOP
1616
}
17+
18+
public enum TradeRetCode : long
19+
{
20+
TRADE_RETCODE_REQUOTE = 10004,
21+
TRADE_RETCODE_REJECT = 1006,
22+
TRADE_RETCODE_CANCEL = 10007,
23+
TRADE_RETCODE_PLACED = 10008,
24+
TRADE_RETCODE_DONE = 10009,
25+
TRADE_RETCODE_DONE_PARTIAL = 10010,
26+
TRADE_RETCODE_ERROR = 10011,
27+
TRADE_RETCODE_TIMEOUT = 10012,
28+
TRADE_RETCODE_INVALID = 10013,
29+
TRADE_RETCODE_INVALID_VOLUME = 10014,
30+
TRADE_RETCODE_INVALID_PRICE = 10015,
31+
TRADE_RETCODE_INVALID_STOPS = 10016,
32+
TRADE_RETCODE_TRADE_DISABLED = 10017,
33+
TRADE_RETCODE_MARKET_CLOSED = 10018,
34+
TRADE_RETCODE_NO_MONEY = 10019,
35+
TRADE_RETCODE_PRICE_CHANGED = 10020,
36+
TRADE_RETCODE_PRICE_OFF = 10021,
37+
TRADE_RETCODE_INVALID_EXPIRATION = 10022,
38+
TRADE_RETCODE_ORDER_CHANGED = 10023,
39+
TRADE_RETCODE_TOO_MANY_REQUESTS = 10024,
40+
TRADE_RETCODE_NO_CHANGES = 10025,
41+
TRADE_RETCODE_SERVER_DISABLES_AT = 10026,
42+
TRADE_RETCODE_CLIENT_DISABLES_AT = 10027,
43+
TRADE_RETCODE_LOCKED = 10028,
44+
TRADE_RETCODE_FROZEN = 10029,
45+
TRADE_RETCODE_INVALID_FILL = 10030,
46+
TRADE_RETCODE_CONNECTION = 10031,
47+
TRADE_RETCODE_ONLY_REAL = 10032,
48+
TRADE_RETCODE_LIMIT_ORDERS = 10033,
49+
TRADE_RETCODE_LIMIT_VOLUME = 10034,
50+
TRADE_RETCODE_INVALID_ORDER = 10035,
51+
TRADE_RETCODE_POSITION_CLOSED = 10036,
52+
TRADE_RETCODE_INVALID_CLOSE_VOLUME = 10038,
53+
TRADE_RETCODE_CLOSE_ORDER_EXIST = 10039,
54+
TRADE_RETCODE_LIMIT_POSITIONS = 10040,
55+
TRADE_RETCODE_REJECT_CANCEL = 10041,
56+
TRADE_RETCODE_LONG_ONLY = 10042,
57+
TRADE_RETCODE_SHORT_ONLY = 10043,
58+
TRADE_RETCODE_CLOSE_ONLY = 10044,
59+
TRADE_RETCODE_FIFO_CLOSE = 10045,
60+
TRADE_RETCODE_HEDGE_PROHIBITED = 10046
61+
}
1762
public enum TimeFrame
1863
{
1964
PERIOD_M1,
@@ -70,7 +115,7 @@ public class Terminal
70115
{
71116
public Terminal() { }
72117

73-
public string host = "localhost";
118+
public string host = "127.0.0.1";
74119
public int cmd_port = 77;
75120
public int data_port = 78;
76121
static int bufferLen = 65536;
@@ -88,43 +133,51 @@ public Terminal() { }
88133
/// MTsocketAPI version
89134
/// </summary>
90135
public string Version { get; set; }
91-
136+
private object sendCmdLock = new object();
92137
/// <summary>
93138
/// Send RAW JSON command to MTsocketAPI
94139
/// </summary>
95140
/// <param name="cmd">JSON command</param>
96141
/// <returns>JSON reply</returns>
97142
public JObject SendCommand(JObject cmd)
98143
{
99-
try
144+
lock (sendCmdLock)
100145
{
101-
byte[] data = Encoding.ASCII.GetBytes(cmd.ToString(Formatting.None) + "\r\n");
146+
try
147+
{
148+
//System.IO.File.AppendAllText("log.txt", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff") + " - IN: " + cmd.ToString(Formatting.None) + Environment.NewLine);
149+
byte[] data = Encoding.ASCII.GetBytes(cmd.ToString(Formatting.None) + "\r\n");
102150

103-
NetworkStream stream = tcpClient_cmd.GetStream();
151+
NetworkStream stream = tcpClient_cmd.GetStream();
152+
stream.ReadTimeout = 3000;
153+
stream.Write(data, 0, data.Length);
104154

105-
stream.Write(data, 0, data.Length);
155+
data = new byte[bufferLen];
106156

107-
data = new byte[bufferLen];
157+
string responseData = string.Empty;
108158

109-
string responseData = string.Empty;
159+
int bytes;
160+
do
161+
{
162+
bytes = stream.Read(data, 0, bufferLen);
163+
responseData += Encoding.ASCII.GetString(data, 0, bytes);
164+
//System.Threading.Thread.Sleep(1000);
165+
//System.IO.File.AppendAllText("log.txt", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff") + " - loop: " + responseData + Environment.NewLine);
166+
} while (stream.DataAvailable || !responseData.EndsWith("\r\n"));
110167

111-
int bytes;
112-
do
113-
{
114-
bytes = stream.Read(data, 0, bufferLen);
115-
responseData += Encoding.ASCII.GetString(data, 0, bytes);
116-
} while (stream.DataAvailable || !responseData.EndsWith("\r\n"));
168+
//System.IO.File.AppendAllText("log.txt", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff") + " - OU: " + responseData + Environment.NewLine);
117169

118-
JObject? jresult = JsonConvert.DeserializeObject<JObject>(responseData);
170+
JObject? jresult = JsonConvert.DeserializeObject<JObject>(responseData);
119171

120-
if (jresult != null)
121-
return jresult;
122-
else
123-
throw new Exception("Error with deserialization in SendCommand");
124-
}
125-
catch (Exception)
126-
{
127-
throw;
172+
if (jresult != null)
173+
return jresult;
174+
else
175+
throw new Exception("Error with deserialization in SendCommand");
176+
}
177+
catch (Exception)
178+
{
179+
throw;
180+
}
128181
}
129182
}
130183

@@ -197,7 +250,7 @@ private void ListenMTDataStream()
197250
/// <param name="cmd_port">MTsocketAPI command port</param>
198251
/// <param name="data_port">MTsocketAPI data port</param>
199252
/// <returns>True = connect successful, False = connect fail</returns>
200-
public bool Connect(string host = "localhost", int cmd_port = 77, int data_port = 78)
253+
public bool Connect(string host = "127.0.0.1", int cmd_port = 77, int data_port = 78)
201254
{
202255
try
203256
{

0 commit comments

Comments
 (0)