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="Requests\GetOrderRequest.cs" />
<Compile Include="Requests\GetOrdersRequest.cs" />
<Compile Include="Requests\OrderCloseByRequest.cs" />
<Compile Include="Requests\OrderCloseRequest.cs" />
<Compile Include="Requests\OrderSendRequest.cs" />
<Compile Include="Requests\RequestBase.cs" />
+92 -52
View File
@@ -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<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
@@ -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<OrderSendResponse>(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<OrderSendResponse>(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<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)
{
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)
{
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)
{
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.")]
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<bool>(MtCommandType.OrderCloseBy, commandParameters);
var response = SendRequest<ResponseBase>(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<ResponseBase>(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<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)
{
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);
+1 -1
View File
@@ -16,7 +16,7 @@ namespace MtApi
// OrderClose = 2,
// OrderCloseByCurrentPrice = 152,
OrderCloseBy = 3,
// OrderCloseBy = 3,
OrderClosePrice = 4,
OrderClosePriceByTicket = 1004,
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,
OrderSend = 3,
OrderClose = 4,
OrderCloseBy = 5
}
}
+50 -14
View File
@@ -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;
}
}
+160 -181
View File
@@ -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<TResult>(Func<TResult> func)
private async Task<TResult> Execute<TResult>(Func<TResult> 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));
}
}
}
BIN
View File
Binary file not shown.
+21
View File
@@ -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);
}