Issue #33: Implemented function SeriesInfoInteger (MtApi MT4)

This commit is contained in:
vdemydiuk
2016-11-13 23:24:38 +02:00
parent 6d4b5f4c00
commit c64417474a
31 changed files with 152 additions and 132 deletions
+10
View File
@@ -0,0 +1,10 @@
namespace MtApi
{
public enum EnumSeriesInfoInteger
{
SERIES_BARS_COUNT = 0,
SERIES_FIRSTDATE = 1,
SERIES_LASTBAR_DATE = 5,
SERIES_SERVER_FIRSTDATE = 2
}
}
+3 -8
View File
@@ -4,7 +4,7 @@ namespace MtApi.Monitors
public class TimeframeTradeMonitor : TradeMonitor public class TimeframeTradeMonitor : TradeMonitor
{ {
#region Fields #region Fields
private volatile bool _isStarted = false; private volatile bool _isStarted;
#endregion #endregion
#region ctor #region ctor
@@ -23,13 +23,8 @@ namespace MtApi.Monitors
// Returns: // Returns:
// true if PositionMonitor should check orders // true if PositionMonitor should check orders
// otherwise, false. // otherwise, false.
public override bool IsStarted public override bool IsStarted => _isStarted;
{
get
{
return _isStarted;
}
}
#endregion #endregion
#region Protected Methods #region Protected Methods
+6 -15
View File
@@ -13,7 +13,7 @@ namespace MtApi.Monitors
#endregion #endregion
#region ctor #region ctor
public TradeMonitor(MtApiClient apiClient) protected TradeMonitor(MtApiClient apiClient)
{ {
if (apiClient == null) if (apiClient == null)
throw new ArgumentNullException(nameof(apiClient)); throw new ArgumentNullException(nameof(apiClient));
@@ -73,13 +73,7 @@ namespace MtApi.Monitors
protected abstract void OnMtConnected(); protected abstract void OnMtConnected();
protected abstract void OnMtDisconnected(); protected abstract void OnMtDisconnected();
public bool IsMtConnected public bool IsMtConnected => _apiClient.ConnectionState == MtConnectionState.Connected;
{
get
{
return _apiClient.ConnectionState == MtConnectionState.Connected;
}
}
protected void Check() protected void Check()
{ {
@@ -113,12 +107,12 @@ namespace MtApi.Monitors
prevOrders = _prevOrders; prevOrders = _prevOrders;
} }
if (_prevOrders != null) //skip checking on first load orders if (prevOrders != null) //skip checking on first load orders
{ {
//check open orders //check open orders
foreach (var order in tradesOrders) foreach (var order in tradesOrders)
{ {
if (_prevOrders.Find(a => a.Ticket == order.Ticket) == null) if (prevOrders.Find(a => a.Ticket == order.Ticket) == null)
{ {
openedOrders.Add(order); openedOrders.Add(order);
} }
@@ -126,7 +120,7 @@ namespace MtApi.Monitors
//check closed orders //check closed orders
var closeOrdersTemp = new List<MtOrder>(); var closeOrdersTemp = new List<MtOrder>();
foreach (var order in _prevOrders) foreach (var order in prevOrders)
{ {
if (tradesOrders.Find(a => a.Ticket == order.Ticket) == null) if (tradesOrders.Find(a => a.Ticket == order.Ticket) == null)
{ {
@@ -180,10 +174,7 @@ namespace MtApi.Monitors
_prevOrders = null; _prevOrders = null;
} }
Task.Factory.StartNew(() => Task.Factory.StartNew(Check);
{
Check();
});
} }
#endregion #endregion
} }
+3
View File
@@ -59,6 +59,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ChartPeriod.cs" /> <Compile Include="ChartPeriod.cs" />
<Compile Include="EnumSeriesInfoInteger.cs" />
<Compile Include="EnumSymbolInfoInteger.cs" /> <Compile Include="EnumSymbolInfoInteger.cs" />
<Compile Include="ExtensionMethods.cs" /> <Compile Include="ExtensionMethods.cs" />
<Compile Include="Monitors\AvailabilityOrdersEventArgs.cs" /> <Compile Include="Monitors\AvailabilityOrdersEventArgs.cs" />
@@ -92,6 +93,7 @@
<Compile Include="Requests\OrderDeleteRequest.cs" /> <Compile Include="Requests\OrderDeleteRequest.cs" />
<Compile Include="Requests\OrderModifyRequest.cs" /> <Compile Include="Requests\OrderModifyRequest.cs" />
<Compile Include="Requests\OrderSendRequest.cs" /> <Compile Include="Requests\OrderSendRequest.cs" />
<Compile Include="Requests\SeriesInfoIntegerRequest.cs" />
<Compile Include="Requests\SessionRequest.cs" /> <Compile Include="Requests\SessionRequest.cs" />
<Compile Include="Requests\RequestBase.cs" /> <Compile Include="Requests\RequestBase.cs" />
<Compile Include="Requests\RequestType.cs" /> <Compile Include="Requests\RequestType.cs" />
@@ -100,6 +102,7 @@
<Compile Include="Responses\GetOrdersResponse.cs" /> <Compile Include="Responses\GetOrdersResponse.cs" />
<Compile Include="Responses\ICustomResponse.cs" /> <Compile Include="Responses\ICustomResponse.cs" />
<Compile Include="Responses\OrderSendResponse.cs" /> <Compile Include="Responses\OrderSendResponse.cs" />
<Compile Include="Responses\SeriesInfoIntegerResponse.cs" />
<Compile Include="Responses\SessionResponse.cs" /> <Compile Include="Responses\SessionResponse.cs" />
<Compile Include="Responses\ResponseBase.cs" /> <Compile Include="Responses\ResponseBase.cs" />
<Compile Include="SeriesIdentifier.cs" /> <Compile Include="SeriesIdentifier.cs" />
+12
View File
@@ -1466,6 +1466,18 @@ namespace MtApi
return response?.Rates; return response?.Rates;
} }
public long SeriesInfoInteger(string symbolName, ENUM_TIMEFRAMES timeframe, EnumSeriesInfoInteger propId)
{
var response = SendRequest<SeriesInfoIntegerResponse>(new SeriesInfoIntegerRequest
{
SymbolName = symbolName,
Timeframe = (int)timeframe,
PropId = (int)propId
});
return response?.Value ?? 0;
}
#endregion #endregion
#region Checkup #region Checkup
+9 -27
View File
@@ -1,12 +1,6 @@
using System; namespace MtApi.Requests
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MtApi.Requests
{ {
public abstract class CopyRatesRequestBase : RequestBase internal abstract class CopyRatesRequestBase : RequestBase
{ {
public enum CopyRatesTypeEnum public enum CopyRatesTypeEnum
{ {
@@ -15,10 +9,7 @@ namespace MtApi.Requests
CopyRates_3 = 3, CopyRates_3 = 3,
} }
public override RequestType RequestType public override RequestType RequestType => RequestType.CopyRates;
{
get { return RequestType.CopyRates; }
}
public abstract CopyRatesTypeEnum CopyRatesType { get; } public abstract CopyRatesTypeEnum CopyRatesType { get; }
@@ -26,34 +17,25 @@ namespace MtApi.Requests
public ENUM_TIMEFRAMES Timeframe { get; set; } public ENUM_TIMEFRAMES Timeframe { get; set; }
} }
public class CopyRates1Request : CopyRatesRequestBase internal class CopyRates1Request : CopyRatesRequestBase
{ {
public override CopyRatesTypeEnum CopyRatesType public override CopyRatesTypeEnum CopyRatesType => CopyRatesTypeEnum.CopyRates_1;
{
get { return CopyRatesTypeEnum.CopyRates_1; }
}
public int StartPos { get; set; } public int StartPos { get; set; }
public int Count { get; set; } public int Count { get; set; }
} }
public class CopyRates2Request : CopyRatesRequestBase internal class CopyRates2Request : CopyRatesRequestBase
{ {
public override CopyRatesTypeEnum CopyRatesType public override CopyRatesTypeEnum CopyRatesType => CopyRatesTypeEnum.CopyRates_2;
{
get { return CopyRatesTypeEnum.CopyRates_2; }
}
public int StartTime { get; set; } public int StartTime { get; set; }
public int Count { get; set; } public int Count { get; set; }
} }
public class CopyRates3Request : CopyRatesRequestBase internal class CopyRates3Request : CopyRatesRequestBase
{ {
public override CopyRatesTypeEnum CopyRatesType public override CopyRatesTypeEnum CopyRatesType => CopyRatesTypeEnum.CopyRates_3;
{
get { return CopyRatesTypeEnum.CopyRates_3; }
}
public int StartTime { get; set; } public int StartTime { get; set; }
public int StopTime { get; set; } public int StopTime { get; set; }
+2 -5
View File
@@ -1,14 +1,11 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class GetOrderRequest: RequestBase internal class GetOrderRequest: RequestBase
{ {
public int Index { get; set; } public int Index { get; set; }
public int Select { get; set; } public int Select { get; set; }
public int Pool { get; set; } public int Pool { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.GetOrder;
{
get { return RequestType.GetOrder; }
}
} }
} }
+2 -5
View File
@@ -1,12 +1,9 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class GetOrdersRequest: RequestBase internal class GetOrdersRequest: RequestBase
{ {
public int Pool { get; set; } public int Pool { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.GetOrders;
{
get { return RequestType.GetOrders; }
}
} }
} }
Regular → Executable
+3 -8
View File
@@ -1,10 +1,8 @@
 using System.Collections;
using System;
using System.Collections;
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class ICustomRequest : RequestBase internal class ICustomRequest : RequestBase
{ {
public enum ParametersType public enum ParametersType
{ {
@@ -22,9 +20,6 @@ namespace MtApi.Requests
public ArrayList Params { get; set; } public ArrayList Params { get; set; }
public ParametersType ParamsType { get; set; } public ParametersType ParamsType { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.iCustom;
{
get { return RequestType.iCustom; }
}
} }
} }
+2 -5
View File
@@ -1,15 +1,12 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class OrderCloseByRequest: RequestBase internal class OrderCloseByRequest: RequestBase
{ {
public int Ticket { get; set; } public int Ticket { get; set; }
public int Opposite { get; set; } public int Opposite { get; set; }
public int? ArrowColor { get; set; } public int? ArrowColor { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.OrderCloseBy;
{
get { return RequestType.OrderCloseBy; }
}
} }
} }
+2 -5
View File
@@ -1,6 +1,6 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class OrderCloseRequest: RequestBase internal class OrderCloseRequest: RequestBase
{ {
public int Ticket { get; set; } public int Ticket { get; set; }
@@ -9,9 +9,6 @@
public int? Slippage { get; set; } public int? Slippage { get; set; }
public int? ArrowColor { get; set; } public int? ArrowColor { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.OrderClose;
{
get { return RequestType.OrderClose; }
}
} }
} }
+2 -5
View File
@@ -1,14 +1,11 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class OrderDeleteRequest: RequestBase internal class OrderDeleteRequest: RequestBase
{ {
public int Ticket { get; set; } public int Ticket { get; set; }
public int? ArrowColor { get; set; } public int? ArrowColor { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.OrderDelete;
{
get { return RequestType.OrderDelete; }
}
} }
} }
+2 -5
View File
@@ -1,6 +1,6 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class OrderModifyRequest: RequestBase internal class OrderModifyRequest: RequestBase
{ {
public int Ticket { get; set; } public int Ticket { get; set; }
public double Price { get; set; } public double Price { get; set; }
@@ -10,9 +10,6 @@
public int? ArrowColor { get; set; } public int? ArrowColor { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.OrderModify;
{
get { return RequestType.OrderModify; }
}
} }
} }
+2 -5
View File
@@ -1,6 +1,6 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class OrderSendRequest: RequestBase internal class OrderSendRequest: RequestBase
{ {
public string Symbol { get; set; } public string Symbol { get; set; }
public int Cmd { get; set; } public int Cmd { get; set; }
@@ -15,9 +15,6 @@
public int? Expiration { get; set; } public int? Expiration { get; set; }
public int? ArrowColor { get; set; } public int? ArrowColor { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.OrderSend;
{
get { return RequestType.OrderSend; }
}
} }
} }
+2 -4
View File
@@ -1,8 +1,6 @@
using Newtonsoft.Json; namespace MtApi.Requests
namespace MtApi.Requests
{ {
public abstract class RequestBase internal abstract class RequestBase
{ {
public abstract RequestType RequestType { get; } public abstract RequestType RequestType { get; }
} }
+13 -12
View File
@@ -1,17 +1,18 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public enum RequestType internal enum RequestType
{ {
Unknown = 0, Unknown = 0,
GetOrder = 1, GetOrder = 1,
GetOrders = 2, GetOrders = 2,
OrderSend = 3, OrderSend = 3,
OrderClose = 4, OrderClose = 4,
OrderCloseBy = 5, OrderCloseBy = 5,
OrderDelete = 6, OrderDelete = 6,
OrderModify = 7, OrderModify = 7,
iCustom = 8, iCustom = 8,
CopyRates = 9, CopyRates = 9,
Session = 10, Session = 10,
SeriesInfoInteger = 11
} }
} }
+11
View File
@@ -0,0 +1,11 @@
namespace MtApi.Requests
{
internal class SeriesInfoIntegerRequest: RequestBase
{
public override RequestType RequestType => RequestType.SeriesInfoInteger;
public string SymbolName { get; set; }
public int Timeframe { get; set; }
public int PropId { get; set; }
}
}
+2 -5
View File
@@ -2,16 +2,13 @@
namespace MtApi.Requests namespace MtApi.Requests
{ {
public class SessionRequest : RequestBase internal class SessionRequest : RequestBase
{ {
public string Symbol { get; set; } public string Symbol { get; set; }
public DayOfWeek DayOfWeek { get; set; } public DayOfWeek DayOfWeek { get; set; }
public int SessionIndex { get; set; } public int SessionIndex { get; set; }
public SessionType SessionType { get; set; } public SessionType SessionType { get; set; }
public override RequestType RequestType public override RequestType RequestType => RequestType.Session;
{
get { return RequestType.Session; }
}
} }
} }
+1 -1
View File
@@ -2,7 +2,7 @@
namespace MtApi.Responses namespace MtApi.Responses
{ {
public class CopyRatesResponse: ResponseBase internal class CopyRatesResponse: ResponseBase
{ {
public List<MqlRates> Rates { get; set; } public List<MqlRates> Rates { get; set; }
} }
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MtApi.Responses namespace MtApi.Responses
{ {
public class GetOrderResponse: ResponseBase internal class GetOrderResponse: ResponseBase
{ {
public MtOrder Order { get; set; } public MtOrder Order { get; set; }
} }
+1 -1
View File
@@ -2,7 +2,7 @@
namespace MtApi.Responses namespace MtApi.Responses
{ {
public class GetOrdersResponse: ResponseBase internal class GetOrdersResponse: ResponseBase
{ {
public List<MtOrder> Orders { get; set; } public List<MtOrder> Orders { get; set; }
} }
+2 -8
View File
@@ -1,12 +1,6 @@
using System; namespace MtApi.Responses
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MtApi.Responses
{ {
public class ICustomResponse: ResponseBase internal class ICustomResponse: ResponseBase
{ {
public double Value { get; set; } public double Value { get; set; }
} }
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MtApi.Responses namespace MtApi.Responses
{ {
public class OrderSendResponse: ResponseBase internal class OrderSendResponse: ResponseBase
{ {
public int Ticket { get; set; } public int Ticket { get; set; }
} }
Regular → Executable
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MtApi.Responses namespace MtApi.Responses
{ {
public class ResponseBase internal class ResponseBase
{ {
public int ErrorCode { get; set; } public int ErrorCode { get; set; }
public string ErrorMessage { get; set; } public string ErrorMessage { get; set; }
+7
View File
@@ -0,0 +1,7 @@
namespace MtApi.Responses
{
internal class SeriesInfoIntegerResponse: ResponseBase
{
public long Value { get; set; }
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MtApi.Responses namespace MtApi.Responses
{ {
public class SessionResponse : ResponseBase internal class SessionResponse : ResponseBase
{ {
public MtSession Session { get; set; } public MtSession Session { get; set; }
} }
+30
View File
@@ -154,6 +154,8 @@
this.button28 = new System.Windows.Forms.Button(); this.button28 = new System.Windows.Forms.Button();
this.label28 = new System.Windows.Forms.Label(); this.label28 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox1 = new System.Windows.Forms.TextBox();
this.button31 = new System.Windows.Forms.Button();
this.comboBox5 = new System.Windows.Forms.ComboBox();
this.groupBox1.SuspendLayout(); this.groupBox1.SuspendLayout();
this.statusStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout();
this.groupBox2.SuspendLayout(); this.groupBox2.SuspendLayout();
@@ -1109,6 +1111,8 @@
// //
// tabPage5 // tabPage5
// //
this.tabPage5.Controls.Add(this.comboBox5);
this.tabPage5.Controls.Add(this.button31);
this.tabPage5.Controls.Add(this.dateTimePicker2); this.tabPage5.Controls.Add(this.dateTimePicker2);
this.tabPage5.Controls.Add(this.dateTimePicker1); this.tabPage5.Controls.Add(this.dateTimePicker1);
this.tabPage5.Controls.Add(this.label6); this.tabPage5.Controls.Add(this.label6);
@@ -1546,6 +1550,30 @@
this.textBox1.TabIndex = 0; this.textBox1.TabIndex = 0;
this.textBox1.Text = "EURUSD"; this.textBox1.Text = "EURUSD";
// //
// button31
//
this.button31.Location = new System.Drawing.Point(287, 298);
this.button31.Name = "button31";
this.button31.Size = new System.Drawing.Size(128, 23);
this.button31.TabIndex = 22;
this.button31.Text = "SeriesInfoInteger";
this.button31.UseVisualStyleBackColor = true;
this.button31.Click += new System.EventHandler(this.button31_Click);
//
// comboBox5
//
this.comboBox5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox5.FormattingEnabled = true;
this.comboBox5.Items.AddRange(new object[] {
"SERIES_BARS_COUNT",
"SERIES_FIRSTDATE",
"SERIES_LASTBAR_DATE",
"SERIES_SERVER_FIRSTDATE"});
this.comboBox5.Location = new System.Drawing.Point(160, 298);
this.comboBox5.Name = "comboBox5";
this.comboBox5.Size = new System.Drawing.Size(121, 21);
this.comboBox5.TabIndex = 23;
//
// Form1 // Form1
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -1718,6 +1746,8 @@
private System.Windows.Forms.Button button30; private System.Windows.Forms.Button button30;
private System.Windows.Forms.Button button32; private System.Windows.Forms.Button button32;
private System.Windows.Forms.ComboBox comboBox4; private System.Windows.Forms.ComboBox comboBox4;
private System.Windows.Forms.Button button31;
private System.Windows.Forms.ComboBox comboBox5;
} }
} }
+15
View File
@@ -39,7 +39,9 @@ namespace TestApiClientUI
comboBox1.SelectedIndex = 0; comboBox1.SelectedIndex = 0;
comboBox2.SelectedIndex = 0; comboBox2.SelectedIndex = 0;
comboBox3.SelectedIndex = 0;
comboBox4.SelectedIndex = 0; comboBox4.SelectedIndex = 0;
comboBox5.SelectedIndex = 0;
_timerTradeMonitor = new TimerTradeMonitor(_apiClient) { Interval = 10000 }; // 10 sec _timerTradeMonitor = new TimerTradeMonitor(_apiClient) { Interval = 10000 }; // 10 sec
_timerTradeMonitor.AvailabilityOrdersChanged += _tradeMonitor_AvailabilityOrdersChanged; _timerTradeMonitor.AvailabilityOrdersChanged += _tradeMonitor_AvailabilityOrdersChanged;
@@ -1221,5 +1223,18 @@ namespace TestApiClientUI
AddToLog($"{sender.GetType()}: Closed orders - {string.Join(", ", e.Closed.Select(o => o.Ticket).ToList())}"); AddToLog($"{sender.GetType()}: Closed orders - {string.Join(", ", e.Closed.Select(o => o.Ticket).ToList())}");
} }
} }
//SeriesInfoInteger
private async void button31_Click(object sender, EventArgs e)
{
var symbol = textBoxSelectedSymbol.Text;
ENUM_TIMEFRAMES timeframes;
Enum.TryParse(comboBox3.Text, out timeframes);
EnumSeriesInfoInteger propId;
Enum.TryParse(comboBox5.Text, out propId);
var result = await Execute(() => _apiClient.SeriesInfoInteger(symbol, timeframes, propId));
AddToLog($"SeriesInfoInteger: result = {result}");
}
} }
} }
View File
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.