diff --git a/MtApi/MtApi.csproj b/MtApi/MtApi.csproj
index af7bae5e..c3ccf8f4 100755
--- a/MtApi/MtApi.csproj
+++ b/MtApi/MtApi.csproj
@@ -78,6 +78,7 @@
+
diff --git a/MtApi/MtApiClient.cs b/MtApi/MtApiClient.cs
index ac7ab6ed..8c347af7 100755
--- a/MtApi/MtApiClient.cs
+++ b/MtApi/MtApiClient.cs
@@ -1,11 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
using MTApiService;
using System.Drawing;
using System.Collections;
-using System.Net;
using System.ServiceModel;
using MtApi.Requests;
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
, string comment, int magic, DateTime expiration, Color arrowColor)
{
- return InternalOrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrowColor);
+ var response = SendRequest(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
@@ -154,51 +166,107 @@ namespace MtApi
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,
- magic, null, null);
+ var response = SendRequest(new OrderSendRequest
+ {
+ 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)
{
- return InternalOrderSend(symbol, TradeOperation.OP_SELL, volume, null, slippage, stoploss, takeprofit, comment,
- magic, null, null);
+ var response = SendRequest(new OrderSendRequest
+ {
+ 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)
{
- return InternalOrderClose(ticket, lots, price, slippage, color);
+ var response = SendRequest(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)
{
- return InternalOrderClose(ticket, lots, price, slippage, null);
+ var response = SendRequest(new OrderCloseRequest
+ {
+ Ticket = ticket,
+ Lots = lots,
+ Price = price,
+ Slippage = slippage,
+ });
+ return response != null;
}
public bool OrderClose(int ticket, double lots, int slippage)
{
- return InternalOrderClose(ticket, lots, null, slippage, null);
+ var response = SendRequest(new OrderCloseRequest
+ {
+ Ticket = ticket,
+ Lots = lots,
+ Slippage = slippage,
+ });
+ return response != null;
}
public bool OrderClose(int ticket, int slippage)
{
- return InternalOrderClose(ticket, null, null, slippage, null);
+ var response = SendRequest(new OrderCloseRequest
+ {
+ Ticket = ticket,
+ Slippage = slippage,
+ });
+ return response != null;
}
[Obsolete("OrderCloseByCurrentPrice is deprecated, please use OrderClose instead.")]
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)
{
- var commandParameters = new ArrayList { ticket, opposite, MtApiColorConverter.ConvertToMtColor(color) };
- return SendCommand(MtCommandType.OrderCloseBy, commandParameters);
+ var response = SendRequest(new OrderCloseByRequest
+ {
+ Ticket = ticket,
+ Opposite = opposite,
+ ArrowColor = MtApiColorConverter.ConvertToMtColor(color)
+ });
+ return response != null;
}
public bool OrderCloseBy(int ticket, int opposite)
{
- return OrderCloseBy(ticket, opposite, Color.Empty);
+ var response = SendRequest(new OrderCloseByRequest
+ {
+ Ticket = ticket,
+ Opposite = opposite,
+ });
+ return response != null;
}
public double OrderClosePrice()
@@ -1302,45 +1370,17 @@ namespace MtApi
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(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(MtCommandType.OrderClose, commandParameters);
-
- var response = SendRequest(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(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);
diff --git a/MtApi/MtCommandType.cs b/MtApi/MtCommandType.cs
index 66cf81ca..f537758d 100755
--- a/MtApi/MtCommandType.cs
+++ b/MtApi/MtCommandType.cs
@@ -16,7 +16,7 @@ namespace MtApi
// OrderClose = 2,
// OrderCloseByCurrentPrice = 152,
- OrderCloseBy = 3,
+// OrderCloseBy = 3,
OrderClosePrice = 4,
OrderClosePriceByTicket = 1004,
OrderCloseTime = 5,
diff --git a/MtApi/Requests/OrderCloseByRequest.cs b/MtApi/Requests/OrderCloseByRequest.cs
new file mode 100644
index 00000000..5908362e
--- /dev/null
+++ b/MtApi/Requests/OrderCloseByRequest.cs
@@ -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; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/MtApi/Requests/RequestType.cs b/MtApi/Requests/RequestType.cs
index eb1794e9..d4dce25b 100644
--- a/MtApi/Requests/RequestType.cs
+++ b/MtApi/Requests/RequestType.cs
@@ -7,5 +7,6 @@
GetOrders = 2,
OrderSend = 3,
OrderClose = 4,
+ OrderCloseBy = 5
}
}
\ No newline at end of file
diff --git a/TestApiClientUI/Form1.Designer.cs b/TestApiClientUI/Form1.Designer.cs
index d09d0870..a10cb297 100755
--- a/TestApiClientUI/Form1.Designer.cs
+++ b/TestApiClientUI/Form1.Designer.cs
@@ -48,6 +48,7 @@
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
this.button20 = new System.Windows.Forms.Button();
this.button17 = new System.Windows.Forms.Button();
this.comboBox2 = new System.Windows.Forms.ComboBox();
@@ -123,7 +124,9 @@
this.tabPage6 = new System.Windows.Forms.TabPage();
this.button14 = 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.statusStrip1.SuspendLayout();
this.groupBox2.SuspendLayout();
@@ -304,6 +307,9 @@
//
// 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.button20);
this.tabPage2.Controls.Add(this.button17);
@@ -327,19 +333,29 @@
this.tabPage2.Text = "Trade Operations";
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
//
- this.button20.Location = new System.Drawing.Point(216, 185);
+ this.button20.Location = new System.Drawing.Point(216, 202);
this.button20.Name = "button20";
this.button20.Size = new System.Drawing.Size(75, 23);
this.button20.TabIndex = 13;
- this.button20.Text = "CloseOrder";
+ this.button20.Text = "OrderClose";
this.button20.UseVisualStyleBackColor = true;
this.button20.Click += new System.EventHandler(this.button20_Click);
//
// 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.Size = new System.Drawing.Size(75, 23);
this.button17.TabIndex = 12;
@@ -386,9 +402,9 @@
this.label21.AutoSize = true;
this.label21.Location = new System.Drawing.Point(213, 135);
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.Text = "Index/Ticket:";
+ this.label21.Text = "Index/Ticket";
//
// textBoxIndexTicket
//
@@ -1173,15 +1189,32 @@
this.button13.UseVisualStyleBackColor = true;
this.button13.Click += new System.EventHandler(this.button13_Click);
//
- // checkBox1
+ // button15
//
- this.checkBox1.AutoSize = true;
- this.checkBox1.Location = new System.Drawing.Point(297, 191);
- 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;
+ this.button15.Location = new System.Drawing.Point(410, 237);
+ this.button15.Name = "button15";
+ this.button15.Size = new System.Drawing.Size(92, 23);
+ this.button15.TabIndex = 15;
+ this.button15.Text = "OrderCloseBy";
+ this.button15.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
//
@@ -1319,6 +1352,9 @@
private System.Windows.Forms.Button button18;
private System.Windows.Forms.Button button20;
private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox textBoxOppositeTicket;
+ private System.Windows.Forms.Button button15;
}
}
diff --git a/TestApiClientUI/Form1.cs b/TestApiClientUI/Form1.cs
index 81ddc4e6..19b2b85f 100755
--- a/TestApiClientUI/Form1.cs
+++ b/TestApiClientUI/Form1.cs
@@ -1,16 +1,8 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
using System.Drawing;
-using System.Linq;
-using System.Text;
using System.Windows.Forms;
-using System.Security.Cryptography;
-using System.IO;
using MtApi;
-using System.Net;
-using System.Diagnostics;
using System.Threading.Tasks;
namespace TestApiClientUI
@@ -78,22 +70,20 @@ namespace TestApiClientUI
switch (e.Status)
{
case MtConnectionState.Connected:
- RunOnUiThread(onConnected);
+ RunOnUiThread(OnConnected);
break;
case MtConnectionState.Disconnected:
case MtConnectionState.Failed:
- RunOnUiThread(onDisconnected);
+ RunOnUiThread(OnDisconnected);
break;
}
}
private void apiClient_QuoteRemoved(object sender, MtQuoteEventArgs e)
{
- string instrument = e.Quote.Instrument;
-
RunOnUiThread(() =>
{
- removeQuote(e.Quote);
+ RemoveQuote(e.Quote);
});
}
@@ -101,7 +91,7 @@ namespace TestApiClientUI
{
RunOnUiThread(() =>
{
- addNewQuote(e.Quote);
+ AddNewQuote(e.Quote);
});
}
@@ -109,11 +99,11 @@ namespace TestApiClientUI
{
this.BeginInvoke((Action)(() =>
{
- changeQuote(symbol, bid, ask);
+ ChangeQuote(symbol, bid, ask);
}));
}
- private void addNewQuote(MtQuote quote)
+ private void AddNewQuote(MtQuote quote)
{
if (quote != null
&& string.IsNullOrEmpty(quote.Instrument) == false
@@ -136,7 +126,7 @@ namespace TestApiClientUI
}
}
- private void removeQuote(MtQuote quote)
+ private void RemoveQuote(MtQuote quote)
{
if (quote != null
&& 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)
{
@@ -170,7 +160,7 @@ namespace TestApiClientUI
}
}
- private void onConnected()
+ private void OnConnected()
{
var quotes = _apiClient.GetQuotes();
@@ -178,12 +168,12 @@ namespace TestApiClientUI
{
foreach (var quote in quotes)
{
- addNewQuote(quote);
+ AddNewQuote(quote);
}
}
}
- private void onDisconnected()
+ private void OnDisconnected()
{
listViewQuotes.Items.Clear();
}
@@ -200,7 +190,7 @@ namespace TestApiClientUI
else
_apiClient.BeginConnect(serverName, port);
- onConnected();
+ OnConnected();
}
private void buttonDisconnect_Click(object sender, EventArgs e)
@@ -213,78 +203,6 @@ namespace TestApiClientUI
_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)
{
if (listViewQuotes.SelectedItems.Count > 0)
@@ -319,7 +237,7 @@ namespace TestApiClientUI
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)
@@ -353,7 +271,7 @@ namespace TestApiClientUI
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();
textBoxOrderPrice.Text = result.ToString();
- addToLog(string.Format("OrderClosePrice result: {0}", result));
+ AddToLog(string.Format("OrderClosePrice result: {0}", result));
}
private void orderCloseTime()
{
var result = _apiClient.OrderCloseTime();
- addToLog(string.Format("OrderCloseTime result: {0}", result));
+ AddToLog(string.Format("OrderCloseTime result: {0}", result));
}
private void orderComment()
{
var result = _apiClient.OrderComment();
textBoxOrderComment.Text = result.ToString();
- addToLog(string.Format("OrderComment result: {0}", result));
+ AddToLog(string.Format("OrderComment result: {0}", result));
}
private void orderCommission()
{
var result = _apiClient.OrderCommission();
- addToLog(string.Format("OrderCommission result: {0}", result));
+ AddToLog(string.Format("OrderCommission result: {0}", result));
}
private void orderDelete()
@@ -391,26 +309,26 @@ namespace TestApiClientUI
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()
{
var result = _apiClient.OrderExpiration();
- addToLog(string.Format("Expiration order result: {0}", result));
+ AddToLog(string.Format("Expiration order result: {0}", result));
}
private void orderLots()
{
var result = _apiClient.OrderLots();
- addToLog(string.Format("Lots order result: {0}", result));
+ AddToLog(string.Format("Lots order result: {0}", result));
}
private void orderMagicNumber()
{
var result = _apiClient.OrderMagicNumber();
- addToLog(string.Format("MagicNumber order result: {0}", result));
+ AddToLog(string.Format("MagicNumber order result: {0}", result));
}
private void orderModify()
@@ -446,20 +364,20 @@ namespace TestApiClientUI
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()
{
var result = _apiClient.OrderOpenPrice();
- addToLog(string.Format("OrderOpenPrice result: {0}", result));
+ AddToLog(string.Format("OrderOpenPrice result: {0}", result));
}
private void orderOpenTime()
{
var result = _apiClient.OrderOpenTime();
- addToLog(string.Format("OpenTime order result: {0}", result));
+ AddToLog(string.Format("OpenTime order result: {0}", result));
}
private void orderPrint()
@@ -470,7 +388,7 @@ namespace TestApiClientUI
private void orderProfit()
{
var result = _apiClient.OrderProfit();
- addToLog(string.Format("Profit order result: {0}", result));
+ AddToLog(string.Format("Profit order result: {0}", result));
}
private void orderSelect()
@@ -488,60 +406,60 @@ namespace TestApiClientUI
{
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()
{
var result = _apiClient.OrdersHistoryTotal();
- addToLog(string.Format("OrdersHistoryTotal result: {0}", result));
+ AddToLog(string.Format("OrdersHistoryTotal result: {0}", result));
}
private void orderStopLoss()
{
var result = _apiClient.OrderStopLoss();
textBoxOrderStoploss.Text = result.ToString();
- addToLog(string.Format("OrderStopLoss result: {0}", result));
+ AddToLog(string.Format("OrderStopLoss result: {0}", result));
}
private void ordersTotal()
{
var result = _apiClient.OrdersTotal();
- addToLog(string.Format("OrdersTotal result: {0}", result));
+ AddToLog(string.Format("OrdersTotal result: {0}", result));
}
private void orderSwap()
{
var result = _apiClient.OrderSwap();
- addToLog(string.Format("OrderSwap result: {0}", result));
+ AddToLog(string.Format("OrderSwap result: {0}", result));
}
private void orderSymbol()
{
var result = _apiClient.OrderSymbol();
textBoxOrderSymbol.Text = result;
- addToLog(string.Format("OrderSymbol result: {0}", result));
+ AddToLog(string.Format("OrderSymbol result: {0}", result));
}
private void orderTakeProfit()
{
var result = _apiClient.OrderTakeProfit();
textBoxOrderProffit.Text = result.ToString();
- addToLog(string.Format("OrderTakeProfit result: {0}", result));
+ AddToLog(string.Format("OrderTakeProfit result: {0}", result));
}
private void orderTicket()
{
var result = _apiClient.OrderTicket();
- addToLog(string.Format("OrderTicket result: {0}", result));
+ AddToLog(string.Format("OrderTicket result: {0}", result));
}
private void orderType()
{
var result = _apiClient.OrderType();
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)
@@ -549,7 +467,7 @@ namespace TestApiClientUI
_groupOrderCommands[comboBoxSelectedCommand.SelectedIndex]();
}
- private void addToLog(string msg)
+ private void AddToLog(string msg)
{
RunOnUiThread(() =>
{
@@ -566,79 +484,79 @@ namespace TestApiClientUI
case 0:
{
var result = _apiClient.GetLastError();
- addToLog(string.Format("GetLastError result: {0}", result));
+ AddToLog(string.Format("GetLastError result: {0}", result));
}
break;
case 1:
{
var result = _apiClient.IsConnected();
- addToLog(string.Format("IsConnected result: {0}", result));
+ AddToLog(string.Format("IsConnected result: {0}", result));
}
break;
case 2:
{
var result = _apiClient.IsDemo();
- addToLog(string.Format("IsDemo result: {0}", result));
+ AddToLog(string.Format("IsDemo result: {0}", result));
}
break;
case 3:
{
var result = _apiClient.IsDllsAllowed();
- addToLog(string.Format("IsDllsAllowed result: {0}", result));
+ AddToLog(string.Format("IsDllsAllowed result: {0}", result));
}
break;
case 4:
{
var result = _apiClient.IsExpertEnabled();
- addToLog(string.Format("IsExpertEnabled result: {0}", result));
+ AddToLog(string.Format("IsExpertEnabled result: {0}", result));
}
break;
case 5:
{
var result = _apiClient.IsLibrariesAllowed();
- addToLog(string.Format("IsLibrariesAllowed result: {0}", result));
+ AddToLog(string.Format("IsLibrariesAllowed result: {0}", result));
}
break;
case 6:
{
var result = _apiClient.IsOptimization();
- addToLog(string.Format("IsOptimization result: {0}", result));
+ AddToLog(string.Format("IsOptimization result: {0}", result));
}
break;
case 7:
{
var result = _apiClient.IsStopped();
- addToLog(string.Format("IsStopped result: {0}", result));
+ AddToLog(string.Format("IsStopped result: {0}", result));
}
break;
case 8:
{
var result = _apiClient.IsTesting();
- addToLog(string.Format("IsTesting result: {0}", result));
+ AddToLog(string.Format("IsTesting result: {0}", result));
}
break;
case 9:
{
var result = _apiClient.IsTradeAllowed();
- addToLog(string.Format("IsTradeAllowed result: {0}", result));
+ AddToLog(string.Format("IsTradeAllowed result: {0}", result));
}
break;
case 10:
{
var result = _apiClient.IsTradeContextBusy();
- addToLog(string.Format("IsTradeContextBusy result: {0}", result));
+ AddToLog(string.Format("IsTradeContextBusy result: {0}", result));
}
break;
case 11:
{
var result = _apiClient.IsVisualMode();
- addToLog(string.Format("IsVisualMode result: {0}", result));
+ AddToLog(string.Format("IsVisualMode result: {0}", result));
}
break;
case 12:
{
var result = _apiClient.UninitializeReason();
- addToLog(string.Format("UninitializeReason result: {0}", result));
+ AddToLog(string.Format("UninitializeReason result: {0}", result));
}
break;
case 13:
@@ -646,7 +564,7 @@ namespace TestApiClientUI
int errorCode = -1;
int.TryParse(textBoxErrorCode.Text, out errorCode);
var result = _apiClient.ErrorDescription(errorCode);
- addToLog(string.Format("ErrorDescription result: {0}", result));
+ AddToLog(string.Format("ErrorDescription result: {0}", result));
}
break;
}
@@ -659,97 +577,97 @@ namespace TestApiClientUI
case 0:
{
var result = _apiClient.AccountBalance();
- addToLog(string.Format("AccountBalance result: {0}", result));
+ AddToLog(string.Format("AccountBalance result: {0}", result));
}
break;
case 1:
{
var result = _apiClient.AccountCredit();
- addToLog(string.Format("AccountCredit result: {0}", result));
+ AddToLog(string.Format("AccountCredit result: {0}", result));
}
break;
case 2:
{
var result = _apiClient.AccountCompany();
- addToLog(string.Format("AccountCompany result: {0}", result));
+ AddToLog(string.Format("AccountCompany result: {0}", result));
}
break;
case 3:
{
var result = _apiClient.AccountCurrency();
- addToLog(string.Format("AccountCurrency result: {0}", result));
+ AddToLog(string.Format("AccountCurrency result: {0}", result));
}
break;
case 4:
{
var result = _apiClient.AccountEquity();
- addToLog(string.Format("AccountEquity result: {0}", result));
+ AddToLog(string.Format("AccountEquity result: {0}", result));
}
break;
case 5:
{
var result = _apiClient.AccountFreeMargin();
- addToLog(string.Format("AccountFreeMargin result: {0}", result));
+ AddToLog(string.Format("AccountFreeMargin result: {0}", result));
}
break;
case 6:
{
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;
case 7:
{
var result = _apiClient.AccountFreeMarginMode();
- addToLog(string.Format("AccountFreeMarginMode result: {0}", result));
+ AddToLog(string.Format("AccountFreeMarginMode result: {0}", result));
}
break;
case 8:
{
var result = _apiClient.AccountLeverage();
- addToLog(string.Format("AccountLeverage result: {0}", result));
+ AddToLog(string.Format("AccountLeverage result: {0}", result));
}
break;
case 9:
{
var result = _apiClient.AccountMargin();
- addToLog(string.Format("AccountMargin result: {0}", result));
+ AddToLog(string.Format("AccountMargin result: {0}", result));
}
break;
case 10:
{
var result = _apiClient.AccountName();
- addToLog(string.Format("AccountName result: {0}", result));
+ AddToLog(string.Format("AccountName result: {0}", result));
}
break;
case 11:
{
var result = _apiClient.AccountNumber();
- addToLog(string.Format("AccountNumber result: {0}", result));
+ AddToLog(string.Format("AccountNumber result: {0}", result));
}
break;
case 12:
{
var result = _apiClient.AccountProfit();
- addToLog(string.Format("AccountProfit result: {0}", result));
+ AddToLog(string.Format("AccountProfit result: {0}", result));
}
break;
case 13:
{
var result = _apiClient.AccountServer();
- addToLog(string.Format("AccountServer result: {0}", result));
+ AddToLog(string.Format("AccountServer result: {0}", result));
}
break;
case 14:
{
var result = _apiClient.AccountStopoutLevel();
- addToLog(string.Format("AccountStopoutLevel result: {0}", result));
+ AddToLog(string.Format("AccountStopoutLevel result: {0}", result));
}
break;
case 15:
{
var result = _apiClient.AccountStopoutMode();
- addToLog(string.Format("AccountStopoutMode result: {0}", result));
+ AddToLog(string.Format("AccountStopoutMode result: {0}", result));
}
break;
}
@@ -761,7 +679,7 @@ namespace TestApiClientUI
return;
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)
@@ -849,25 +767,25 @@ namespace TestApiClientUI
string symbol = textBoxSelectedSymbol.Text;
int[] param = {11, 12, 13};
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)
{
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)
{
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)
{
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)
@@ -875,33 +793,83 @@ namespace TestApiClientUI
listBoxEventLog.Items.Clear();
}
- private TResult Execute(Func func)
+ private async Task Execute(Func func)
{
- var result = default(TResult);
- try
+ return await Task.Factory.StartNew(() =>
{
- result = func();
- }
- catch (MtConnectionException ex)
+ var result = default(TResult);
+ try
+ {
+ 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);
- }
- catch (MtExecutionException ex)
- {
- addToLog("MtExecutionException: " + ex.Message + "; ErrorCode = " + ex.ErrorCode);
+ case 0:
+ arrowColor = Color.Green;
+ break;
+ case 1:
+ 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
- private void button16_Click(object sender, EventArgs e)
+ private async void button16_Click(object sender, EventArgs e)
{
var ticket = int.Parse(textBoxIndexTicket.Text);
var selectMode = (OrderSelectMode) comboBox1.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)
{
@@ -909,17 +877,17 @@ namespace TestApiClientUI
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, 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
- private void button17_Click(object sender, EventArgs e)
+ private async void button17_Click(object sender, EventArgs e)
{
var selectSource = (OrderSelectSource)comboBox2.SelectedIndex;
- var orders = Execute(() => _apiClient.GetOrders(selectSource)); ;
+ var orders = await Execute(() => _apiClient.GetOrders(selectSource)); ;
if (orders != null)
{
@@ -929,13 +897,13 @@ namespace TestApiClientUI
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, 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
- private void button18_Click(object sender, EventArgs e)
+ private async void button18_Click(object sender, EventArgs e)
{
var symbol = textBoxOrderSymbol.Text;
@@ -944,14 +912,14 @@ namespace TestApiClientUI
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));
}
//OrderSendSell
- private void button19_Click(object sender, EventArgs e)
+ private async void button19_Click(object sender, EventArgs e)
{
var symbol = textBoxOrderSymbol.Text;
@@ -960,14 +928,14 @@ namespace TestApiClientUI
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));
}
//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 slippage = (int)numericOrderSlippage.Value;
@@ -976,7 +944,7 @@ namespace TestApiClientUI
if (checkBox1.Checked)
{
- closed = Execute(() => _apiClient.OrderClose(ticket, slippage));
+ closed = await Execute(() => _apiClient.OrderClose(ticket, slippage));
}
else
{
@@ -985,10 +953,21 @@ namespace TestApiClientUI
double 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));
}
}
}
diff --git a/mq4/MtApi.ex4 b/mq4/MtApi.ex4
index 98387f51..cd0b6fc8 100755
Binary files a/mq4/MtApi.ex4 and b/mq4/MtApi.ex4 differ
diff --git a/mq4/MtApi.mq4 b/mq4/MtApi.mq4
index 5820cae3..5e765c97 100755
--- a/mq4/MtApi.mq4
+++ b/mq4/MtApi.mq4
@@ -3419,6 +3419,9 @@ string OnRequest(string json)
case 4: //OrderClose
response = ExecuteRequestOrderClose(jo);
break;
+ case 5: //OrderCloseBy
+ response = ExecuteRequestOrderCloseBy(jo);
+ break;
default:
Print("OnRequest [WARNING]: Unknown request type ", requestType);
response = CreateErrorResponse(-1, "Unknown request type");
@@ -3624,4 +3627,22 @@ string ExecuteRequestOrderClose(JSONObject *jo)
if (!OrderClose(ticket, lots, price, slippage, arrowcolor))
return CreateErrorResponse(GetLastError(), "OrderClose failed");
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);
}
\ No newline at end of file