From 16f454ca61e55b97617706cd3338b6a6038f42f2 Mon Sep 17 00:00:00 2001 From: vdemydiuk Date: Tue, 13 Mar 2018 17:28:21 +0200 Subject: [PATCH] Implemented functions ChartTimePriceToXY, ChartXYToTimePrice (MT5) --- MtApi5/Mt5CommandType.cs | 4 +- MtApi5/MtApi5.csproj | 4 + MtApi5/MtApi5Client.cs | 54 +++++--------- MtApi5/Requests/ChartTimePriceToXyRequest.cs | 16 ++++ MtApi5/Requests/ChartTimePriceToXyResult.cs | 9 +++ MtApi5/Requests/ChartXyToTimePriceRequest.cs | 13 ++++ MtApi5/Requests/ChartXyToTimePriceResult.cs | 14 ++++ MtApi5/Requests/RequestType.cs | 4 +- TestClients/MtApi5TestClient/MainWindow.xaml | 29 ++++++-- TestClients/MtApi5TestClient/ViewModel.cs | 65 ++++++++++++++++- mq5/MtApi5.ex5 | Bin 565728 -> 583190 bytes mq5/MtApi5.mq5 | 73 +++++++++++++++++++ 12 files changed, 238 insertions(+), 47 deletions(-) create mode 100644 MtApi5/Requests/ChartTimePriceToXyRequest.cs create mode 100644 MtApi5/Requests/ChartTimePriceToXyResult.cs create mode 100644 MtApi5/Requests/ChartXyToTimePriceRequest.cs create mode 100644 MtApi5/Requests/ChartXyToTimePriceResult.cs diff --git a/MtApi5/Mt5CommandType.cs b/MtApi5/Mt5CommandType.cs index 87d809b4..522a6d8c 100755 --- a/MtApi5/Mt5CommandType.cs +++ b/MtApi5/Mt5CommandType.cs @@ -187,8 +187,8 @@ namespace MtApi5 ChartApplyTemplate = 236, ChartSaveTemplate = 237, ChartWindowFind = 238, - ChartTimePriceToXY = 239, - ChartXYToTimePrice = 240, + //ChartTimePriceToXY = 239, + //ChartXYToTimePrice = 240, ChartOpen = 241, ChartFirst = 242, ChartNext = 243, diff --git a/MtApi5/MtApi5.csproj b/MtApi5/MtApi5.csproj index ec727208..286efa50 100755 --- a/MtApi5/MtApi5.csproj +++ b/MtApi5/MtApi5.csproj @@ -73,6 +73,10 @@ + + + + diff --git a/MtApi5/MtApi5Client.cs b/MtApi5/MtApi5Client.cs index 4919acfc..cdf43c96 100755 --- a/MtApi5/MtApi5Client.cs +++ b/MtApi5/MtApi5Client.cs @@ -1578,22 +1578,17 @@ namespace MtApi5 /// public bool ChartTimePriceToXY(long chartId, int subWindow, DateTime? time, double price, out int x, out int y) { - var commandParameters = new ArrayList { chartId, subWindow, Mt5TimeConverter.ConvertToMtTime(time), price }; - var str = SendCommand(Mt5CommandType.ChartTimePriceToXY, commandParameters); - var res = false; - x = 0; - y = 0; - if (!string.IsNullOrEmpty(str) && str.Contains(";")) - { - var values = str.Split(';'); - if (values.Length > 1) + var result = SendRequest(new ChartTimePriceToXyRequest { - int.TryParse(values[0], out x); - int.TryParse(values[1], out y); - res = true; - } - } - return res; + ChartId = chartId, + SubWindow = subWindow, + Time = time, + Price = price + }); + + x = result?.X ?? 0; + y = result?.Y ?? 0; + return result?.RetVal ?? false; } /// @@ -1610,26 +1605,17 @@ namespace MtApi5 /// public bool ChartXYToTimePrice(long chartId, int x, int y, out int subWindow, out DateTime? time, out double price) { - var commandParameters = new ArrayList { chartId, x, y }; - var str = SendCommand(Mt5CommandType.ChartXYToTimePrice, commandParameters); - var res = false; - subWindow = 0; - time = null; - price = double.NaN; - if (!string.IsNullOrEmpty(str) && str.Contains(";")) + var result = SendRequest(new ChartXyToTimePriceRequest { - var values = str.Split(';'); - if (values.Length > 2) - { - int.TryParse(values[0], out subWindow); - int mt4Time; - int.TryParse(values[1], out mt4Time); - time = Mt5TimeConverter.ConvertFromMtTime(mt4Time); - double.TryParse(values[2], out price); - res = true; - } - } - return res; + ChartId = chartId, + X = x, + Y = y + }); + + subWindow = result?.SubWindow ?? 0; + time = result?.Time; + price = result?.Price ?? double.NaN; + return result?.RetVal ?? false; } /// diff --git a/MtApi5/Requests/ChartTimePriceToXyRequest.cs b/MtApi5/Requests/ChartTimePriceToXyRequest.cs new file mode 100644 index 00000000..7287a2e5 --- /dev/null +++ b/MtApi5/Requests/ChartTimePriceToXyRequest.cs @@ -0,0 +1,16 @@ +using System; + +namespace MtApi5.Requests +{ + internal class ChartTimePriceToXyRequest : RequestBase + { + public override RequestType RequestType => RequestType.ChartTimePriceToXY; + + public long ChartId { get; set; } + public int SubWindow { get; set; } + public DateTime? Time { get; set; } + public double Price { get; set; } + + public int MtTime => Mt5TimeConverter.ConvertToMtTime(Time); + } +} \ No newline at end of file diff --git a/MtApi5/Requests/ChartTimePriceToXyResult.cs b/MtApi5/Requests/ChartTimePriceToXyResult.cs new file mode 100644 index 00000000..4c74ee20 --- /dev/null +++ b/MtApi5/Requests/ChartTimePriceToXyResult.cs @@ -0,0 +1,9 @@ +namespace MtApi5.Requests +{ + internal class ChartTimePriceToXyResult + { + public bool RetVal { get; set; } + public int X { get; set; } + public int Y { get; set; } + } +} \ No newline at end of file diff --git a/MtApi5/Requests/ChartXyToTimePriceRequest.cs b/MtApi5/Requests/ChartXyToTimePriceRequest.cs new file mode 100644 index 00000000..871f6aae --- /dev/null +++ b/MtApi5/Requests/ChartXyToTimePriceRequest.cs @@ -0,0 +1,13 @@ +using System; + +namespace MtApi5.Requests +{ + internal class ChartXyToTimePriceRequest : RequestBase + { + public override RequestType RequestType => RequestType.ChartXYToTimePrice; + + public long ChartId { get; set; } + public int X { get; set; } + public int Y { get; set; } + } +} \ No newline at end of file diff --git a/MtApi5/Requests/ChartXyToTimePriceResult.cs b/MtApi5/Requests/ChartXyToTimePriceResult.cs new file mode 100644 index 00000000..dfd3f1d4 --- /dev/null +++ b/MtApi5/Requests/ChartXyToTimePriceResult.cs @@ -0,0 +1,14 @@ +using System; + +namespace MtApi5.Requests +{ + internal class ChartXyToTimePriceResult + { + public bool RetVal { get; set; } + public int SubWindow { get; set; } + public DateTime? Time => Mt5TimeConverter.ConvertFromMtTime(MtTime); + public double Price { get; set; } + + public int MtTime { get; set; } + } +} \ No newline at end of file diff --git a/MtApi5/Requests/RequestType.cs b/MtApi5/Requests/RequestType.cs index 1ba9024c..d0ac6c5a 100755 --- a/MtApi5/Requests/RequestType.cs +++ b/MtApi5/Requests/RequestType.cs @@ -12,6 +12,8 @@ namespace MtApi5.Requests OrderCheck = 5, MarketBookGet = 6, IndicatorCreate = 7, - SymbolInfoString = 8 + SymbolInfoString = 8, + ChartTimePriceToXY = 9, + ChartXYToTimePrice = 10 } } \ No newline at end of file diff --git a/TestClients/MtApi5TestClient/MainWindow.xaml b/TestClients/MtApi5TestClient/MainWindow.xaml index 65d502a7..9b5cb2d4 100755 --- a/TestClients/MtApi5TestClient/MainWindow.xaml +++ b/TestClients/MtApi5TestClient/MainWindow.xaml @@ -480,12 +480,29 @@ - - -