mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-08-21 14:48:25 +00:00
Issue #122: Added event OnLockTicksEvent (MT5)
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
OnTradeTransaction = 1,
|
OnTradeTransaction = 1,
|
||||||
OnBookEvent = 2,
|
OnBookEvent = 2,
|
||||||
OnTick = 3,
|
OnTick = 3,
|
||||||
OnLastTimeBar = 4
|
OnLastTimeBar = 4,
|
||||||
|
OnLockTicks = 5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace MtApi5.Events
|
||||||
|
{
|
||||||
|
internal class OnLockTicksEvent
|
||||||
|
{
|
||||||
|
public string Instrument { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace MtApi5
|
||||||
|
{
|
||||||
|
public class Mt5LockTicksEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
internal Mt5LockTicksEventArgs(string symbol)
|
||||||
|
{
|
||||||
|
Symbol = symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Symbol { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
@@ -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);
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
Binary file not shown.
+30
-6
@@ -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__
|
||||||
|
|||||||
Reference in New Issue
Block a user