Issue #106: Extended structure Mt5Quote with fields from MqlTick (volume, last, time)

This commit is contained in:
vdemydiuk
2018-05-08 14:53:31 +03:00
parent fd34f009cd
commit 6023bffed6
8 changed files with 83 additions and 40 deletions
+2 -1
View File
@@ -3,6 +3,7 @@
internal enum Mt5EventTypes
{
OnTradeTransaction = 1,
OnBookEvent = 2
OnBookEvent = 2,
OnTick = 3
}
}
+9
View File
@@ -0,0 +1,9 @@
namespace MtApi5.Events
{
internal class OnTickEvent
{
public MqlTick Tick { get; set; }
public string Instrument { get; set; }
public int ExpertHandle { get; set; }
}
}
+8 -2
View File
@@ -1,4 +1,5 @@
using MTApiService;
using System;
using MTApiService;
namespace MtApi5
{
@@ -8,8 +9,13 @@ namespace MtApi5
public double Bid { get; }
public double Ask { get; }
public int ExpertHandle { get; set; }
public DateTime Time { get; set; }
public double Last { get; set; }
public ulong Volume { get; set; }
// public long TimeMsc { get; set; }
// public uint Flags { get; set; }
private Mt5Quote(string instrument, double bid, double ask)
internal Mt5Quote(string instrument, double bid, double ask)
{
Instrument = instrument;
Bid = bid;
+1
View File
@@ -49,6 +49,7 @@
<ItemGroup>
<Compile Include="CopyTicksFlag.cs" />
<Compile Include="Events\OnBookEvent.cs" />
<Compile Include="Events\OnTickEvent.cs" />
<Compile Include="Events\OnTradeTransactionEvent.cs" />
<Compile Include="MqlBookInfo.cs" />
<Compile Include="MqlParam.cs" />
+24 -12
View File
@@ -40,12 +40,19 @@ namespace MtApi5
private volatile bool _isBacktestingMode;
private Mt5ConnectionState _connectionState = Mt5ConnectionState.Disconnected;
private int _executorHandle;
private readonly Dictionary<Mt5EventTypes, Action<int, string>> _mtEventHandlers =
new Dictionary<Mt5EventTypes, Action<int, string>>();
#endregion
#region Public Methods
public MtApi5Client()
{
LogConfigurator.Setup(LogProfileName);
_mtEventHandlers[Mt5EventTypes.OnBookEvent] = ReceivedOnBookEvent;
_mtEventHandlers[Mt5EventTypes.OnTick] = ReceivedOnTickEvent;
_mtEventHandlers[Mt5EventTypes.OnTradeTransaction] = ReceivedOnTradeTransaction;
}
///<summary>
@@ -3002,21 +3009,11 @@ namespace MtApi5
}
}
private void _client_MtEventReceived(MtEvent e)
{
var eventType = (Mt5EventTypes)e.EventType;
switch (eventType)
{
case Mt5EventTypes.OnTradeTransaction:
ReceivedOnTradeTransaction(e.ExpertHandle, e.Payload);
break;
case Mt5EventTypes.OnBookEvent:
ReceivedOnBookEvent(e.ExpertHandle, e.Payload);
break;
default:
throw new ArgumentOutOfRangeException();
}
_mtEventHandlers[eventType](e.ExpertHandle, e.Payload);
}
private void ReceivedOnTradeTransaction(int expertHandler, string payload)
@@ -3041,6 +3038,21 @@ namespace MtApi5
});
}
private void ReceivedOnTickEvent(int expertHandler, string payload)
{
var e = JsonConvert.DeserializeObject<OnTickEvent>(payload);
var quote = new Mt5Quote(e.Instrument, e.Tick.bid, e.Tick.ask)
{
ExpertHandle = expertHandler,
Volume = e.Tick.volume,
Time = e.Tick.time,
Last = e.Tick.last
};
QuoteUpdated?.Invoke(this, quote.Instrument, quote.Bid, quote.Ask);
QuoteUpdate?.Invoke(this, new Mt5QuoteEventArgs(quote));
}
private void Connect(string host, int port)
{
var client = new MtClient(host, port);