diff --git a/MtApi5/MtApi5Client.cs b/MtApi5/MtApi5Client.cs
index d788afdf..0b6bbdf9 100755
--- a/MtApi5/MtApi5Client.cs
+++ b/MtApi5/MtApi5Client.cs
@@ -2086,9 +2086,24 @@ namespace MtApi5
///Number of the chart subwindow. 0 means the main chart window. The specified subwindow must exist, otherwise the function returns false.
///The time coordinate of the first anchor.
///The price coordinate of the first anchor point.
- public bool ObjectCreate(long chartId, string name, ENUM_OBJECT type, int nwin, DateTime time, double price)
+ ///List of further anchor points (tuple of time and price).
+ public bool ObjectCreate(long chartId, string name, ENUM_OBJECT type, int nwin, DateTime time, double price, List> listOfCoordinates = null)
{
- var commandParameters = new ArrayList { chartId, name, (int)type, nwin, Mt5TimeConverter.ConvertToMtTime(time), price };
+ //Count the additional coordinates
+ int iAdditionalCoordinates = (listOfCoordinates != null) ? listOfCoordinates.Count() : 0;
+ if(iAdditionalCoordinates > 29)
+ {
+ throw new ArgumentOutOfRangeException("listOfCoordinates", "The maximum amount of coordinates in 30.");
+ }
+
+ int nParameter = 6 + iAdditionalCoordinates * 2;
+
+ var commandParameters = new ArrayList { nParameter, chartId, name, (int)type, nwin, Mt5TimeConverter.ConvertToMtTime(time), price };
+ foreach (Tuple coordinateTuple in listOfCoordinates)
+ {
+ commandParameters.Add(Mt5TimeConverter.ConvertToMtTime(coordinateTuple.Item1));
+ commandParameters.Add(coordinateTuple.Item2);
+ }
return SendCommand(Mt5CommandType.ObjectCreate, commandParameters);
}
diff --git a/mq5/MtApi5.ex5 b/mq5/MtApi5.ex5
index 6dabc94f..1d7dd9d0 100755
Binary files a/mq5/MtApi5.ex5 and b/mq5/MtApi5.ex5 differ
diff --git a/mq5/MtApi5.mq5 b/mq5/MtApi5.mq5
index 610efcbb..90dea82c 100644
--- a/mq5/MtApi5.mq5
+++ b/mq5/MtApi5.mq5
@@ -1,7 +1,7 @@
#property copyright "Vyacheslav Demidyuk"
#property link ""
-#property version "1.6"
+#property version "1.7"
#property description "MtApi (MT5) connection expert"
#include
@@ -3433,52 +3433,87 @@ void Execute_PositionSelectByTicket()
void Execute_ObjectCreate()
{
+ int nParameter = 0;
long chartId;
string name;
int type;
int nwin;
- int time;
- double price;
+ int time1;
+ double price1;
+ int arrTime[29];
+ double arrPrice[29];
StringInit(name, 200, 0);
- if (!getLongValue(ExpertHandle, 0, chartId, _error))
+ if (!getIntValue(ExpertHandle, 0, nParameter, _error))
+ {
+ PrintParamError("ObjectCreate", "nParameter", _error);
+ sendErrorResponse(ExpertHandle, -1, _error, _response_error);
+ return;
+ }
+
+ if (!getLongValue(ExpertHandle, 1, chartId, _error))
{
PrintParamError("ObjectCreate", "chartId", _error);
sendErrorResponse(ExpertHandle, -1, _error, _response_error);
return;
}
- if (!getStringValue(ExpertHandle, 1, name, _error))
+ if (!getStringValue(ExpertHandle, 2, name, _error))
{
PrintParamError("ObjectCreate", "name", _error);
sendErrorResponse(ExpertHandle, -1, _error, _response_error);
return;
}
- if (!getIntValue(ExpertHandle, 2, type, _error))
+ if (!getIntValue(ExpertHandle, 3, type, _error))
{
PrintParamError("ObjectCreate", "type", _error);
sendErrorResponse(ExpertHandle, -1, _error, _response_error);
return;
}
- if (!getIntValue(ExpertHandle, 3, nwin, _error))
+ if (!getIntValue(ExpertHandle, 4, nwin, _error))
{
PrintParamError("ObjectCreate", "nwin", _error);
sendErrorResponse(ExpertHandle, -1, _error, _response_error);
return;
}
- if (!getIntValue(ExpertHandle, 4, time, _error))
+ if (!getIntValue(ExpertHandle, 5, time1, _error))
{
- PrintParamError("ObjectCreate", "time", _error);
+ PrintParamError("ObjectCreate", "time1", _error);
sendErrorResponse(ExpertHandle, -1, _error, _response_error);
return;
}
- if (!getDoubleValue(ExpertHandle, 5, price, _error))
+ if (!getDoubleValue(ExpertHandle, 6, price1, _error))
{
- PrintParamError("ObjectCreate", "price", _error);
+ PrintParamError("ObjectCreate", "price1", _error);
sendErrorResponse(ExpertHandle, -1, _error, _response_error);
return;
}
- if (!sendBooleanResponse(ExpertHandle, ObjectCreate(chartId, name, (ENUM_OBJECT)type, nwin, (datetime)time, price), _response_error))
+ ArrayInitialize(arrTime, 0);
+ ArrayInitialize(arrPrice, 0);
+ for(int i = 0; i * 2 + 6 < nParameter; i++)
+ {
+ if (!getIntValue(ExpertHandle, i * 2 + 7, arrTime[i], _error))
+ {
+ PrintParamError("ObjectCreate", "time" + IntegerToString(i * 2 + 7), _error);
+ sendErrorResponse(ExpertHandle, -1, _error, _response_error);
+ return;
+ }
+ else if (!getDoubleValue(ExpertHandle, i * 2 + 8, arrPrice[i], _error))
+ {
+ PrintParamError("ObjectCreate", "price" + IntegerToString(i * 2 + 8), _error);
+ sendErrorResponse(ExpertHandle, -1, _error, _response_error);
+ return;
+ }
+ }
+
+ if (!sendBooleanResponse(ExpertHandle
+ ,ObjectCreate(chartId, name, (ENUM_OBJECT)type, nwin, (datetime)time1, price1
+ ,(datetime)arrTime[0], arrPrice[0],(datetime)arrTime[1], arrPrice[1],(datetime)arrTime[2], arrPrice[2],(datetime)arrTime[3], arrPrice[3],(datetime)arrTime[4], arrPrice[4],(datetime)arrTime[5], arrPrice[5]
+ ,(datetime)arrTime[6], arrPrice[6],(datetime)arrTime[7], arrPrice[7],(datetime)arrTime[8], arrPrice[8],(datetime)arrTime[9], arrPrice[9],(datetime)arrTime[10], arrPrice[10],(datetime)arrTime[11], arrPrice[11]
+ ,(datetime)arrTime[12], arrPrice[12],(datetime)arrTime[13], arrPrice[13],(datetime)arrTime[14], arrPrice[14],(datetime)arrTime[15], arrPrice[15],(datetime)arrTime[16], arrPrice[16],(datetime)arrTime[17], arrPrice[17]
+ ,(datetime)arrTime[18], arrPrice[18],(datetime)arrTime[19], arrPrice[19],(datetime)arrTime[20], arrPrice[20],(datetime)arrTime[21], arrPrice[21],(datetime)arrTime[22], arrPrice[22],(datetime)arrTime[23], arrPrice[23]
+ ,(datetime)arrTime[24], arrPrice[24],(datetime)arrTime[25], arrPrice[25],(datetime)arrTime[26], arrPrice[26],(datetime)arrTime[27], arrPrice[27],(datetime)arrTime[28], arrPrice[28])
+ , _response_error))
{
PrintResponseError("ObjectCreate", _response_error);
}