diff --git a/MtApi/ChartEventArgs.cs b/MtApi/ChartEventArgs.cs
new file mode 100644
index 00000000..79f534ea
--- /dev/null
+++ b/MtApi/ChartEventArgs.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace MtApi
+{
+ public class ChartEventArgs : EventArgs
+ {
+ internal ChartEventArgs(int expertHandle, MtChartEvent chartEvent)
+ {
+ ExpertHandle = expertHandle;
+ ChartId = chartEvent.ChartId;
+ EventId = chartEvent.EventId;
+ Lparam = chartEvent.Lparam;
+ Dparam = chartEvent.Dparam;
+ Sparam = chartEvent.Sparam;
+ }
+
+ public int ExpertHandle { get; }
+ public long ChartId { get; }
+ public int EventId { get; }
+ public long Lparam { get; }
+ public double Dparam { get; }
+ public string Sparam { get; }
+ }
+}
\ No newline at end of file
diff --git a/MtApi/EnumChartEvent.cs b/MtApi/EnumChartEvent.cs
new file mode 100644
index 00000000..a27c10eb
--- /dev/null
+++ b/MtApi/EnumChartEvent.cs
@@ -0,0 +1,18 @@
+namespace MtApi
+{
+ public enum EnumChartEvent
+ {
+ CHARTEVENT_KEYDOWN = 0,
+ CHARTEVENT_MOUSE_MOVE = 10,
+ CHARTEVENT_OBJECT_CREATE = 7,
+ CHARTEVENT_OBJECT_CHANGE = 8,
+ CHARTEVENT_OBJECT_DELETE = 6,
+ CHARTEVENT_CLICK = 4,
+ CHARTEVENT_OBJECT_CLICK = 1,
+ CHARTEVENT_OBJECT_DRAG = 2,
+ CHARTEVENT_OBJECT_ENDEDIT = 3,
+ CHARTEVENT_CHART_CHANGE = 9,
+ CHARTEVENT_CUSTOM = 1000,
+ CHARTEVENT_CUSTOM_LAST = 66534
+ }
+}
\ No newline at end of file
diff --git a/MtApi/MtApi.csproj b/MtApi/MtApi.csproj
index b6e7a415..3a7b9699 100755
--- a/MtApi/MtApi.csproj
+++ b/MtApi/MtApi.csproj
@@ -58,6 +58,7 @@
+
@@ -77,6 +78,7 @@
+
diff --git a/MtApi/MtApiClient.cs b/MtApi/MtApiClient.cs
index f4becd06..83756173 100755
--- a/MtApi/MtApiClient.cs
+++ b/MtApi/MtApiClient.cs
@@ -3068,18 +3068,24 @@ namespace MtApi
switch(eventType)
{
case MtEventTypes.LastTimeBar:
- {
- FireOnLastTimeBar(JsonConvert.DeserializeObject(e.Payload));
- }
+ FireOnLastTimeBar(e.ExpertHandle, JsonConvert.DeserializeObject(e.Payload));
+ break;
+ case MtEventTypes.ChartEvent:
+ FireOnChartEvent(e.ExpertHandle, JsonConvert.DeserializeObject(e.Payload));
break;
default:
throw new ArgumentOutOfRangeException();
}
}
- private void FireOnLastTimeBar(MtTimeBar timeBar)
+ private void FireOnLastTimeBar(int expertHandler, MtTimeBar timeBar)
{
- OnLastTimeBar?.Invoke(this, new TimeBarArgs(timeBar));
+ OnLastTimeBar?.Invoke(this, new TimeBarArgs(expertHandler, timeBar));
+ }
+
+ private void FireOnChartEvent(int expertHandler, MtChartEvent chartEvent)
+ {
+ OnChartEvent?.Invoke(this, new ChartEventArgs(expertHandler, chartEvent));
}
private void BacktestingReady()
@@ -3097,6 +3103,7 @@ namespace MtApi
public event EventHandler QuoteRemoved;
public event EventHandler ConnectionStateChanged;
public event EventHandler OnLastTimeBar;
+ public event EventHandler OnChartEvent;
#endregion
}
diff --git a/MtApi/MtChartEvent.cs b/MtApi/MtChartEvent.cs
new file mode 100644
index 00000000..838d2af9
--- /dev/null
+++ b/MtApi/MtChartEvent.cs
@@ -0,0 +1,11 @@
+namespace MtApi
+{
+ internal class MtChartEvent
+ {
+ public long ChartId { get; set; }
+ public int EventId { get; set; }
+ public long Lparam { get; set; }
+ public double Dparam { get; set; }
+ public string Sparam { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/MtApi/MtEventTypes.cs b/MtApi/MtEventTypes.cs
index 28616df7..735f20c4 100644
--- a/MtApi/MtEventTypes.cs
+++ b/MtApi/MtEventTypes.cs
@@ -2,6 +2,7 @@
{
public enum MtEventTypes
{
- LastTimeBar = 1
+ LastTimeBar = 1,
+ ChartEvent = 2
}
}
diff --git a/MtApi/MtTimeBar.cs b/MtApi/MtTimeBar.cs
index dfb1208a..5cb01da4 100644
--- a/MtApi/MtTimeBar.cs
+++ b/MtApi/MtTimeBar.cs
@@ -11,16 +11,7 @@ namespace MtApi
public double Close { get; set; }
public double High { get; set; }
public double Low { get; set; }
-
- public DateTime OpenTime
- {
- get { return MtApiTimeConverter.ConvertFromMtTime(MtOpenTime); }
- }
-
- public DateTime CloseTime
- {
- get { return MtApiTimeConverter.ConvertFromMtTime(MtCloseTime); }
- }
-
+ public DateTime OpenTime => MtApiTimeConverter.ConvertFromMtTime(MtOpenTime);
+ public DateTime CloseTime => MtApiTimeConverter.ConvertFromMtTime(MtCloseTime);
}
}
diff --git a/MtApi/Properties/AssemblyInfo.cs b/MtApi/Properties/AssemblyInfo.cs
index bd74ab33..249e6ea5 100644
--- a/MtApi/Properties/AssemblyInfo.cs
+++ b/MtApi/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.37.0")]
-[assembly: AssemblyFileVersion("1.0.37.0")]
\ No newline at end of file
+[assembly: AssemblyVersion("1.0.38.0")]
+[assembly: AssemblyFileVersion("1.0.38.0")]
\ No newline at end of file
diff --git a/MtApi/TimeBarArgs.cs b/MtApi/TimeBarArgs.cs
index 10694b75..93ddad01 100644
--- a/MtApi/TimeBarArgs.cs
+++ b/MtApi/TimeBarArgs.cs
@@ -4,11 +4,18 @@ namespace MtApi
{
public class TimeBarArgs: EventArgs
{
+ internal TimeBarArgs(int expertHandle, MtTimeBar timeBar)
+ : this(timeBar)
+ {
+ ExpertHandle = expertHandle;
+ }
+
public TimeBarArgs(MtTimeBar timeBar)
{
TimeBar = timeBar;
}
- public MtTimeBar TimeBar { get; private set; }
+ public int ExpertHandle { get; }
+ public MtTimeBar TimeBar { get; }
}
}
diff --git a/MtApi5/Mt5CommandType.cs b/MtApi5/Mt5CommandType.cs
index 3b468ebc..8a8aab49 100755
--- a/MtApi5/Mt5CommandType.cs
+++ b/MtApi5/Mt5CommandType.cs
@@ -114,5 +114,7 @@ namespace MtApi5
//Requests
MtRequest = 155,
+
+ PositionSelectByTicket = 69
}
}
diff --git a/MtApi5/MtApi5Client.cs b/MtApi5/MtApi5Client.cs
index 8352c369..33bf084b 100755
--- a/MtApi5/MtApi5Client.cs
+++ b/MtApi5/MtApi5Client.cs
@@ -223,6 +223,17 @@ namespace MtApi5
return SendCommand(Mt5CommandType.PositionSelect, commandParameters);
}
+ ///
+ ///Selects an open position to work with based on the ticket number specified in the position. If successful, returns true. Returns false if the function failed.
+ ///
+ ///Position ticket.
+ public bool PositionSelectByTicket(ulong ticket)
+ {
+ var commandParameters = new ArrayList { ticket };
+
+ return SendCommand(Mt5CommandType.PositionSelectByTicket, commandParameters);
+ }
+
///
///The function returns the requested property of an open position, pre-selected using PositionGetSymbol or PositionSelect.
///
diff --git a/TestClients/TestApiClientUI/Form1.cs b/TestClients/TestApiClientUI/Form1.cs
index b2b4b819..acf0bf87 100644
--- a/TestClients/TestApiClientUI/Form1.cs
+++ b/TestClients/TestApiClientUI/Form1.cs
@@ -42,6 +42,7 @@ namespace TestApiClientUI
_apiClient.QuoteRemoved += apiClient_QuoteRemoved;
_apiClient.ConnectionStateChanged += apiClient_ConnectionStateChanged;
_apiClient.OnLastTimeBar += _apiClient_OnLastTimeBar;
+ _apiClient.OnChartEvent += _apiClient_OnChartEvent;
InitOrderCommandsGroup();
@@ -134,7 +135,15 @@ namespace TestApiClientUI
private void _apiClient_OnLastTimeBar(object sender, TimeBarArgs e)
{
var msg =
- $"TimeBar: Symbol = {e.TimeBar.Symbol}, OpenTime = {e.TimeBar.OpenTime}, CloseTime = {e.TimeBar.CloseTime}, Open = {e.TimeBar.Open}, Close = {e.TimeBar.Close}, High = {e.TimeBar.High}, Low = {e.TimeBar.Low}";
+ $"TimeBar: ExpertHandle = {e.ExpertHandle}, Symbol = {e.TimeBar.Symbol}, OpenTime = {e.TimeBar.OpenTime}, CloseTime = {e.TimeBar.CloseTime}, Open = {e.TimeBar.Open}, Close = {e.TimeBar.Close}, High = {e.TimeBar.High}, Low = {e.TimeBar.Low}";
+ Console.WriteLine(msg);
+ PrintLog(msg);
+ }
+
+ private void _apiClient_OnChartEvent(object sender, ChartEventArgs e)
+ {
+ var msg =
+ $"OnChartEvent: ExpertHandle = {e.ExpertHandle}, ChartId = {e.ChartId}, EventId = {e.EventId}, Lparam = {e.Lparam}, Dparam = {e.Dparam}, Sparam = {e.Sparam}";
Console.WriteLine(msg);
PrintLog(msg);
}
diff --git a/mq4/MtApi.ex4 b/mq4/MtApi.ex4
index 44d817ce..f26b7368 100755
Binary files a/mq4/MtApi.ex4 and b/mq4/MtApi.ex4 differ
diff --git a/mq4/MtApi.mq4 b/mq4/MtApi.mq4
index fb232bbe..3d461b73 100755
Binary files a/mq4/MtApi.mq4 and b/mq4/MtApi.mq4 differ
diff --git a/mq5/MtApi5.ex5 b/mq5/MtApi5.ex5
index 000963b3..da066927 100755
Binary files a/mq5/MtApi5.ex5 and b/mq5/MtApi5.ex5 differ
diff --git a/mq5/MtApi5.mq5 b/mq5/MtApi5.mq5
index c3501f59..bc4e935a 100755
--- a/mq5/MtApi5.mq5
+++ b/mq5/MtApi5.mq5
@@ -1719,15 +1719,19 @@ int executeCommand()
case 68: //Print
{
- string printMsg;
- StringInit(printMsg, 1000, 0);
+ string printMsg;
+ StringInit(printMsg, 1000, 0);
- getStringValue(ExpertHandle, 0, printMsg);
+ getStringValue(ExpertHandle, 0, printMsg);
- Print(printMsg);
- sendBooleanResponse(ExpertHandle, true);
+ Print(printMsg);
+ sendBooleanResponse(ExpertHandle, true);
}
break;
+
+ case 69: //PositionSelectByTicket
+ Execute_PositionSelectByTicket();
+ break;
default:
Print("Unknown command type = ", commandType);
@@ -1738,6 +1742,13 @@ int executeCommand()
return (commandType);
}
+void Execute_PositionSelectByTicket()
+{
+ ulong ticket;
+ getULongValue(ExpertHandle, 0, ticket);
+ sendBooleanResponse(ExpertHandle, PositionSelectByTicket(ticket));
+}
+
void PrintParamError(string paramName)
{
Print("[ERROR] parameter: ", paramName);