コード例 #1
0
 private void RemoveRefId(FZOrder order)
 {
     if (_syncOrderAction.ContainsKey(order.Symbol))
     {
         _syncOrderAction[order.Symbol].RemoveRefId(order.RefId);
     }
 }
コード例 #2
0
 protected void AddRefId(FZOrder order)
 {
     if (!_syncOrderAction.ContainsKey(order.Symbol))
     {
         Func <long> fun = () => this.GetCurrentTime().GetUnixTimeFromUTC();
         var         s   = new SyncStatus(300, fun);
         _syncOrderAction.TryAdd(order.Symbol, s);
     }
     _syncOrderAction[order.Symbol].AddRefId(order.RefId);
 }
コード例 #3
0
ファイル: OrderProxy.cs プロジェクト: bignewbe/CryptoCommon
 public void SubmitOrder(CommandId commandId, FZOrder order)
 {
     if (commandId == CommandId.PlaceOrder)
     {
         this.PlaceOrder(order);
     }
     else if (commandId == CommandId.CancelOrder)
     {
         this.CancelOrder(order);
     }
 }
コード例 #4
0
ファイル: OrderProxy.cs プロジェクト: bignewbe/CryptoCommon
        public bool CancelOrder(FZOrder order)
        {
            this.LogDebug($"CancelOrder: {ConvertOrderToStr(order)}");
            var r = _trade.CancelOrder(order.Symbol, order.OrderId).Result;

            if (!_isSimulationMode)
            {
                Thread.Sleep(50);
            }
            this.AddRefId(order);
            return(r);
        }
コード例 #5
0
ファイル: OrderProxy.cs プロジェクト: bignewbe/CryptoCommon
        public FZOrder PlaceOrder(FZOrder order)
        {
            this.LogDebug($"PlaceOrder: {ConvertOrderToStr(order)}");
            var r = _trade.PlaceOrder(order).Result;

            this.AddRefId(order);
            if (!_isSimulationMode)
            {
                Thread.Sleep(50);
            }
            return(r);
        }
コード例 #6
0
ファイル: MyExtentions.cs プロジェクト: bignewbe/CryptoCommon
 public static bool IsOrderOpen(this FZOrder order)
 {
     if (order.State == OrderState.none ||
         order.State == OrderState.open ||
         order.State == OrderState.summitting ||
         order.State == OrderState.partial_filled ||
         order.State == OrderState.cancelling)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
コード例 #7
0
 protected string ConvertOrderToStr(FZOrder o)
 {
     return($"{o.RefId} {o.OrderId} {o.Ordertype} {o.Symbol} price={o.Price} amount={o.Amount} {o.State} {o.TimeCreated} {o.TimeLast}");
 }
コード例 #8
0
        private bool CheckOrderLocal(FZOrder o, bool isTriggerEvent)
        {
            if (o == null)
            {
                return(false);
            }
            lock (this)
            {
                this.RemoveRefId(o);

                var isUpdated       = false;
                var isExistingOpen  = OpenOrders.ContainsKey(o.OrderId);
                var isExistingClose = ClosedOrders.ContainsKey(o.OrderId);
                var isNewOrder      = !isExistingOpen && !isExistingClose;
                var isOrderChanged  = isExistingOpen ? !OpenOrders[o.OrderId].Equals(o) : (isExistingClose ? !ClosedOrders[o.OrderId].Equals(o) : false);
                var isOrderOpen     = o.IsOrderOpen();

                //existOpen  existClose  isOpen  isChanged
                //Y          N           Y       Y          => existing open order updated
                //Y          N           N       -          => existing open order closed
                //N          Y           Y       -          => invalid
                //N          Y           N       Y          => existing order updated
                //N          N           Y       -          => new order opened
                //N          N           N       -          => missed order closed
                if (isExistingOpen && !isExistingClose && isOrderOpen && isOrderChanged)
                {
                    this.LogDebug($"existing open order updated: {ConvertOrderToStr(o)}");
                    this.OpenOrders[o.OrderId].Copy(o);
                    if (isTriggerEvent)
                    {
                        OnOrderUpdated(this, o);
                    }
                    isUpdated = true;
                    this.SetDumpFile(true);
                }
                else if (isExistingOpen && !isExistingClose && !isOrderOpen)
                {
                    this.OpenOrders[o.OrderId].Copy(o);
                    if (isTriggerEvent)
                    {
                        OnOrderClosed(this, o);
                    }

                    FZOrder order;
                    if (OpenOrders.TryRemove(o.OrderId, out order))
                    {
                        //if (o.OrderId == "orderId_10")
                        //    Console.WriteLine();

                        this.LogDebug($"order removed from open order list: {ConvertOrderToStr(o)}");
                        //if (isTriggerEvent) this.OnOpenOrderListChanged?.Invoke(this, OpenOrders.Values.ToList().ConvertAll(t => new FZOrder(t)));
                        if (isTriggerEvent)
                        {
                            this.OnOpenOrderListChanged?.Invoke(this, null);
                        }
                    }
                    if (ClosedOrders.TryAdd(o.OrderId, o))
                    {
                        this.LogDebug($"order added to closed order list: {ConvertOrderToStr(o)}");
                        //if (isTriggerEvent) this.OnClosedOrderListChanged?.Invoke(this, ClosedOrders.Values.ToList().ConvertAll(t => new FZOrder(t)));
                        if (isTriggerEvent)
                        {
                            this.OnClosedOrderListChanged?.Invoke(this, null);
                        }
                    }
                    isUpdated = true;
                    this.SetDumpFile(true);
                }
                else if (!isExistingOpen && isExistingClose && isOrderOpen)
                {
                    this.LogDebug($"order exist in close list while it is still open: {ConvertOrderToStr(o)}");
                    FZOrder order;
                    if (ClosedOrders.TryRemove(o.OrderId, out order))
                    {
                        //if (isTriggerEvent) this.OnClosedOrderListChanged?.Invoke(this, ClosedOrders.Values.ToList().ConvertAll(t => new FZOrder(t)));
                        if (isTriggerEvent)
                        {
                            this.OnClosedOrderListChanged?.Invoke(this, null);
                        }
                    }

                    if (OpenOrders.TryAdd(o.OrderId, o))
                    {
                        if (isTriggerEvent)
                        {
                            this.OnOrderOpened?.Invoke(this, o);
                            //this.OnOpenOrderListChanged?.Invoke(this, OpenOrders.Values.ToList().ConvertAll(t => new FZOrder(t)));
                            this.OnOpenOrderListChanged?.Invoke(this, null);
                        }
                    }
                    isUpdated = true;
                    this.SetDumpFile(true);
                }
                else if (!isExistingOpen && isExistingClose && !isOrderOpen && isOrderChanged)
                {
                    this.LogDebug($"existing closed order updated: {ConvertOrderToStr(o)}");
                    this.ClosedOrders[o.OrderId].Copy(o);
                    if (isTriggerEvent)
                    {
                        OnOrderUpdated(this, o);
                    }
                    isUpdated = true;
                    this.SetDumpFile(true);
                }
                else if (!isExistingOpen && !isExistingClose && isOrderOpen)
                {
                    //this.LogDebug($"new order opened: {ConvertOrderToStr(o)}");
                    if (isTriggerEvent)
                    {
                        this.OnOrderOpened?.Invoke(this, o);
                    }
                    if (this.OpenOrders.TryAdd(o.OrderId, o))
                    {
                        this.LogDebug($"new order added to open order list: {ConvertOrderToStr(o)}");
                        //if (isTriggerEvent) this.OnOpenOrderListChanged?.Invoke(this, OpenOrders.Values.ToList().ConvertAll(t => new FZOrder(t)));
                        if (isTriggerEvent)
                        {
                            this.OnOpenOrderListChanged?.Invoke(this, null);
                        }
                    }
                    isUpdated = true;
                    this.SetDumpFile(true);
                }
                else if (!isExistingOpen && !isExistingClose && !isOrderOpen)
                {
                    //this.LogDebug($"missed order closed: {ConvertOrderToStr(o)}");
                    if (isTriggerEvent)
                    {
                        OnOrderClosed(this, o);
                    }

                    if (ClosedOrders.TryAdd(o.OrderId, o))
                    {
                        this.LogDebug($"missed order added to closed order list: {ConvertOrderToStr(o)}");
                        //if (isTriggerEvent) this.OnClosedOrderListChanged?.Invoke(this, ClosedOrders.Values.ToList().ConvertAll(t => new FZOrder(t)));
                        if (isTriggerEvent)
                        {
                            this.OnClosedOrderListChanged?.Invoke(this, null);
                        }
                    }
                    isUpdated = true;
                    this.SetDumpFile(true);
                }

                //if (!isUpdated && !o.IsOrderOpen())
                //{
                //    this.LogDebug($"order not updated: {o.Symbol} {o.Ordertype} isInOpenList = {isExistingOpen}, isInCloseList = {isExistingClose}, isOrderChanged = {isOrderChanged}, isOrderOpen = {isOrderOpen}");
                //}

                return(isUpdated);
            }
        }
コード例 #9
0
 public ServiceResult <FZOrder> PlaceOrder(FZOrder order)
 {
     return(ServiceResult <FZOrder> .CallAsyncFunction(() => _apiOrder.PlaceOrder(order)).Result);
 }