Ejemplo n.º 1
0
 /// <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();
 }
Ejemplo n.º 2
0
 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;
         }
     }
 }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
 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>();
Ejemplo n.º 5
0
 public ModifiedOrdersMonitor(MtApiClient apiClient, IMonitorTrigger monitorTrigger, OrderModifiedTypes orderModifiedTypes = OrderModifiedTypes.All, bool syncTrigger = false)
     : base(apiClient, monitorTrigger, syncTrigger)
 {
     _lastOrders        = GetOrders();
     OrderModifiedTypes = orderModifiedTypes;
 }