Issue #122: Added event OnLockTicksEvent (MT5)

This commit is contained in:
vdemydiuk
2018-06-06 12:46:24 +03:00
parent 1a5882b75a
commit 897892dc89
8 changed files with 75 additions and 13 deletions
+2 -1
View File
@@ -5,6 +5,7 @@
OnTradeTransaction = 1, OnTradeTransaction = 1,
OnBookEvent = 2, OnBookEvent = 2,
OnTick = 3, OnTick = 3,
OnLastTimeBar = 4 OnLastTimeBar = 4,
OnLockTicks = 5
} }
} }
+7
View File
@@ -0,0 +1,7 @@
namespace MtApi5.Events
{
internal class OnLockTicksEvent
{
public string Instrument { get; set; }
}
}
+14
View File
@@ -0,0 +1,14 @@
using System;
namespace MtApi5
{
public class Mt5LockTicksEventArgs : EventArgs
{
internal Mt5LockTicksEventArgs(string symbol)
{
Symbol = symbol;
}
public string Symbol { get; }
}
}
+2
View File
@@ -50,8 +50,10 @@
<Compile Include="CopyTicksFlag.cs" /> <Compile Include="CopyTicksFlag.cs" />
<Compile Include="Events\OnBookEvent.cs" /> <Compile Include="Events\OnBookEvent.cs" />
<Compile Include="Events\OnLastTimeBarEvent.cs" /> <Compile Include="Events\OnLastTimeBarEvent.cs" />
<Compile Include="Events\OnLockTicksEvent.cs" />
<Compile Include="Events\OnTickEvent.cs" /> <Compile Include="Events\OnTickEvent.cs" />
<Compile Include="Events\OnTradeTransactionEvent.cs" /> <Compile Include="Events\OnTradeTransactionEvent.cs" />
<Compile Include="Mt5LockTicksEventArgs.cs" />
<Compile Include="Mt5TimeBarArgs.cs" /> <Compile Include="Mt5TimeBarArgs.cs" />
<Compile Include="MqlBookInfo.cs" /> <Compile Include="MqlBookInfo.cs" />
<Compile Include="MqlParam.cs" /> <Compile Include="MqlParam.cs" />
+12 -4
View File
@@ -52,8 +52,9 @@ namespace MtApi5
_mtEventHandlers[Mt5EventTypes.OnBookEvent] = ReceivedOnBookEvent; _mtEventHandlers[Mt5EventTypes.OnBookEvent] = ReceivedOnBookEvent;
_mtEventHandlers[Mt5EventTypes.OnTick] = ReceivedOnTickEvent; _mtEventHandlers[Mt5EventTypes.OnTick] = ReceivedOnTickEvent;
_mtEventHandlers[Mt5EventTypes.OnTradeTransaction] = ReceivedOnTradeTransaction; _mtEventHandlers[Mt5EventTypes.OnTradeTransaction] = ReceivedOnTradeTransactionEvent;
_mtEventHandlers[Mt5EventTypes.OnLastTimeBar] = ReceivedOnLastTimeBar; _mtEventHandlers[Mt5EventTypes.OnLastTimeBar] = ReceivedOnLastTimeBarEvent;
_mtEventHandlers[Mt5EventTypes.OnLockTicks] = ReceivedOnLockTicksEvent;
} }
///<summary> ///<summary>
@@ -3118,6 +3119,7 @@ namespace MtApi5
public event EventHandler<Mt5TradeTransactionEventArgs> OnTradeTransaction; public event EventHandler<Mt5TradeTransactionEventArgs> OnTradeTransaction;
public event EventHandler<Mt5BookEventArgs> OnBookEvent; public event EventHandler<Mt5BookEventArgs> OnBookEvent;
public event EventHandler<Mt5TimeBarArgs> OnLastTimeBar; public event EventHandler<Mt5TimeBarArgs> OnLastTimeBar;
public event EventHandler<Mt5LockTicksEventArgs> OnLockTicks;
#endregion #endregion
#region Private Methods #region Private Methods
@@ -3193,7 +3195,7 @@ namespace MtApi5
_mtEventHandlers[eventType](e.ExpertHandle, e.Payload); _mtEventHandlers[eventType](e.ExpertHandle, e.Payload);
} }
private void ReceivedOnTradeTransaction(int expertHandler, string payload) private void ReceivedOnTradeTransactionEvent(int expertHandler, string payload)
{ {
var e = JsonConvert.DeserializeObject<OnTradeTransactionEvent>(payload); var e = JsonConvert.DeserializeObject<OnTradeTransactionEvent>(payload);
OnTradeTransaction?.Invoke(this, new Mt5TradeTransactionEventArgs OnTradeTransaction?.Invoke(this, new Mt5TradeTransactionEventArgs
@@ -3230,12 +3232,18 @@ namespace MtApi5
QuoteUpdate?.Invoke(this, new Mt5QuoteEventArgs(quote)); QuoteUpdate?.Invoke(this, new Mt5QuoteEventArgs(quote));
} }
private void ReceivedOnLastTimeBar(int expertHandler, string payload) private void ReceivedOnLastTimeBarEvent(int expertHandler, string payload)
{ {
var e = JsonConvert.DeserializeObject<OnLastTimeBarEvent>(payload); var e = JsonConvert.DeserializeObject<OnLastTimeBarEvent>(payload);
OnLastTimeBar?.Invoke(this, new Mt5TimeBarArgs(expertHandler, e.Instrument, e.Rates)); OnLastTimeBar?.Invoke(this, new Mt5TimeBarArgs(expertHandler, e.Instrument, e.Rates));
} }
private void ReceivedOnLockTicksEvent(int expertHandler, string payload)
{
var e = JsonConvert.DeserializeObject<OnLockTicksEvent>(payload);
OnLockTicks?.Invoke(this, new Mt5LockTicksEventArgs(e.Instrument));
}
private void Connect(string host, int port) private void Connect(string host, int port)
{ {
var client = new MtClient(host, port); var client = new MtClient(host, port);
+8 -2
View File
@@ -291,7 +291,8 @@ namespace MtApi5TestClient
_mtApiClient.QuoteUpdate += mMtApiClient_QuoteUpdate; _mtApiClient.QuoteUpdate += mMtApiClient_QuoteUpdate;
_mtApiClient.OnTradeTransaction += mMtApiClient_OnTradeTransaction; _mtApiClient.OnTradeTransaction += mMtApiClient_OnTradeTransaction;
_mtApiClient.OnBookEvent += _mtApiClient_OnBookEvent; _mtApiClient.OnBookEvent += _mtApiClient_OnBookEvent;
_mtApiClient.OnLastTimeBar += _mtApiClient_OnOnLastTimeBar; _mtApiClient.OnLastTimeBar += _mtApiClient_OnLastTimeBar;
_mtApiClient.OnLockTicks += _mtApiClient_OnLockTicks;
ConnectionState = _mtApiClient.ConnectionState; ConnectionState = _mtApiClient.ConnectionState;
ConnectionMessage = "Disconnected"; ConnectionMessage = "Disconnected";
@@ -1650,11 +1651,16 @@ namespace MtApi5TestClient
AddLog($"OnBookEvent: ExpertHandle = {e.ExpertHandle}, Symbol = {e.Symbol}"); AddLog($"OnBookEvent: ExpertHandle = {e.ExpertHandle}, Symbol = {e.Symbol}");
} }
private void _mtApiClient_OnOnLastTimeBar(object sender, Mt5TimeBarArgs e) private void _mtApiClient_OnLastTimeBar(object sender, Mt5TimeBarArgs e)
{ {
AddLog($"OnBookEvent: ExpertHandle = {e.ExpertHandle}, Symbol = {e.Symbol}, open = {e.Rates.open}, close = {e.Rates.close}, time = {e.Rates.time}, high = {e.Rates.high}, low = {e.Rates.low}"); AddLog($"OnBookEvent: ExpertHandle = {e.ExpertHandle}, Symbol = {e.Symbol}, open = {e.Rates.open}, close = {e.Rates.close}, time = {e.Rates.time}, high = {e.Rates.high}, low = {e.Rates.low}");
} }
private void _mtApiClient_OnLockTicks(object sender, Mt5LockTicksEventArgs e)
{
AddLog($"OnLockTicksEvent: Symbol = {e.Symbol}");
}
private void AddQuote(Mt5Quote quote) private void AddQuote(Mt5Quote quote)
{ {
if (_quotesMap.ContainsKey(quote.ExpertHandle)) if (_quotesMap.ContainsKey(quote.ExpertHandle))
BIN
View File
Binary file not shown.
+30 -6
View File
@@ -96,9 +96,9 @@ void OnTick()
MqlRates rates_array[]; MqlRates rates_array[];
CopyRates(symbol, Period(), 1, 1, rates_array); CopyRates(symbol, Period(), 1, 1, rates_array);
MtTimeBar* timeBar = new MtTimeBar(symbol, rates_array[0]); MtTimeBarEvent* time_bar = new MtTimeBarEvent(symbol, rates_array[0]);
SendMtEvent(LAST_TIME_BAR_EVENT, timeBar); SendMtEvent(ON_LAST_TIME_BAR_EVENT, time_bar);
delete timeBar; delete time_bar;
lastbar_time_changed = true; lastbar_time_changed = true;
} }
@@ -119,6 +119,10 @@ void OnTick()
(BacktestingLockTicks == LOCK_EVERY_CANDLE && lastbar_time_changed)) (BacktestingLockTicks == LOCK_EVERY_CANDLE && lastbar_time_changed))
{ {
_is_ticks_locked = true; _is_ticks_locked = true;
MtLockTickEvent * lock_tick_event = new MtLockTickEvent(symbol);
SendMtEvent(ON_LOCK_TICKS_EVENT, lock_tick_event);
delete lock_tick_event;
} }
OnTimer(); OnTimer();
@@ -7283,7 +7287,8 @@ enum MtEventTypes
ON_TRADE_TRANSACTION_EVENT = 1, ON_TRADE_TRANSACTION_EVENT = 1,
ON_BOOK_EVENT = 2, ON_BOOK_EVENT = 2,
ON_TICK_EVENT = 3, ON_TICK_EVENT = 3,
LAST_TIME_BAR_EVENT = 4 ON_LAST_TIME_BAR_EVENT = 4,
ON_LOCK_TICKS_EVENT = 5
}; };
class MtEvent class MtEvent
@@ -7359,10 +7364,10 @@ private:
MqlTick _tick; MqlTick _tick;
}; };
class MtTimeBar: public MtEvent class MtTimeBarEvent: public MtEvent
{ {
public: public:
MtTimeBar(string symbol, const MqlRates& rates) MtTimeBarEvent(string symbol, const MqlRates& rates)
{ {
_symbol = symbol; _symbol = symbol;
_rates = rates; _rates = rates;
@@ -7382,6 +7387,25 @@ private:
MqlRates _rates; MqlRates _rates;
}; };
class MtLockTickEvent: public MtEvent
{
public:
MtLockTickEvent(string symbol)
{
_symbol = symbol;
}
virtual JSONObject* CreateJson()
{
JSONObject *jo = new JSONObject();
jo.put("Instrument", new JSONString(_symbol));
return jo;
}
private:
string _symbol;
};
void SendMtEvent(MtEventTypes eventType, MtEvent* mtEvent) void SendMtEvent(MtEventTypes eventType, MtEvent* mtEvent)
{ {
#ifdef __DEBUG_LOG__ #ifdef __DEBUG_LOG__