namespace MtApi.Monitors.Triggers { /// /// Raises the event if a bar is closed and a new one started. /// public class NewBarTrigger : IMonitorTrigger { #region Fields private volatile bool _isStarted; private readonly MtApiClient _apiClient; #endregion #region Properties /// /// Returns true if the trigger is started, otherwise false /// public bool IsStarted => _isStarted; #endregion #region Events /// /// Event will be called if the trigger raised. /// public event EventHandler? Raised; #endregion #region ctor public NewBarTrigger(MtApiClient apiClient) { _apiClient = apiClient; _apiClient.OnLastTimeBar += _apiClient_OnLastTimeBar; } #endregion #region Public methods /// /// Starts the trigger /// public void Start() => SetIsStarted(true); /// /// Stops the trigger /// public void Stop() => SetIsStarted(false); #endregion #region Private methods private void _apiClient_OnLastTimeBar(object? sender, TimeBarArgs e) { if (_isStarted) Raised?.Invoke(this, EventArgs.Empty); } private void SetIsStarted(bool value) { if (value != _isStarted) { _isStarted = value; if (value) _apiClient.OnLastTimeBar += _apiClient_OnLastTimeBar; else _apiClient.OnLastTimeBar -= _apiClient_OnLastTimeBar; } } #endregion } }