/// <summary> /// Initializes an instance and compare the order in its old and new state /// </summary> /// <param name="oldOrder">The order in its old state (before the changes)</param> /// <param name="newOrder">The order in its new state (after the changes)</param> public MtModifiedOrder(MtOrder oldOrder, MtOrder newOrder) { if (oldOrder != null && newOrder != null && oldOrder.Ticket != newOrder.Ticket) { throw new ArgumentException(nameof(oldOrder) + " and " + nameof(newOrder) + " need to have the same ticket id"); } OldOrder = oldOrder; NewOrder = newOrder; ModifyType = OrderModifiedTypes.None; Compare(); }
private void Compare() { if (NewOrder != null && OldOrder != null) { if (OldOrder.StopLoss != NewOrder.StopLoss) { ModifyType |= OrderModifiedTypes.StopLoss; } if (OldOrder.TakeProfit != NewOrder.TakeProfit) { ModifyType |= OrderModifiedTypes.TakeProfit; } if (OldOrder.Operation != NewOrder.Operation) { ModifyType |= OrderModifiedTypes.Operation; } } }
protected override void OnTriggerRaised() { if (_lastOrders == null) { _lastOrders = GetOrders(); return; } List <MtOrder> currentOrders = GetOrders(); OrderModifiedTypes omt = OrderModifiedTypes; var mtModifiedOrders = currentOrders .Select(co => new MtModifiedOrder(_lastOrders.FirstOrDefault(x => x.Ticket == co.Ticket), co)) .ToList(); List <MtModifiedOrder> modifiedOrders = new List <MtModifiedOrder>(); modifiedOrders.AddRange(GetMtModifiedOrdersWithModType(mtModifiedOrders, omt, OrderModifiedTypes.TakeProfit)); //If the takeprofit were changed between both calls modifiedOrders.AddRange(GetMtModifiedOrdersWithModType(mtModifiedOrders, omt, OrderModifiedTypes.StopLoss)); //If the stoploss were changed between both calls modifiedOrders.AddRange(GetMtModifiedOrdersWithModType(mtModifiedOrders, omt, OrderModifiedTypes.Operation)); //If an order changed from limit / stop order to an open order if (modifiedOrders.Count > 0) { OrdersModified?.Invoke(this, new ModifiedOrdersEventArgs(modifiedOrders)); } _lastOrders = currentOrders; }
private static IEnumerable <MtModifiedOrder> GetMtModifiedOrdersWithModType(IEnumerable <MtModifiedOrder> orders, OrderModifiedTypes globalSearchFlag, OrderModifiedTypes modifiedType) => globalSearchFlag.HasFlag(modifiedType) ? orders.Where(o => o.ModifyType.HasFlag(modifiedType)) : new List <MtModifiedOrder>();
public ModifiedOrdersMonitor(MtApiClient apiClient, IMonitorTrigger monitorTrigger, OrderModifiedTypes orderModifiedTypes = OrderModifiedTypes.All, bool syncTrigger = false) : base(apiClient, monitorTrigger, syncTrigger) { _lastOrders = GetOrders(); OrderModifiedTypes = orderModifiedTypes; }