예제 #1
0
        public override void trade(CStrategy strategy, int?leg, OrderSide?side, CProduct product, Double size, Double price)
        {
            try
            {
                server.AddLog("Init " + side + " " + product.Symbol + " Trade on " + api.Name);

                ExchangeTicker      ticker = api.GetTicker(product.Symbol);
                ExchangeOrderResult result = api.PlaceOrder(new ExchangeOrderRequest
                {
                    Amount = (Decimal)size,
                    IsBuy  = (side == OrderSide.Buy),
                    Price  = (Decimal)price,
                    Symbol = product.Symbol
                });

                System.Threading.Thread.Sleep(100);

                String orderID = result.OrderId;
                server.AddLog("Calling Order OrderID: " + result.OrderId + " Date: " + result.OrderDate + " Result: " + result.Result);

                COrder order = new COrder(orderID);
                order.Product = product;
                order.Side    = side.GetValueOrDefault();
                order.Size    = size;
                order.Price   = price;
                String orderStatus = result.Result.ToString();
                if (orderStatus.Equals("OK") || orderStatus.Equals("Sent"))
                {
                    order.Status = COrder.OrderState.Sent;
                }
                else
                {
                    order.Status = COrder.OrderState.Unknown;
                }

                order.Strategy      = strategy;
                order.Exchange      = this;
                order.TimeStampSent = result.OrderDate;

                server.AddLog("Created Order " + this.Name + " " + orderID + " " + product + " " + side + " " + size + " " + price);

                // add order to global Orders
                server.colServerOrders.Add(order);
                server.dctIdToOrder[orderID] = order;

                // add order to strategy orders
                strategy.DctStrategyOrders[orderID] = order;
                if (leg != null)
                {
                    strategy.DctLegToOrder[(int)leg] = order;
                }

                // cleanup
                order.updateGUI();
            }
            catch (Exception ex)
            {
                server.AddLog(ex.Message);
            }
        }
예제 #2
0
        public override async void cancel(string orderID)
        {
            try
            {
                String   endpoint = "/v1/cancel-order"; // API endpoint
                COrder   order    = server.dctIdToOrder[orderID];
                CProduct product  = order.Product;
                Dictionary <string, string> parameters = new Dictionary <string, string> {
                    { "orderOid", orderID },
                    { "symbol", product.Symbol },
                    { "type", order.Side.ToString().ToUpper() }
                };
                HttpRequestMessage requestMessage = KuCoinPrivate(endpoint, parameters, HttpMethod.Post);
                HttpClient         httpClient     = new HttpClient();

                // Send the request to the server
                HttpResponseMessage response = await httpClient.SendAsync(requestMessage);

                // get back cancel message
                string json = await response.Content.ReadAsStringAsync();

                // parse order String
                dynamic cancelorderData = JsonConvert.DeserializeObject(json);
                var     orders          = cancelorderData.data;
                var     success         = cancelorderData.success;
                Boolean bSuccess;
                Boolean.TryParse(success.ToString(), out bSuccess);
                if (bSuccess)
                {
                    order.Status = COrder.OrderState.Cancelled;
                }
                order.TimeStampLastUpdate = DateTime.Now;
                order.updateGUI();
                server.AddLog(json);
            }
            catch (Exception ex)
            {
                server.AddLog(ex.Message);
            }
        }
예제 #3
0
        public override async void cancel(string orderID)
        {
            try
            {
                if (server.dctIdToOrder.ContainsKey(orderID))
                {
                    COrder order = server.dctIdToOrder[orderID];
                    if (order.canCancel())
                    {
                        await api.CancelOrderAsync(orderID);

                        System.Threading.Thread.Sleep(100);
                        order.Status = COrder.OrderState.Cancelled;
                        order.TimeStampLastUpdate = DateTime.Now;
                        order.updateGUI();
                    }
                }
            }
            catch (Exception ex)
            {
                server.AddLog(ex.Message);
            }
        }
예제 #4
0
        public override async void pollOrders(object source, ElapsedEventArgs e)
        {
            if (pollingOrders)
            {
                return;
            }
            else
            {
                pollingOrders = true;
            }
            try
            {
                for (bool open_completed = false; open_completed; open_completed = !open_completed)
                {
                    IEnumerable <ExchangeOrderResult> resultOrders;
                    if (open_completed)
                    {
                        resultOrders = await api.GetCompletedOrderDetailsAsync();
                    }
                    else
                    {
                        resultOrders = await api.GetOpenOrderDetailsAsync();
                    }

                    foreach (ExchangeOrderResult orderOpen in resultOrders)
                    {
                        String   orderID              = orderOpen.OrderId;
                        Decimal  amount               = orderOpen.Amount;
                        Decimal  amountFilled         = orderOpen.AmountFilled;
                        Decimal  averagePrice         = orderOpen.AveragePrice;
                        Boolean  isBuy                = orderOpen.IsBuy;
                        DateTime orderDate            = orderOpen.OrderDate;
                        ExchangeAPIOrderResult result = orderOpen.Result;
                        String symbol = orderOpen.Symbol;
                        COrder order  = null;
                        if (server.dctIdToOrder.ContainsKey(orderID))
                        {
                            order = server.dctIdToOrder[orderID];
                        }

                        if (order != null)
                        {
                            order.OrderID   = orderID;
                            order.DealPrice = (Double)averagePrice;
                            //order.Fee = fee;
                            //order.FeeRate = feeRate;
                            order.Size   = (double)amount;
                            order.Filled = (Double)amountFilled;
                            switch (result)
                            {
                            case ExchangeAPIOrderResult.Canceled:
                                order.Status = COrder.OrderState.Cancelled;
                                break;

                            case ExchangeAPIOrderResult.Error:
                                order.Status = COrder.OrderState.Error;
                                break;

                            case ExchangeAPIOrderResult.Filled:
                                order.Status = COrder.OrderState.Filled;
                                break;

                            case ExchangeAPIOrderResult.FilledPartially:
                                order.Status = COrder.OrderState.Partial;
                                break;

                            case ExchangeAPIOrderResult.Pending:
                                order.Status = COrder.OrderState.Queued;
                                break;

                            case ExchangeAPIOrderResult.Unknown:
                                order.Status = COrder.OrderState.Unknown;
                                break;
                            }
                            order.TimeStampFilled = orderDate;
                            order.updateGUI();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                server.AddLog(ex.Message);
            }
            pollingOrders = false;
        }
예제 #5
0
        public override async void trade(CStrategy strategy, int?leg, OrderSide?side, CProduct product, Double size, Double price)
        {
            try
            {
                String endpoint = "/v1/order";
                Dictionary <string, string> parameters = new Dictionary <string, string> {
                    { "amount", size.ToString() },
                    { "price", price.ToString() },
                    { "symbol", product.Symbol },
                    { "type", side.GetValueOrDefault().ToString().ToUpper() }
                };
                HttpRequestMessage requestMessage = KuCoinPrivate(endpoint, parameters, HttpMethod.Post);

                // Create a client
                HttpClient httpClient = new HttpClient();

                // Send the request to the server
                HttpResponseMessage response = await httpClient.SendAsync(requestMessage);

                // get json back
                string json = await response.Content.ReadAsStringAsync();

                // parse order String
                dynamic orderData = JsonConvert.DeserializeObject(json);
                String  orderID;
                try
                {
                    orderID = orderData.data.orderOid;
                }
                catch (Exception ex)
                {
                    server.AddLog(ex.Message);
                    orderID = "";
                }
                if (!orderID.Equals(""))
                {
                    COrder order = new COrder(orderID);
                    order.Product = product;
                    order.Side    = side.GetValueOrDefault();
                    order.Size    = size;
                    order.Price   = price;
                    String orderStatus = orderData.msg.ToString();
                    if (orderStatus.Equals("OK") || orderStatus.Equals("Sent"))
                    {
                        order.Status = COrder.OrderState.Sent;
                    }
                    else
                    {
                        order.Status = COrder.OrderState.Unknown;
                    }

                    order.Strategy = strategy;
                    order.Exchange = this;
                    Double timeStamp = orderData.timestamp;
                    order.TimeStampSent = CHelper.ConvertFromUnixTimestamp(timeStamp);

                    server.AddLog("Created Order " + this.Name + " " + orderID + " " + product + " " + side + " " + size + " " + price);

                    // add order to global Orders
                    server.colServerOrders.Add(order);
                    server.dctIdToOrder[orderID] = order;

                    // add order to strategy orders
                    strategy.DctStrategyOrders[orderID] = order;
                    if (leg != null)
                    {
                        strategy.DctLegToOrder[(int)leg] = order;
                    }

                    // cleanup
                    order.updateGUI();
                    server.AddLog(json);
                }
            }
            catch (Exception ex)
            {
                server.AddLog(ex.Message);
            }
        }
예제 #6
0
        public override async void pollOrders(object source, ElapsedEventArgs e)
        {
            if (pollingOrders)
            {
                return;
            }
            else
            {
                pollingOrders = true;
            }

            try
            {
                HttpClient httpClient = new HttpClient();
                foreach (CProduct product in dctExchangeProducts.Values)
                {
                    for (int active_dealt = 0; active_dealt < 2; active_dealt++)
                    {
                        String endpoint;
                        Dictionary <string, string> parameters;
                        if (active_dealt == 1)
                        {
                            endpoint   = "/v1/order/dealt";
                            parameters = new Dictionary <string, string> {
                                { "symbol", product.Symbol }
                            };
                        }
                        else
                        {
                            endpoint   = "/v1/order/active";
                            parameters = new Dictionary <string, string> {
                                { "symbol", product.Symbol }
                            };
                        }
                        HttpRequestMessage requestMessage = KuCoinPrivate(endpoint, parameters, HttpMethod.Get);

                        // Send the request to the server
                        HttpResponseMessage response = await httpClient.SendAsync(requestMessage);

                        // Just as an example I'm turning the response into a string here
                        string json = await response.Content.ReadAsStringAsync();

                        dynamic orderData = JsonConvert.DeserializeObject(json);
                        var     orders    = orderData.data;
                        if (orders != null)
                        {
                            if (active_dealt == 1)
                            {
                                var orderDealtAll = orders.datas;
                                foreach (var orderDealt in orderDealtAll)
                                {
                                    String oid       = orderDealt.oid;
                                    String orderOid  = orderDealt.orderOid;
                                    Double dealPrice = orderDealt.dealPrice;
                                    Double fee       = orderDealt.fee;
                                    Double feeRate   = orderDealt.feeRate;
                                    Double amount    = orderDealt.amount;
                                    Double dealValue = orderDealt.dealValue;
                                    COrder order     = null;
                                    if (server.dctIdToOrder.ContainsKey(oid))
                                    {
                                        order = server.dctIdToOrder[oid];
                                    }
                                    else if (server.dctIdToOrder.ContainsKey(orderOid))
                                    {
                                        order = server.dctIdToOrder[orderOid];
                                    }

                                    /*
                                     * if (order == null)
                                     * {
                                     *  order = new COrder(orderOid);
                                     *  //Server.colOrders.Add(order);
                                     *  Server.dctIdToOrder.Add(orderOid, order);
                                     * }
                                     */

                                    if (order != null)
                                    {
                                        order.OID             = oid;
                                        order.DealPrice       = dealPrice;
                                        order.Fee             = fee;
                                        order.FeeRate         = feeRate;
                                        order.DealValue       = dealValue;
                                        order.Filled          = amount;
                                        order.Status          = COrder.OrderState.Filled;
                                        order.TimeStampFilled = DateTime.Now;
                                        order.updateGUI();
                                    }
                                }
                            }
                            else
                            {
                                foreach (var orderSideSet in orders)
                                {
                                    String name = orderSideSet.Name;
                                    foreach (var orderSideSetOrders in orderSideSet)
                                    {
                                        foreach (var orderSideSetOrder in orderSideSetOrders)
                                        {
                                            int    iAttrCount = 0;
                                            Double filled     = 0;
                                            Double timeStamp  = 0;
                                            String orderID    = null;
                                            foreach (var orderSideSetOrderAttr in orderSideSetOrder)
                                            {
                                                // timestamp, side, price, size, executed, orderID
                                                switch (++iAttrCount)
                                                {
                                                case 1:
                                                    timeStamp = orderSideSetOrderAttr;
                                                    break;

                                                case 5:
                                                    filled = orderSideSetOrderAttr;
                                                    break;

                                                case 6:
                                                    orderID = orderSideSetOrderAttr;
                                                    break;
                                                }
                                            }

                                            if (orderID != null && server.dctIdToOrder.ContainsKey(orderID))
                                            {
                                                COrder order = server.dctIdToOrder[orderID];
                                                if (filled > 0)
                                                {
                                                    order.Filled          = filled;
                                                    order.TimeStampFilled = DateTime.Now;
                                                    if (order.Filled < order.Size)
                                                    {
                                                        order.Status = COrder.OrderState.Partial;
                                                    }
                                                }
                                                order.Status              = COrder.OrderState.Queued;
                                                order.TimeStampSent       = CHelper.ConvertFromUnixTimestamp(timeStamp);
                                                order.TimeStampLastUpdate = DateTime.Now;
                                                order.updateGUI();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                server.AddLog(ex.Message);
            }
            pollingOrders = false;
        }