Added OrderCloseByRequest. Changed functions OrderCloseBy to use request pattern

This commit is contained in:
DW
2016-04-29 16:25:41 +03:00
parent 4328fcb050
commit a52cc001c8
9 changed files with 341 additions and 248 deletions
+1
View File
@@ -78,6 +78,7 @@
<Compile Include="OrderSelectSource.cs" /> <Compile Include="OrderSelectSource.cs" />
<Compile Include="Requests\GetOrderRequest.cs" /> <Compile Include="Requests\GetOrderRequest.cs" />
<Compile Include="Requests\GetOrdersRequest.cs" /> <Compile Include="Requests\GetOrdersRequest.cs" />
<Compile Include="Requests\OrderCloseByRequest.cs" />
<Compile Include="Requests\OrderCloseRequest.cs" /> <Compile Include="Requests\OrderCloseRequest.cs" />
<Compile Include="Requests\OrderSendRequest.cs" /> <Compile Include="Requests\OrderSendRequest.cs" />
<Compile Include="Requests\RequestBase.cs" /> <Compile Include="Requests\RequestBase.cs" />
+92 -52
View File
@@ -1,11 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using MTApiService; using MTApiService;
using System.Drawing; using System.Drawing;
using System.Collections; using System.Collections;
using System.Net;
using System.ServiceModel; using System.ServiceModel;
using MtApi.Requests; using MtApi.Requests;
using MtApi.Responses; using MtApi.Responses;
@@ -99,7 +97,21 @@ namespace MtApi
public int OrderSend(string symbol, TradeOperation cmd, double volume, double price, int slippage, double stoploss, double takeprofit public int OrderSend(string symbol, TradeOperation cmd, double volume, double price, int slippage, double stoploss, double takeprofit
, string comment, int magic, DateTime expiration, Color arrowColor) , string comment, int magic, DateTime expiration, Color arrowColor)
{ {
return InternalOrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrowColor); var response = SendRequest<OrderSendResponse>(new OrderSendRequest
{
Symbol = symbol,
Cmd = (int)cmd,
Volume = volume,
Price = price,
Slippage = slippage,
Stoploss = stoploss,
Takeprofit = takeprofit,
Comment = comment,
Magic = magic,
Expiration = MtApiTimeConverter.ConvertToMtTime(expiration),
ArrowColor = MtApiColorConverter.ConvertToMtColor(arrowColor)
});
return response != null ? response.Ticket : -1;
} }
public int OrderSend(string symbol, TradeOperation cmd, double volume, double price, int slippage, double stoploss, double takeprofit public int OrderSend(string symbol, TradeOperation cmd, double volume, double price, int slippage, double stoploss, double takeprofit
@@ -154,51 +166,107 @@ namespace MtApi
public int OrderSendBuy(string symbol, double volume, int slippage, double stoploss, double takeprofit, string comment, int magic) public int OrderSendBuy(string symbol, double volume, int slippage, double stoploss, double takeprofit, string comment, int magic)
{ {
return InternalOrderSend(symbol, TradeOperation.OP_BUY, volume, null, slippage, stoploss, takeprofit, comment, var response = SendRequest<OrderSendResponse>(new OrderSendRequest
magic, null, null); {
Symbol = symbol,
Cmd = (int)TradeOperation.OP_BUY,
Volume = volume,
Slippage = slippage,
Stoploss = stoploss,
Takeprofit = takeprofit,
Comment = comment,
Magic = magic,
});
return response != null ? response.Ticket : -1;
} }
public int OrderSendSell(string symbol, double volume, int slippage, double stoploss, double takeprofit, string comment, int magic) public int OrderSendSell(string symbol, double volume, int slippage, double stoploss, double takeprofit, string comment, int magic)
{ {
return InternalOrderSend(symbol, TradeOperation.OP_SELL, volume, null, slippage, stoploss, takeprofit, comment, var response = SendRequest<OrderSendResponse>(new OrderSendRequest
magic, null, null); {
Symbol = symbol,
Cmd = (int)TradeOperation.OP_SELL,
Volume = volume,
Slippage = slippage,
Stoploss = stoploss,
Takeprofit = takeprofit,
Comment = comment,
Magic = magic,
});
return response != null ? response.Ticket : -1;
} }
public bool OrderClose(int ticket, double lots, double price, int slippage, Color color) public bool OrderClose(int ticket, double lots, double price, int slippage, Color color)
{ {
return InternalOrderClose(ticket, lots, price, slippage, color); var response = SendRequest<ResponseBase>(new OrderCloseRequest
{
Ticket = ticket,
Lots = lots,
Price = price,
Slippage = slippage,
ArrowColor = MtApiColorConverter.ConvertToMtColor(color)
});
return response != null;
} }
public bool OrderClose(int ticket, double lots, double price, int slippage) public bool OrderClose(int ticket, double lots, double price, int slippage)
{ {
return InternalOrderClose(ticket, lots, price, slippage, null); var response = SendRequest<ResponseBase>(new OrderCloseRequest
{
Ticket = ticket,
Lots = lots,
Price = price,
Slippage = slippage,
});
return response != null;
} }
public bool OrderClose(int ticket, double lots, int slippage) public bool OrderClose(int ticket, double lots, int slippage)
{ {
return InternalOrderClose(ticket, lots, null, slippage, null); var response = SendRequest<ResponseBase>(new OrderCloseRequest
{
Ticket = ticket,
Lots = lots,
Slippage = slippage,
});
return response != null;
} }
public bool OrderClose(int ticket, int slippage) public bool OrderClose(int ticket, int slippage)
{ {
return InternalOrderClose(ticket, null, null, slippage, null); var response = SendRequest<ResponseBase>(new OrderCloseRequest
{
Ticket = ticket,
Slippage = slippage,
});
return response != null;
} }
[Obsolete("OrderCloseByCurrentPrice is deprecated, please use OrderClose instead.")] [Obsolete("OrderCloseByCurrentPrice is deprecated, please use OrderClose instead.")]
public bool OrderCloseByCurrentPrice(int ticket, int slippage) public bool OrderCloseByCurrentPrice(int ticket, int slippage)
{ {
return InternalOrderClose(ticket, null, null, slippage, null); return OrderClose(ticket, slippage);
} }
public bool OrderCloseBy(int ticket, int opposite, Color color) public bool OrderCloseBy(int ticket, int opposite, Color color)
{ {
var commandParameters = new ArrayList { ticket, opposite, MtApiColorConverter.ConvertToMtColor(color) }; var response = SendRequest<ResponseBase>(new OrderCloseByRequest
return SendCommand<bool>(MtCommandType.OrderCloseBy, commandParameters); {
Ticket = ticket,
Opposite = opposite,
ArrowColor = MtApiColorConverter.ConvertToMtColor(color)
});
return response != null;
} }
public bool OrderCloseBy(int ticket, int opposite) public bool OrderCloseBy(int ticket, int opposite)
{ {
return OrderCloseBy(ticket, opposite, Color.Empty); var response = SendRequest<ResponseBase>(new OrderCloseByRequest
{
Ticket = ticket,
Opposite = opposite,
});
return response != null;
} }
public double OrderClosePrice() public double OrderClosePrice()
@@ -1302,45 +1370,17 @@ namespace MtApi
ConnectionStateChanged.FireEvent(this, new MtConnectionEventArgs(MtConnectionState.Disconnected, "Disconnected")); ConnectionStateChanged.FireEvent(this, new MtConnectionEventArgs(MtConnectionState.Disconnected, "Disconnected"));
} }
private int InternalOrderSend(string symbol, TradeOperation cmd, double volume, double? price,
int? slippage, double? stoploss, double? takeprofit, string comment, int? magic, DateTime? expiration, Color? arrowColor)
{
var response = SendRequest<OrderSendResponse>(new OrderSendRequest
{
Symbol = symbol,
Cmd = (int)cmd,
Volume = volume,
Price = price,
Slippage = slippage,
Stoploss = stoploss,
Takeprofit = takeprofit,
Comment = comment,
Magic = magic,
Expiration = expiration.HasValue ? MtApiTimeConverter.ConvertToMtTime(expiration.Value) : default(int?),
ArrowColor = arrowColor.HasValue ? MtApiColorConverter.ConvertToMtColor(arrowColor.Value) : default(int?)
});
return response != null ? response.Ticket : -1;
}
public bool InternalOrderClose(int ticket, double? lots, double? price, int? slippage, Color? color)
{
//var commandParameters = new ArrayList { ticket, lots, price, slippage, MtApiColorConverter.ConvertToMtColor(color) };
//return SendCommand<bool>(MtCommandType.OrderClose, commandParameters);
var response = SendRequest<ResponseBase>(new OrderCloseRequest
{
Ticket = ticket,
Lots = lots,
Price = price,
Slippage = slippage,
ArrowColor = color.HasValue ? MtApiColorConverter.ConvertToMtColor(color.Value) : default(int?)
});
return response != null;
}
private T SendCommand<T>(MtCommandType commandType, ArrayList commandParameters) private T SendCommand<T>(MtCommandType commandType, ArrayList commandParameters)
{ {
var response = mClient.SendCommand((int)commandType, commandParameters); MtResponse response;
try
{
response = mClient.SendCommand((int)commandType, commandParameters);
}
catch (CommunicationException ex)
{
throw new MtConnectionException(ex.Message, ex);
}
T result = default(T); T result = default(T);
+1 -1
View File
@@ -16,7 +16,7 @@ namespace MtApi
// OrderClose = 2, // OrderClose = 2,
// OrderCloseByCurrentPrice = 152, // OrderCloseByCurrentPrice = 152,
OrderCloseBy = 3, // OrderCloseBy = 3,
OrderClosePrice = 4, OrderClosePrice = 4,
OrderClosePriceByTicket = 1004, OrderClosePriceByTicket = 1004,
OrderCloseTime = 5, OrderCloseTime = 5,
+15
View File
@@ -0,0 +1,15 @@
namespace MtApi.Requests
{
public class OrderCloseByRequest: RequestBase
{
public int Ticket { get; set; }
public int Opposite { get; set; }
public int? ArrowColor { get; set; }
public override RequestType RequestType
{
get { return RequestType.OrderCloseBy; }
}
}
}
+1
View File
@@ -7,5 +7,6 @@
GetOrders = 2, GetOrders = 2,
OrderSend = 3, OrderSend = 3,
OrderClose = 4, OrderClose = 4,
OrderCloseBy = 5
} }
} }
+50 -14
View File
@@ -48,6 +48,7 @@
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage2 = new System.Windows.Forms.TabPage(); this.tabPage2 = new System.Windows.Forms.TabPage();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.button20 = new System.Windows.Forms.Button(); this.button20 = new System.Windows.Forms.Button();
this.button17 = new System.Windows.Forms.Button(); this.button17 = new System.Windows.Forms.Button();
this.comboBox2 = new System.Windows.Forms.ComboBox(); this.comboBox2 = new System.Windows.Forms.ComboBox();
@@ -123,7 +124,9 @@
this.tabPage6 = new System.Windows.Forms.TabPage(); this.tabPage6 = new System.Windows.Forms.TabPage();
this.button14 = new System.Windows.Forms.Button(); this.button14 = new System.Windows.Forms.Button();
this.button13 = new System.Windows.Forms.Button(); this.button13 = new System.Windows.Forms.Button();
this.checkBox1 = new System.Windows.Forms.CheckBox(); this.button15 = new System.Windows.Forms.Button();
this.textBoxOppositeTicket = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.groupBox1.SuspendLayout(); this.groupBox1.SuspendLayout();
this.statusStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout();
this.groupBox2.SuspendLayout(); this.groupBox2.SuspendLayout();
@@ -304,6 +307,9 @@
// //
// tabPage2 // tabPage2
// //
this.tabPage2.Controls.Add(this.label3);
this.tabPage2.Controls.Add(this.textBoxOppositeTicket);
this.tabPage2.Controls.Add(this.button15);
this.tabPage2.Controls.Add(this.checkBox1); this.tabPage2.Controls.Add(this.checkBox1);
this.tabPage2.Controls.Add(this.button20); this.tabPage2.Controls.Add(this.button20);
this.tabPage2.Controls.Add(this.button17); this.tabPage2.Controls.Add(this.button17);
@@ -327,19 +333,29 @@
this.tabPage2.Text = "Trade Operations"; this.tabPage2.Text = "Trade Operations";
this.tabPage2.UseVisualStyleBackColor = true; this.tabPage2.UseVisualStyleBackColor = true;
// //
// checkBox1
//
this.checkBox1.AutoSize = true;
this.checkBox1.Location = new System.Drawing.Point(297, 208);
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(205, 17);
this.checkBox1.TabIndex = 14;
this.checkBox1.Text = "Close order by current price on market";
this.checkBox1.UseVisualStyleBackColor = true;
//
// button20 // button20
// //
this.button20.Location = new System.Drawing.Point(216, 185); this.button20.Location = new System.Drawing.Point(216, 202);
this.button20.Name = "button20"; this.button20.Name = "button20";
this.button20.Size = new System.Drawing.Size(75, 23); this.button20.Size = new System.Drawing.Size(75, 23);
this.button20.TabIndex = 13; this.button20.TabIndex = 13;
this.button20.Text = "CloseOrder"; this.button20.Text = "OrderClose";
this.button20.UseVisualStyleBackColor = true; this.button20.UseVisualStyleBackColor = true;
this.button20.Click += new System.EventHandler(this.button20_Click); this.button20.Click += new System.EventHandler(this.button20_Click);
// //
// button17 // button17
// //
this.button17.Location = new System.Drawing.Point(601, 158); this.button17.Location = new System.Drawing.Point(558, 158);
this.button17.Name = "button17"; this.button17.Name = "button17";
this.button17.Size = new System.Drawing.Size(75, 23); this.button17.Size = new System.Drawing.Size(75, 23);
this.button17.TabIndex = 12; this.button17.TabIndex = 12;
@@ -386,9 +402,9 @@
this.label21.AutoSize = true; this.label21.AutoSize = true;
this.label21.Location = new System.Drawing.Point(213, 135); this.label21.Location = new System.Drawing.Point(213, 135);
this.label21.Name = "label21"; this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(71, 13); this.label21.Size = new System.Drawing.Size(68, 13);
this.label21.TabIndex = 8; this.label21.TabIndex = 8;
this.label21.Text = "Index/Ticket:"; this.label21.Text = "Index/Ticket";
// //
// textBoxIndexTicket // textBoxIndexTicket
// //
@@ -1173,15 +1189,32 @@
this.button13.UseVisualStyleBackColor = true; this.button13.UseVisualStyleBackColor = true;
this.button13.Click += new System.EventHandler(this.button13_Click); this.button13.Click += new System.EventHandler(this.button13_Click);
// //
// checkBox1 // button15
// //
this.checkBox1.AutoSize = true; this.button15.Location = new System.Drawing.Point(410, 237);
this.checkBox1.Location = new System.Drawing.Point(297, 191); this.button15.Name = "button15";
this.checkBox1.Name = "checkBox1"; this.button15.Size = new System.Drawing.Size(92, 23);
this.checkBox1.Size = new System.Drawing.Size(205, 17); this.button15.TabIndex = 15;
this.checkBox1.TabIndex = 14; this.button15.Text = "OrderCloseBy";
this.checkBox1.Text = "Close order by current price on market"; this.button15.UseVisualStyleBackColor = true;
this.checkBox1.UseVisualStyleBackColor = true; this.button15.Click += new System.EventHandler(this.button15_Click);
//
// textBoxOppositeTicket
//
this.textBoxOppositeTicket.Location = new System.Drawing.Point(303, 239);
this.textBoxOppositeTicket.Name = "textBoxOppositeTicket";
this.textBoxOppositeTicket.Size = new System.Drawing.Size(100, 20);
this.textBoxOppositeTicket.TabIndex = 16;
this.textBoxOppositeTicket.Text = "0";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(219, 242);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(78, 13);
this.label3.TabIndex = 17;
this.label3.Text = "Opposite ticket";
// //
// Form1 // Form1
// //
@@ -1319,6 +1352,9 @@
private System.Windows.Forms.Button button18; private System.Windows.Forms.Button button18;
private System.Windows.Forms.Button button20; private System.Windows.Forms.Button button20;
private System.Windows.Forms.CheckBox checkBox1; private System.Windows.Forms.CheckBox checkBox1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBoxOppositeTicket;
private System.Windows.Forms.Button button15;
} }
} }
+160 -181
View File
@@ -1,16 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing; using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;
using MtApi; using MtApi;
using System.Net;
using System.Diagnostics;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace TestApiClientUI namespace TestApiClientUI
@@ -78,22 +70,20 @@ namespace TestApiClientUI
switch (e.Status) switch (e.Status)
{ {
case MtConnectionState.Connected: case MtConnectionState.Connected:
RunOnUiThread(onConnected); RunOnUiThread(OnConnected);
break; break;
case MtConnectionState.Disconnected: case MtConnectionState.Disconnected:
case MtConnectionState.Failed: case MtConnectionState.Failed:
RunOnUiThread(onDisconnected); RunOnUiThread(OnDisconnected);
break; break;
} }
} }
private void apiClient_QuoteRemoved(object sender, MtQuoteEventArgs e) private void apiClient_QuoteRemoved(object sender, MtQuoteEventArgs e)
{ {
string instrument = e.Quote.Instrument;
RunOnUiThread(() => RunOnUiThread(() =>
{ {
removeQuote(e.Quote); RemoveQuote(e.Quote);
}); });
} }
@@ -101,7 +91,7 @@ namespace TestApiClientUI
{ {
RunOnUiThread(() => RunOnUiThread(() =>
{ {
addNewQuote(e.Quote); AddNewQuote(e.Quote);
}); });
} }
@@ -109,11 +99,11 @@ namespace TestApiClientUI
{ {
this.BeginInvoke((Action)(() => this.BeginInvoke((Action)(() =>
{ {
changeQuote(symbol, bid, ask); ChangeQuote(symbol, bid, ask);
})); }));
} }
private void addNewQuote(MtQuote quote) private void AddNewQuote(MtQuote quote)
{ {
if (quote != null if (quote != null
&& string.IsNullOrEmpty(quote.Instrument) == false && string.IsNullOrEmpty(quote.Instrument) == false
@@ -136,7 +126,7 @@ namespace TestApiClientUI
} }
} }
private void removeQuote(MtQuote quote) private void RemoveQuote(MtQuote quote)
{ {
if (quote != null if (quote != null
&& string.IsNullOrEmpty(quote.Instrument) == false && string.IsNullOrEmpty(quote.Instrument) == false
@@ -157,7 +147,7 @@ namespace TestApiClientUI
} }
} }
private void changeQuote(string symbol, double bid, double ask) private void ChangeQuote(string symbol, double bid, double ask)
{ {
if (string.IsNullOrEmpty(symbol) == false) if (string.IsNullOrEmpty(symbol) == false)
{ {
@@ -170,7 +160,7 @@ namespace TestApiClientUI
} }
} }
private void onConnected() private void OnConnected()
{ {
var quotes = _apiClient.GetQuotes(); var quotes = _apiClient.GetQuotes();
@@ -178,12 +168,12 @@ namespace TestApiClientUI
{ {
foreach (var quote in quotes) foreach (var quote in quotes)
{ {
addNewQuote(quote); AddNewQuote(quote);
} }
} }
} }
private void onDisconnected() private void OnDisconnected()
{ {
listViewQuotes.Items.Clear(); listViewQuotes.Items.Clear();
} }
@@ -200,7 +190,7 @@ namespace TestApiClientUI
else else
_apiClient.BeginConnect(serverName, port); _apiClient.BeginConnect(serverName, port);
onConnected(); OnConnected();
} }
private void buttonDisconnect_Click(object sender, EventArgs e) private void buttonDisconnect_Click(object sender, EventArgs e)
@@ -213,78 +203,6 @@ namespace TestApiClientUI
_apiClient.BeginDisconnect(); _apiClient.BeginDisconnect();
} }
private void sendOrder(string symbol, TradeOperation command, double volume, double price, int slippage, double stoploss, double takeprofit
, string comment, int magic, DateTime expiration, Color arrow_color)
{
int ticket = 0;
try
{
ticket = _apiClient.OrderSend(symbol, command, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
}
catch (MtConnectionException ex)
{
addToLog("MtExecutionException: " + ex.Message);
return;
}
catch (MtExecutionException ex)
{
addToLog("MtExecutionException: " + ex.Message + "; ErrorCode = " + ex.ErrorCode);
return;
}
addToLog(string.Format("Sended order result: ticketId = {0}, symbol = {1}, volume = {2}, slippage = {3}",
ticket, symbol, volume, slippage));
}
private void button1_Click(object sender, EventArgs e)
{
string symbol = textBoxOrderSymbol.Text;
var op_command = (TradeOperation)(comboBoxOrderCommand.SelectedIndex);
double volume;
double.TryParse(textBoxOrderVolume.Text, out volume);
double price;
double.TryParse(textBoxOrderPrice.Text, out price);
int slippage = (int)numericOrderSlippage.Value;
double stoploss;
double.TryParse(textBoxOrderStoploss.Text, out stoploss);
double takeprofit;
double.TryParse(textBoxOrderProffit.Text, out takeprofit);
string comment = textBoxOrderComment.Text;
int magic;
int.TryParse(textBoxOrderMagic.Text, out magic);
DateTime expiration = DateTime.Now;
Color arrow_color = new Color();
switch (comboBoxOrderColor.SelectedIndex)
{
case 0:
arrow_color = Color.Green;
break;
case 1:
arrow_color = Color.Blue;
break;
case 2:
arrow_color = Color.Red;
break;
}
Action a = () =>
{
sendOrder(symbol, op_command, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
};
a.BeginInvoke(null, null);
}
private void listViewQuotes_SelectedIndexChanged(object sender, EventArgs e) private void listViewQuotes_SelectedIndexChanged(object sender, EventArgs e)
{ {
if (listViewQuotes.SelectedItems.Count > 0) if (listViewQuotes.SelectedItems.Count > 0)
@@ -319,7 +237,7 @@ namespace TestApiClientUI
sendedOrders.Add(orderId); sendedOrders.Add(orderId);
} }
addToLog(string.Format("Closed order result: {0}, ticketId = {1}, volume - {2}, slippage {3}", result, orderId, volume, slippage)); AddToLog(string.Format("Closed order result: {0}, ticketId = {1}, volume - {2}, slippage {3}", result, orderId, volume, slippage));
} }
foreach (var orderId in sendedOrders) foreach (var orderId in sendedOrders)
@@ -353,7 +271,7 @@ namespace TestApiClientUI
var result = _apiClient.OrderCloseBy(ticket, opposite, color); var result = _apiClient.OrderCloseBy(ticket, opposite, color);
addToLog(string.Format("ClosedBy order result: {0}, ticketId = {1}, opposite {2}", result, ticket, opposite)); AddToLog(string.Format("ClosedBy order result: {0}, ticketId = {1}, opposite {2}", result, ticket, opposite));
} }
} }
@@ -361,26 +279,26 @@ namespace TestApiClientUI
{ {
var result = _apiClient.OrderClosePrice(); var result = _apiClient.OrderClosePrice();
textBoxOrderPrice.Text = result.ToString(); textBoxOrderPrice.Text = result.ToString();
addToLog(string.Format("OrderClosePrice result: {0}", result)); AddToLog(string.Format("OrderClosePrice result: {0}", result));
} }
private void orderCloseTime() private void orderCloseTime()
{ {
var result = _apiClient.OrderCloseTime(); var result = _apiClient.OrderCloseTime();
addToLog(string.Format("OrderCloseTime result: {0}", result)); AddToLog(string.Format("OrderCloseTime result: {0}", result));
} }
private void orderComment() private void orderComment()
{ {
var result = _apiClient.OrderComment(); var result = _apiClient.OrderComment();
textBoxOrderComment.Text = result.ToString(); textBoxOrderComment.Text = result.ToString();
addToLog(string.Format("OrderComment result: {0}", result)); AddToLog(string.Format("OrderComment result: {0}", result));
} }
private void orderCommission() private void orderCommission()
{ {
var result = _apiClient.OrderCommission(); var result = _apiClient.OrderCommission();
addToLog(string.Format("OrderCommission result: {0}", result)); AddToLog(string.Format("OrderCommission result: {0}", result));
} }
private void orderDelete() private void orderDelete()
@@ -391,26 +309,26 @@ namespace TestApiClientUI
var result = _apiClient.OrderDelete(ticket); var result = _apiClient.OrderDelete(ticket);
addToLog(string.Format("Delete order result: {0}, ticketId = {1}", result, ticket)); AddToLog(string.Format("Delete order result: {0}, ticketId = {1}", result, ticket));
} }
} }
private void orderExpiration() private void orderExpiration()
{ {
var result = _apiClient.OrderExpiration(); var result = _apiClient.OrderExpiration();
addToLog(string.Format("Expiration order result: {0}", result)); AddToLog(string.Format("Expiration order result: {0}", result));
} }
private void orderLots() private void orderLots()
{ {
var result = _apiClient.OrderLots(); var result = _apiClient.OrderLots();
addToLog(string.Format("Lots order result: {0}", result)); AddToLog(string.Format("Lots order result: {0}", result));
} }
private void orderMagicNumber() private void orderMagicNumber()
{ {
var result = _apiClient.OrderMagicNumber(); var result = _apiClient.OrderMagicNumber();
addToLog(string.Format("MagicNumber order result: {0}", result)); AddToLog(string.Format("MagicNumber order result: {0}", result));
} }
private void orderModify() private void orderModify()
@@ -446,20 +364,20 @@ namespace TestApiClientUI
var result = _apiClient.OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color); var result = _apiClient.OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
addToLog(string.Format("OrderModify result: {0}", result)); AddToLog(string.Format("OrderModify result: {0}", result));
} }
} }
private void orderOpenPrice() private void orderOpenPrice()
{ {
var result = _apiClient.OrderOpenPrice(); var result = _apiClient.OrderOpenPrice();
addToLog(string.Format("OrderOpenPrice result: {0}", result)); AddToLog(string.Format("OrderOpenPrice result: {0}", result));
} }
private void orderOpenTime() private void orderOpenTime()
{ {
var result = _apiClient.OrderOpenTime(); var result = _apiClient.OrderOpenTime();
addToLog(string.Format("OpenTime order result: {0}", result)); AddToLog(string.Format("OpenTime order result: {0}", result));
} }
private void orderPrint() private void orderPrint()
@@ -470,7 +388,7 @@ namespace TestApiClientUI
private void orderProfit() private void orderProfit()
{ {
var result = _apiClient.OrderProfit(); var result = _apiClient.OrderProfit();
addToLog(string.Format("Profit order result: {0}", result)); AddToLog(string.Format("Profit order result: {0}", result));
} }
private void orderSelect() private void orderSelect()
@@ -488,60 +406,60 @@ namespace TestApiClientUI
{ {
var result = _apiClient.OrderSelect(ticket, OrderSelectMode.SELECT_BY_POS); var result = _apiClient.OrderSelect(ticket, OrderSelectMode.SELECT_BY_POS);
addToLog(string.Format("OrderSelect result: {0}", result)); AddToLog(string.Format("OrderSelect result: {0}", result));
} }
} }
private void ordersHistoryTotal() private void ordersHistoryTotal()
{ {
var result = _apiClient.OrdersHistoryTotal(); var result = _apiClient.OrdersHistoryTotal();
addToLog(string.Format("OrdersHistoryTotal result: {0}", result)); AddToLog(string.Format("OrdersHistoryTotal result: {0}", result));
} }
private void orderStopLoss() private void orderStopLoss()
{ {
var result = _apiClient.OrderStopLoss(); var result = _apiClient.OrderStopLoss();
textBoxOrderStoploss.Text = result.ToString(); textBoxOrderStoploss.Text = result.ToString();
addToLog(string.Format("OrderStopLoss result: {0}", result)); AddToLog(string.Format("OrderStopLoss result: {0}", result));
} }
private void ordersTotal() private void ordersTotal()
{ {
var result = _apiClient.OrdersTotal(); var result = _apiClient.OrdersTotal();
addToLog(string.Format("OrdersTotal result: {0}", result)); AddToLog(string.Format("OrdersTotal result: {0}", result));
} }
private void orderSwap() private void orderSwap()
{ {
var result = _apiClient.OrderSwap(); var result = _apiClient.OrderSwap();
addToLog(string.Format("OrderSwap result: {0}", result)); AddToLog(string.Format("OrderSwap result: {0}", result));
} }
private void orderSymbol() private void orderSymbol()
{ {
var result = _apiClient.OrderSymbol(); var result = _apiClient.OrderSymbol();
textBoxOrderSymbol.Text = result; textBoxOrderSymbol.Text = result;
addToLog(string.Format("OrderSymbol result: {0}", result)); AddToLog(string.Format("OrderSymbol result: {0}", result));
} }
private void orderTakeProfit() private void orderTakeProfit()
{ {
var result = _apiClient.OrderTakeProfit(); var result = _apiClient.OrderTakeProfit();
textBoxOrderProffit.Text = result.ToString(); textBoxOrderProffit.Text = result.ToString();
addToLog(string.Format("OrderTakeProfit result: {0}", result)); AddToLog(string.Format("OrderTakeProfit result: {0}", result));
} }
private void orderTicket() private void orderTicket()
{ {
var result = _apiClient.OrderTicket(); var result = _apiClient.OrderTicket();
addToLog(string.Format("OrderTicket result: {0}", result)); AddToLog(string.Format("OrderTicket result: {0}", result));
} }
private void orderType() private void orderType()
{ {
var result = _apiClient.OrderType(); var result = _apiClient.OrderType();
comboBoxOrderCommand.SelectedIndex = (int)result; comboBoxOrderCommand.SelectedIndex = (int)result;
addToLog(string.Format("OrderType result: {0}", result)); AddToLog(string.Format("OrderType result: {0}", result));
} }
private void button2_Click(object sender, EventArgs e) private void button2_Click(object sender, EventArgs e)
@@ -549,7 +467,7 @@ namespace TestApiClientUI
_groupOrderCommands[comboBoxSelectedCommand.SelectedIndex](); _groupOrderCommands[comboBoxSelectedCommand.SelectedIndex]();
} }
private void addToLog(string msg) private void AddToLog(string msg)
{ {
RunOnUiThread(() => RunOnUiThread(() =>
{ {
@@ -566,79 +484,79 @@ namespace TestApiClientUI
case 0: case 0:
{ {
var result = _apiClient.GetLastError(); var result = _apiClient.GetLastError();
addToLog(string.Format("GetLastError result: {0}", result)); AddToLog(string.Format("GetLastError result: {0}", result));
} }
break; break;
case 1: case 1:
{ {
var result = _apiClient.IsConnected(); var result = _apiClient.IsConnected();
addToLog(string.Format("IsConnected result: {0}", result)); AddToLog(string.Format("IsConnected result: {0}", result));
} }
break; break;
case 2: case 2:
{ {
var result = _apiClient.IsDemo(); var result = _apiClient.IsDemo();
addToLog(string.Format("IsDemo result: {0}", result)); AddToLog(string.Format("IsDemo result: {0}", result));
} }
break; break;
case 3: case 3:
{ {
var result = _apiClient.IsDllsAllowed(); var result = _apiClient.IsDllsAllowed();
addToLog(string.Format("IsDllsAllowed result: {0}", result)); AddToLog(string.Format("IsDllsAllowed result: {0}", result));
} }
break; break;
case 4: case 4:
{ {
var result = _apiClient.IsExpertEnabled(); var result = _apiClient.IsExpertEnabled();
addToLog(string.Format("IsExpertEnabled result: {0}", result)); AddToLog(string.Format("IsExpertEnabled result: {0}", result));
} }
break; break;
case 5: case 5:
{ {
var result = _apiClient.IsLibrariesAllowed(); var result = _apiClient.IsLibrariesAllowed();
addToLog(string.Format("IsLibrariesAllowed result: {0}", result)); AddToLog(string.Format("IsLibrariesAllowed result: {0}", result));
} }
break; break;
case 6: case 6:
{ {
var result = _apiClient.IsOptimization(); var result = _apiClient.IsOptimization();
addToLog(string.Format("IsOptimization result: {0}", result)); AddToLog(string.Format("IsOptimization result: {0}", result));
} }
break; break;
case 7: case 7:
{ {
var result = _apiClient.IsStopped(); var result = _apiClient.IsStopped();
addToLog(string.Format("IsStopped result: {0}", result)); AddToLog(string.Format("IsStopped result: {0}", result));
} }
break; break;
case 8: case 8:
{ {
var result = _apiClient.IsTesting(); var result = _apiClient.IsTesting();
addToLog(string.Format("IsTesting result: {0}", result)); AddToLog(string.Format("IsTesting result: {0}", result));
} }
break; break;
case 9: case 9:
{ {
var result = _apiClient.IsTradeAllowed(); var result = _apiClient.IsTradeAllowed();
addToLog(string.Format("IsTradeAllowed result: {0}", result)); AddToLog(string.Format("IsTradeAllowed result: {0}", result));
} }
break; break;
case 10: case 10:
{ {
var result = _apiClient.IsTradeContextBusy(); var result = _apiClient.IsTradeContextBusy();
addToLog(string.Format("IsTradeContextBusy result: {0}", result)); AddToLog(string.Format("IsTradeContextBusy result: {0}", result));
} }
break; break;
case 11: case 11:
{ {
var result = _apiClient.IsVisualMode(); var result = _apiClient.IsVisualMode();
addToLog(string.Format("IsVisualMode result: {0}", result)); AddToLog(string.Format("IsVisualMode result: {0}", result));
} }
break; break;
case 12: case 12:
{ {
var result = _apiClient.UninitializeReason(); var result = _apiClient.UninitializeReason();
addToLog(string.Format("UninitializeReason result: {0}", result)); AddToLog(string.Format("UninitializeReason result: {0}", result));
} }
break; break;
case 13: case 13:
@@ -646,7 +564,7 @@ namespace TestApiClientUI
int errorCode = -1; int errorCode = -1;
int.TryParse(textBoxErrorCode.Text, out errorCode); int.TryParse(textBoxErrorCode.Text, out errorCode);
var result = _apiClient.ErrorDescription(errorCode); var result = _apiClient.ErrorDescription(errorCode);
addToLog(string.Format("ErrorDescription result: {0}", result)); AddToLog(string.Format("ErrorDescription result: {0}", result));
} }
break; break;
} }
@@ -659,97 +577,97 @@ namespace TestApiClientUI
case 0: case 0:
{ {
var result = _apiClient.AccountBalance(); var result = _apiClient.AccountBalance();
addToLog(string.Format("AccountBalance result: {0}", result)); AddToLog(string.Format("AccountBalance result: {0}", result));
} }
break; break;
case 1: case 1:
{ {
var result = _apiClient.AccountCredit(); var result = _apiClient.AccountCredit();
addToLog(string.Format("AccountCredit result: {0}", result)); AddToLog(string.Format("AccountCredit result: {0}", result));
} }
break; break;
case 2: case 2:
{ {
var result = _apiClient.AccountCompany(); var result = _apiClient.AccountCompany();
addToLog(string.Format("AccountCompany result: {0}", result)); AddToLog(string.Format("AccountCompany result: {0}", result));
} }
break; break;
case 3: case 3:
{ {
var result = _apiClient.AccountCurrency(); var result = _apiClient.AccountCurrency();
addToLog(string.Format("AccountCurrency result: {0}", result)); AddToLog(string.Format("AccountCurrency result: {0}", result));
} }
break; break;
case 4: case 4:
{ {
var result = _apiClient.AccountEquity(); var result = _apiClient.AccountEquity();
addToLog(string.Format("AccountEquity result: {0}", result)); AddToLog(string.Format("AccountEquity result: {0}", result));
} }
break; break;
case 5: case 5:
{ {
var result = _apiClient.AccountFreeMargin(); var result = _apiClient.AccountFreeMargin();
addToLog(string.Format("AccountFreeMargin result: {0}", result)); AddToLog(string.Format("AccountFreeMargin result: {0}", result));
} }
break; break;
case 6: case 6:
{ {
var result = _apiClient.AccountFreeMarginCheck(textBoxAccountInfoSymbol.Text, (TradeOperation)comboBoxAccountInfoCmd.SelectedIndex, int.Parse(textBoxAccountInfoVolume.Text)); var result = _apiClient.AccountFreeMarginCheck(textBoxAccountInfoSymbol.Text, (TradeOperation)comboBoxAccountInfoCmd.SelectedIndex, int.Parse(textBoxAccountInfoVolume.Text));
addToLog(string.Format("AccountFreeMarginCheck result: {0}", result)); AddToLog(string.Format("AccountFreeMarginCheck result: {0}", result));
} }
break; break;
case 7: case 7:
{ {
var result = _apiClient.AccountFreeMarginMode(); var result = _apiClient.AccountFreeMarginMode();
addToLog(string.Format("AccountFreeMarginMode result: {0}", result)); AddToLog(string.Format("AccountFreeMarginMode result: {0}", result));
} }
break; break;
case 8: case 8:
{ {
var result = _apiClient.AccountLeverage(); var result = _apiClient.AccountLeverage();
addToLog(string.Format("AccountLeverage result: {0}", result)); AddToLog(string.Format("AccountLeverage result: {0}", result));
} }
break; break;
case 9: case 9:
{ {
var result = _apiClient.AccountMargin(); var result = _apiClient.AccountMargin();
addToLog(string.Format("AccountMargin result: {0}", result)); AddToLog(string.Format("AccountMargin result: {0}", result));
} }
break; break;
case 10: case 10:
{ {
var result = _apiClient.AccountName(); var result = _apiClient.AccountName();
addToLog(string.Format("AccountName result: {0}", result)); AddToLog(string.Format("AccountName result: {0}", result));
} }
break; break;
case 11: case 11:
{ {
var result = _apiClient.AccountNumber(); var result = _apiClient.AccountNumber();
addToLog(string.Format("AccountNumber result: {0}", result)); AddToLog(string.Format("AccountNumber result: {0}", result));
} }
break; break;
case 12: case 12:
{ {
var result = _apiClient.AccountProfit(); var result = _apiClient.AccountProfit();
addToLog(string.Format("AccountProfit result: {0}", result)); AddToLog(string.Format("AccountProfit result: {0}", result));
} }
break; break;
case 13: case 13:
{ {
var result = _apiClient.AccountServer(); var result = _apiClient.AccountServer();
addToLog(string.Format("AccountServer result: {0}", result)); AddToLog(string.Format("AccountServer result: {0}", result));
} }
break; break;
case 14: case 14:
{ {
var result = _apiClient.AccountStopoutLevel(); var result = _apiClient.AccountStopoutLevel();
addToLog(string.Format("AccountStopoutLevel result: {0}", result)); AddToLog(string.Format("AccountStopoutLevel result: {0}", result));
} }
break; break;
case 15: case 15:
{ {
var result = _apiClient.AccountStopoutMode(); var result = _apiClient.AccountStopoutMode();
addToLog(string.Format("AccountStopoutMode result: {0}", result)); AddToLog(string.Format("AccountStopoutMode result: {0}", result));
} }
break; break;
} }
@@ -761,7 +679,7 @@ namespace TestApiClientUI
return; return;
var result = _apiClient.MarketInfo(txtMarketInfoSymbol.Text, (MarketInfoModeType)listBoxMarketInfo.SelectedIndex); var result = _apiClient.MarketInfo(txtMarketInfoSymbol.Text, (MarketInfoModeType)listBoxMarketInfo.SelectedIndex);
addToLog(string.Format("MarketInfo result: {0}", result)); AddToLog(string.Format("MarketInfo result: {0}", result));
} }
private void button6_Click(object sender, EventArgs e) private void button6_Click(object sender, EventArgs e)
@@ -849,25 +767,25 @@ namespace TestApiClientUI
string symbol = textBoxSelectedSymbol.Text; string symbol = textBoxSelectedSymbol.Text;
int[] param = {11, 12, 13}; int[] param = {11, 12, 13};
var retVal = _apiClient.iCustom(symbol, (int)ChartPeriod.PERIOD_H1, "Zigzag", param, 1, 0); var retVal = _apiClient.iCustom(symbol, (int)ChartPeriod.PERIOD_H1, "Zigzag", param, 1, 0);
addToLog(string.Format("ICustom result: {0}", retVal)); AddToLog(string.Format("ICustom result: {0}", retVal));
} }
private void button13_Click(object sender, EventArgs e) private void button13_Click(object sender, EventArgs e)
{ {
var retVal = _apiClient.TimeCurrent(); var retVal = _apiClient.TimeCurrent();
addToLog(string.Format("TimeCurrent result: {0}", retVal)); AddToLog(string.Format("TimeCurrent result: {0}", retVal));
} }
private void button14_Click(object sender, EventArgs e) private void button14_Click(object sender, EventArgs e)
{ {
var retVal = _apiClient.TimeLocal(); var retVal = _apiClient.TimeLocal();
addToLog(string.Format("TimeLocal result: {0}", retVal)); AddToLog(string.Format("TimeLocal result: {0}", retVal));
} }
private void buttonRefreshRates_Click(object sender, EventArgs e) private void buttonRefreshRates_Click(object sender, EventArgs e)
{ {
var retVal = _apiClient.RefreshRates(); var retVal = _apiClient.RefreshRates();
addToLog(string.Format("RefreshRates result: {0}", retVal)); AddToLog(string.Format("RefreshRates result: {0}", retVal));
} }
private void listBoxEventLog_MouseDoubleClick(object sender, MouseEventArgs e) private void listBoxEventLog_MouseDoubleClick(object sender, MouseEventArgs e)
@@ -875,33 +793,83 @@ namespace TestApiClientUI
listBoxEventLog.Items.Clear(); listBoxEventLog.Items.Clear();
} }
private TResult Execute<TResult>(Func<TResult> func) private async Task<TResult> Execute<TResult>(Func<TResult> func)
{ {
var result = default(TResult); return await Task.Factory.StartNew(() =>
try
{ {
result = func(); var result = default(TResult);
} try
catch (MtConnectionException ex) {
result = func();
}
catch (MtConnectionException ex)
{
AddToLog("MtExecutionException: " + ex.Message);
}
catch (MtExecutionException ex)
{
AddToLog("MtExecutionException: " + ex.Message + "; ErrorCode = " + ex.ErrorCode);
}
return result;
});
}
//OrderSend
private void button1_Click(object sender, EventArgs e)
{
var symbol = textBoxOrderSymbol.Text;
var cmd = (TradeOperation)(comboBoxOrderCommand.SelectedIndex);
double volume;
double.TryParse(textBoxOrderVolume.Text, out volume);
double price;
double.TryParse(textBoxOrderPrice.Text, out price);
var slippage = (int)numericOrderSlippage.Value;
double stoploss;
double.TryParse(textBoxOrderStoploss.Text, out stoploss);
double takeprofit;
double.TryParse(textBoxOrderProffit.Text, out takeprofit);
var comment = textBoxOrderComment.Text;
int magic;
int.TryParse(textBoxOrderMagic.Text, out magic);
var expiration = DateTime.Now;
var arrowColor = new Color();
switch (comboBoxOrderColor.SelectedIndex)
{ {
addToLog("MtExecutionException: " + ex.Message); case 0:
} arrowColor = Color.Green;
catch (MtExecutionException ex) break;
{ case 1:
addToLog("MtExecutionException: " + ex.Message + "; ErrorCode = " + ex.ErrorCode); arrowColor = Color.Blue;
break;
case 2:
arrowColor = Color.Red;
break;
} }
return result; var ticket = Execute(() => _apiClient.OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrowColor));
AddToLog(string.Format("Sended order result: ticket = {0}", ticket));
} }
//GetOrder //GetOrder
private void button16_Click(object sender, EventArgs e) private async void button16_Click(object sender, EventArgs e)
{ {
var ticket = int.Parse(textBoxIndexTicket.Text); var ticket = int.Parse(textBoxIndexTicket.Text);
var selectMode = (OrderSelectMode) comboBox1.SelectedIndex; var selectMode = (OrderSelectMode) comboBox1.SelectedIndex;
var selectSource = (OrderSelectSource) comboBox2.SelectedIndex; var selectSource = (OrderSelectSource) comboBox2.SelectedIndex;
var order = Execute(() => _apiClient.GetOrder(ticket, selectMode, selectSource)); var order = await Execute(() => _apiClient.GetOrder(ticket, selectMode, selectSource));
if (order != null) if (order != null)
{ {
@@ -909,17 +877,17 @@ namespace TestApiClientUI
string.Format( string.Format(
"Order: Ticket = {0}, Symbol = {1}, Operation = {2}, OpenPrice = {3}, ClosePrice = {4}, Lots = {5}, Profit = {6}, Comment = {7}, Commission = {8}, MagicNumber = {9}, OpenTime = {10}, CloseTime = {11}", "Order: Ticket = {0}, Symbol = {1}, Operation = {2}, OpenPrice = {3}, ClosePrice = {4}, Lots = {5}, Profit = {6}, Comment = {7}, Commission = {8}, MagicNumber = {9}, OpenTime = {10}, CloseTime = {11}",
order.Ticket, order.Symbol, order.Operation, order.OpenPrice, order.ClosePrice, order.Lots, order.Profit, order.Comment, order.Commission, order.MagicNumber, order.OpenTime, order.CloseTime); order.Ticket, order.Symbol, order.Operation, order.OpenPrice, order.ClosePrice, order.Lots, order.Profit, order.Comment, order.Commission, order.MagicNumber, order.OpenTime, order.CloseTime);
addToLog(result); AddToLog(result);
} }
} }
//GetOrders //GetOrders
private void button17_Click(object sender, EventArgs e) private async void button17_Click(object sender, EventArgs e)
{ {
var selectSource = (OrderSelectSource)comboBox2.SelectedIndex; var selectSource = (OrderSelectSource)comboBox2.SelectedIndex;
var orders = Execute(() => _apiClient.GetOrders(selectSource)); ; var orders = await Execute(() => _apiClient.GetOrders(selectSource)); ;
if (orders != null) if (orders != null)
{ {
@@ -929,13 +897,13 @@ namespace TestApiClientUI
string.Format( string.Format(
"Order: Ticket = {0}, Symbol = {1}, Operation = {2}, OpenPrice = {3}, ClosePrice = {4}, Lots = {5}, Profit = {6}, Comment = {7}, Commission = {8}, MagicNumber = {9}, OpenTime = {10}, CloseTime = {11}", "Order: Ticket = {0}, Symbol = {1}, Operation = {2}, OpenPrice = {3}, ClosePrice = {4}, Lots = {5}, Profit = {6}, Comment = {7}, Commission = {8}, MagicNumber = {9}, OpenTime = {10}, CloseTime = {11}",
order.Ticket, order.Symbol, order.Operation, order.OpenPrice, order.ClosePrice, order.Lots, order.Profit, order.Comment, order.Commission, order.MagicNumber, order.OpenTime, order.CloseTime); order.Ticket, order.Symbol, order.Operation, order.OpenPrice, order.ClosePrice, order.Lots, order.Profit, order.Comment, order.Commission, order.MagicNumber, order.OpenTime, order.CloseTime);
addToLog(result); AddToLog(result);
} }
} }
} }
//OrderSendBuy //OrderSendBuy
private void button18_Click(object sender, EventArgs e) private async void button18_Click(object sender, EventArgs e)
{ {
var symbol = textBoxOrderSymbol.Text; var symbol = textBoxOrderSymbol.Text;
@@ -944,14 +912,14 @@ namespace TestApiClientUI
var slippage = (int)numericOrderSlippage.Value; var slippage = (int)numericOrderSlippage.Value;
var ticket = Execute(() => _apiClient.OrderSendBuy(symbol, volume, slippage)); var ticket = await Execute(() => _apiClient.OrderSendBuy(symbol, volume, slippage));
addToLog(string.Format("Sended order result: ticketId = {0}, symbol = {1}, volume = {2}, slippage = {3}", AddToLog(string.Format("Sended order result: ticketId = {0}, symbol = {1}, volume = {2}, slippage = {3}",
ticket, symbol, volume, slippage)); ticket, symbol, volume, slippage));
} }
//OrderSendSell //OrderSendSell
private void button19_Click(object sender, EventArgs e) private async void button19_Click(object sender, EventArgs e)
{ {
var symbol = textBoxOrderSymbol.Text; var symbol = textBoxOrderSymbol.Text;
@@ -960,14 +928,14 @@ namespace TestApiClientUI
var slippage = (int)numericOrderSlippage.Value; var slippage = (int)numericOrderSlippage.Value;
var ticket = Execute(() => _apiClient.OrderSendSell(symbol, volume, slippage)); var ticket = await Execute(() => _apiClient.OrderSendSell(symbol, volume, slippage));
addToLog(string.Format("Sended order result: ticketId = {0}, symbol = {1}, volume = {2}, slippage = {3}", AddToLog(string.Format("Sended order result: ticketId = {0}, symbol = {1}, volume = {2}, slippage = {3}",
ticket, symbol, volume, slippage)); ticket, symbol, volume, slippage));
} }
//OrderClose //OrderClose
private void button20_Click(object sender, EventArgs e) private async void button20_Click(object sender, EventArgs e)
{ {
var ticket = int.Parse(textBoxIndexTicket.Text); var ticket = int.Parse(textBoxIndexTicket.Text);
var slippage = (int)numericOrderSlippage.Value; var slippage = (int)numericOrderSlippage.Value;
@@ -976,7 +944,7 @@ namespace TestApiClientUI
if (checkBox1.Checked) if (checkBox1.Checked)
{ {
closed = Execute(() => _apiClient.OrderClose(ticket, slippage)); closed = await Execute(() => _apiClient.OrderClose(ticket, slippage));
} }
else else
{ {
@@ -985,10 +953,21 @@ namespace TestApiClientUI
double price; double price;
double.TryParse(textBoxOrderPrice.Text, out price); double.TryParse(textBoxOrderPrice.Text, out price);
closed = Execute(() => _apiClient.OrderClose(ticket, volume, price, slippage)); closed = await Execute(() => _apiClient.OrderClose(ticket, volume, price, slippage));
} }
addToLog(string.Format("Close order result: {0}, ticket = {1}", closed, ticket)); AddToLog(string.Format("Close order result: {0}, ticket = {1}", closed, ticket));
}
//OrderCloseBy
private async void button15_Click(object sender, EventArgs e)
{
var ticket = int.Parse(textBoxIndexTicket.Text);
var opposite = int.Parse(textBoxOppositeTicket.Text);
var closed = await Execute(() => _apiClient.OrderCloseBy(ticket, opposite)); ;
AddToLog(string.Format("Close order result: {0}, ticket = {1}", closed, ticket));
} }
} }
} }
BIN
View File
Binary file not shown.
+21
View File
@@ -3419,6 +3419,9 @@ string OnRequest(string json)
case 4: //OrderClose case 4: //OrderClose
response = ExecuteRequestOrderClose(jo); response = ExecuteRequestOrderClose(jo);
break; break;
case 5: //OrderCloseBy
response = ExecuteRequestOrderCloseBy(jo);
break;
default: default:
Print("OnRequest [WARNING]: Unknown request type ", requestType); Print("OnRequest [WARNING]: Unknown request type ", requestType);
response = CreateErrorResponse(-1, "Unknown request type"); response = CreateErrorResponse(-1, "Unknown request type");
@@ -3625,3 +3628,21 @@ string ExecuteRequestOrderClose(JSONObject *jo)
return CreateErrorResponse(GetLastError(), "OrderClose failed"); return CreateErrorResponse(GetLastError(), "OrderClose failed");
return CreateSuccessResponse("", NULL); return CreateSuccessResponse("", NULL);
} }
string ExecuteRequestOrderCloseBy(JSONObject *jo)
{
if (jo.getValue("Ticket") == NULL)
return CreateErrorResponse(-1, "Undefinded mandatory parameter Ticket");
if (jo.getValue("Opposite") == NULL)
return CreateErrorResponse(-1, "Undefinded mandatory parameter Opposite");
int ticket = jo.getInt("Ticket");
int opposite = jo.getInt("Opposite");
JSONValue *jvArrowColor = jo.getValue("ArrowColor");
int arrowcolor = (jvArrowColor != NULL) ? jvArrowColor.getInt() : CLR_NONE;
if (!OrderCloseBy(ticket, opposite, arrowcolor))
return CreateErrorResponse(GetLastError(), "OrderCloseBy failed");
return CreateSuccessResponse("", NULL);
}