Reractored functions GetOrder and GetOrders in MQL part.

This commit is contained in:
DW
2016-05-12 17:42:13 +03:00
parent b8e6b1a973
commit ed5d6d9fb5
4 changed files with 126 additions and 76 deletions
-9
View File
@@ -1010,15 +1010,6 @@ namespace MtApi
public double iCustom(string symbol, int timeframe, string name, double[] parameters, int mode, int shift)
{
//var commandParameters = new ArrayList { symbol, timeframe, name };
//int arraySize = parameters != null ? parameters.Length : 0;
//commandParameters.Add(arraySize);
//commandParameters.AddRange(parameters);
//commandParameters.Add(mode);
//commandParameters.Add(shift);
//return SendCommand<double>(MtCommandType.iCustom_d, commandParameters);
var response = SendRequest<ICustomResponse>(new ICustomRequest
{
Symbol = symbol,
+6 -2
View File
@@ -4,7 +4,7 @@ using System.Drawing;
using System.Windows.Forms;
using MtApi;
using System.Threading.Tasks;
using System.Collections;
using System.Linq;
namespace TestApiClientUI
{
@@ -885,7 +885,7 @@ namespace TestApiClientUI
var orders = await Execute(() => _apiClient.GetOrders(selectSource)); ;
if (orders != null)
if (orders != null && orders.Count() > 0)
{
foreach (var order in orders)
{
@@ -896,6 +896,10 @@ namespace TestApiClientUI
AddToLog(result);
}
}
else
{
AddToLog("GetOrders: 0 orders");
}
}
//OrderSendBuy
BIN
View File
Binary file not shown.
+120 -65
View File
@@ -1,5 +1,7 @@
#property copyright "Vyacheslav Demidyuk"
#property link "DW"
#property link "http://mtapi4.net/"
#property version "1.1"
#property description "MtApi connection expert"
#include <WinUser32.mqh>
#include <stdlib.mqh>
@@ -126,6 +128,94 @@ double doubleValuesArray[];
double myBid;
double myAsk;
class MtOrder
{
public:
int getTicket() { return _ticket; }
string getSymbol() { return _symbol; }
int getOperation() { return _operation; }
double getOpenPrice() { return _openPrice; }
double getClosePrice() { return _closePrice; }
double getLots() { return _lots; }
double getProfit() { return _profit; }
string getComment() { return _comment; }
double getCommission() { return _commission; }
int getMagicNumber() { return _magicNumber; }
datetime getOpenTime() { return _openTime; }
datetime getCloseTime() { return _closeTime; }
double getSwap() { return _swap; }
datetime getExpiration() { return _expiration; }
static bool isLong(int operation)
{
if (operation == OP_BUY || operation == OP_BUYLIMIT || operation == OP_BUYSTOP)
return true;
return false;
}
JSONObject* CreateJson()
{
JSONObject *jo = new JSONObject();
jo.put("Ticket", new JSONNumber(_ticket));
jo.put("Symbol", new JSONString(_symbol));
jo.put("Operation", new JSONNumber(_operation));
jo.put("OpenPrice", new JSONNumber(_openPrice));
jo.put("ClosePrice", new JSONNumber(_closePrice));
jo.put("Lots", new JSONNumber(_lots));
jo.put("Profit", new JSONNumber(_profit));
jo.put("Comment", new JSONString(_comment));
jo.put("Commission", new JSONString(_commission));
jo.put("MagicNumber", new JSONNumber(_magicNumber));
jo.put("Commission", new JSONString(_commission));
jo.put("MagicNumber", new JSONNumber(_magicNumber));
jo.put("MtOpenTime", new JSONNumber(_openTime));
jo.put("MtCloseTime", new JSONNumber(_closeTime));
jo.put("Swap", new JSONNumber(_swap));
jo.put("MtExpiration", new JSONNumber(_expiration));
return jo;
}
static MtOrder* LoadOrder(int index, int select, int pool)
{
MtOrder* order = NULL;
if (OrderSelect(index, select, pool))
{
order = new MtOrder();
order._ticket = OrderTicket();
order._operation = OrderType();
order._openPrice = OrderOpenPrice();
order._closePrice = OrderClosePrice();
order._lots = OrderLots();
order._profit = OrderProfit();
order._comment = OrderComment();
order._commission = OrderCommission();
order._magicNumber = OrderMagicNumber();
order._openTime = OrderOpenTime();
order._closeTime = OrderCloseTime();
order._swap = OrderSwap();
order._expiration = OrderExpiration();
}
return order;
}
private:
int _ticket;
string _symbol;
int _operation;
double _openPrice;
double _closePrice;
double _lots;
double _profit;
string _comment;
double _commission;
int _magicNumber;
datetime _openTime;
datetime _closeTime;
double _swap;
datetime _expiration;
};
int preinit()
{
StringInit(message,200,0);
@@ -3448,90 +3538,55 @@ string OnRequest(string json)
return response;
}
JSONObject* GetOrderJson(int index, int select, int pool)
{
if (OrderSelect(index, select, pool) == false)
{
return NULL;
}
int ticket = OrderTicket();
string symbol = OrderSymbol();
int operation = OrderType();
double openPrice = OrderOpenPrice();
double closePrice = OrderClosePrice();
double lots = OrderLots();
double profit = OrderProfit();
string comment = OrderComment();
double commission = OrderCommission();
int magicNumber = OrderMagicNumber();
datetime openTime = OrderOpenTime();
datetime closeTime = OrderCloseTime();
double swap = OrderSwap();
datetime expiration = OrderExpiration();
JSONObject *joOrder = new JSONObject();
joOrder.put("Ticket", new JSONNumber(ticket));
joOrder.put("Symbol", new JSONString(symbol));
joOrder.put("Operation", new JSONNumber(operation));
joOrder.put("OpenPrice", new JSONNumber(openPrice));
joOrder.put("ClosePrice", new JSONNumber(closePrice));
joOrder.put("Lots", new JSONNumber(lots));
joOrder.put("Profit", new JSONNumber(profit));
joOrder.put("Comment", new JSONString(comment));
joOrder.put("Commission", new JSONString(commission));
joOrder.put("MagicNumber", new JSONNumber(magicNumber));
joOrder.put("Commission", new JSONString(commission));
joOrder.put("MagicNumber", new JSONNumber(magicNumber));
joOrder.put("MtOpenTime", new JSONNumber(openTime));
joOrder.put("MtCloseTime", new JSONNumber(closeTime));
joOrder.put("Swap", new JSONNumber(swap));
joOrder.put("MtExpiration", new JSONNumber(expiration));
return joOrder;
}
string ExecuteRequest_GetOrder(JSONObject *jo)
{
if (jo.getValue("Index") == NULL)
return CreateErrorResponse(-1, "Undefinded mandatory parameter Index");
if (jo.getValue("Select") == NULL)
return CreateErrorResponse(-1, "Undefinded mandatory parameter Select");
if (jo.getValue("Pool") == NULL)
return CreateErrorResponse(-1, "Undefinded mandatory parameter Pool");
int index = jo.getInt("Index");
int select = jo.getInt("Select");
int pool = jo.getInt("Pool");
Print("ExecuteRequestGetOrder: Index = ", index, "; Select = ", select, "; Pool = ", pool);
JSONObject* joOrder = GetOrderJson(index, select, pool);
if (joOrder == NULL)
MtOrder* order = MtOrder::LoadOrder(index, select, pool);
if (order == NULL)
return CreateErrorResponse(GetLastError(), "GetOrder failed");
return CreateSuccessResponse("Order", joOrder);
string response = CreateSuccessResponse("Order", order.CreateJson());
delete order;
return response;
}
string ExecuteRequest_GetOrders(JSONObject *jo)
{
int pool = jo.getInt("Pool");
if (jo.getValue("Pool") == NULL)
return CreateErrorResponse(-1, "Undefinded mandatory parameter Pool");
Print("ExecuteRequestGetOrders: Pool = ", pool);
int pool = jo.getInt("Pool");
int total = (pool == MODE_HISTORY) ? OrdersHistoryTotal() : OrdersTotal();
JSONArray* joOrders = new JSONArray();
for(int pos = 0; pos < 10000; pos++)
for(int pos = 0; pos < total; pos++)
{
JSONObject* joOrder = GetOrderJson(0, SELECT_BY_POS, pool);
if (joOrder == NULL)
return CreateErrorResponse(GetLastError(), "GetOrders failed");
joOrders.put(pos, joOrder);
MtOrder* order = MtOrder::LoadOrder(pos, SELECT_BY_POS, pool);
if (order == NULL)
{
delete joOrders;
return CreateErrorResponse(GetLastError(), "GetOrders failed");
}
joOrders.put(pos, order.CreateJson());
delete order;
}
return CreateSuccessResponse("Orders", joOrders);
}
bool isLongOperation(int operation)
{
if (operation == OP_BUY || operation == OP_BUYLIMIT || operation == OP_BUYSTOP)
return true;
return false;
}
string ExecuteRequest_OrderSend(JSONObject *jo)
{
if (jo.getValue("Symbol") == NULL)
@@ -3554,7 +3609,7 @@ string ExecuteRequest_OrderSend(JSONObject *jo)
}
else
{
int mode = isLongOperation(cmd) ? MODE_ASK : MODE_BID;
int mode = MtOrder::isLong(cmd) ? MODE_ASK : MODE_BID;
price = MarketInfo(symbol, mode);
}
@@ -3605,7 +3660,7 @@ string ExecuteRequest_OrderClose(JSONObject *jo)
if (OrderSelect(ticket, SELECT_BY_TICKET))
{
string symbol = OrderSymbol();
int mode = isLongOperation(OrderType()) ? MODE_BID : MODE_ASK;
int mode = MtOrder::isLong(OrderType()) ? MODE_BID : MODE_ASK;
price = MarketInfo(symbol, mode);
}
else