コード例 #1
0
        private async void OnRunTestClick(object sender, EventArgs e)
        {
            var currencyPair = (await _stockRestConnector.GetCurrencyPairs()).FirstOrDefault(item => item.Id == "DASHBTC");

            var orderId = Guid.NewGuid();

            var initialOrder = new Infrastructure.Common.Models.Trading.Order
            {
                CurrencyPair   = currencyPair,
                ClientId       = orderId,
                Role           = OrderRoleType.ClosePosition,
                OrderSide      = OrderSide.Sell,
                OrderType      = OrderType.Limit,
                OrderStateType = OrderStateType.Suspended,
                TimeInForce    = OrderTimeInForceType.GoodTillCancelled,
                Quantity       = 0.001m,
                Price          = 0.022m,
                StopPrice      = 0
            };

            var newOrder = await _stockRestConnector.CreateOrder(initialOrder, true);

            var cancelledOrder = await _stockRestConnector.CancelOrder(newOrder);

            var testOrder = await _stockRestConnector.GetOrderFromHistory(initialOrder.ClientId, currencyPair);

            MessageBox.Show(@"Passed");
        }
コード例 #2
0
		public async Task<Infrastructure.Common.Models.Trading.Order> CreateOrder(Infrastructure.Common.Models.Trading.Order initialOrder, bool usePostOnly = false)
		{
			var innerModel = initialOrder.ToInnerModel();

			var connection = new HitBtcConnection();
			var request = new RestRequest("order", Method.POST);
			request.ConfigureRequest();

			request.AddJsonBody(new
			{
				clientOrderId = innerModel.ClientId,
				symbol = innerModel.CurrencyPairId,
				side = innerModel.OrderSide,
				type = innerModel.OrderType,
				timeInForce = innerModel.TimeInForce,
				quantity = innerModel.Quantity.ToString("#0.########################"),
				price = innerModel.Price.ToString("#0.########################"),
				stopPrice = innerModel.StopPrice.ToString("#0.########################"),
				postOnly = usePostOnly
			});

			var exchangeConnectionSettings = _configurationService.GetExchangeConnectionSettings();

			var response = await connection.DoRequest(
				request,
				exchangeConnectionSettings.ApiKey,
				exchangeConnectionSettings.SecretKey);

			var responseOrder = response
				.ExtractResponseData<Order>()
				?.ToOuterModel(initialOrder.CurrencyPair);
			return responseOrder;
		}
コード例 #3
0
 public async Task RequestCancelOrder(Infrastructure.Common.Models.Trading.Order order)
 {
     var request = new SingleSocketRequest <ChangeOrderStateRequestParameters>
     {
         RequestMethodName = "cancelOrder",
         NeedResponse      = false,
         RequestParameters = new ChangeOrderStateRequestParameters()
         {
             ExistingClientId = order.ClientId.ToString("N"),
         }
     };
     await _connection.DoRequest <Order>(request);
 }
コード例 #4
0
 public async Task RequestReplaceOrder(Infrastructure.Common.Models.Trading.Order changedOrder, Guid newClientId, Action replacementErrorCallback)
 {
     var request = new SingleSocketRequest <ChangeOrderStateRequestParameters>
     {
         RequestMethodName = "cancelReplaceOrder",
         NeedResponse      = false,
         RequestParameters = new ChangeOrderStateRequestParameters()
         {
             ExistingClientId = changedOrder.ClientId.ToString("N"),
             NewClientId      = newClientId.ToString("N"),
             Price            = changedOrder.Price,
             StopPrice        = changedOrder.StopPrice ?? 0,
             Quantity         = changedOrder.Quantity
         }
     };
     await _connection.DoRequest <Order>(request, replacementErrorCallback);
 }
コード例 #5
0
		public async Task<Infrastructure.Common.Models.Trading.Order> CancelOrder(Infrastructure.Common.Models.Trading.Order initialOrder)
		{
			var innerModel = initialOrder.ToInnerModel();

			var connection = new HitBtcConnection();
			var request = new RestRequest(String.Format("order/{0}", innerModel.ClientId), Method.DELETE);
			request.ConfigureRequest();

			var exchangeConnectionSettings = _configurationService.GetExchangeConnectionSettings();

			var response = await connection.DoRequest(
				request,
				exchangeConnectionSettings.ApiKey,
				exchangeConnectionSettings.SecretKey);

			var responseOrder = response
				.ExtractResponseData<Order>()
				?.ToOuterModel(initialOrder.CurrencyPair);
			return responseOrder;
		}
コード例 #6
0
ファイル: OrderMap.cs プロジェクト: w01f/StockManager
        public static Order ToInnerModel(this Infrastructure.Common.Models.Trading.Order source, Order target = null)
        {
            if (target == null)
            {
                target = new Order();
            }

            target.Id             = source.ExtId;
            target.ClientId       = source.ClientId.ToString("N");
            target.CurrencyPairId = source.CurrencyPair.Id;

            switch (source.OrderSide)
            {
            case OrderSide.Sell:
                target.OrderSide = "sell";
                break;

            case OrderSide.Buy:
                target.OrderSide = "buy";
                break;

            default:
                throw new ConnectorException("Undefined order side", null);
            }

            switch (source.OrderType)
            {
            case OrderType.Limit:
                target.OrderType = "limit";
                break;

            case OrderType.Market:
                target.OrderType = "market";
                break;

            case OrderType.StopLimit:
                target.OrderType = "stopLimit";
                break;

            case OrderType.StopMarket:
                target.OrderType = "stopMarket";
                break;

            default:
                throw new ConnectorException("Undefined order type", null);
            }

            switch (source.OrderStateType)
            {
            case OrderStateType.New:
                target.OrderStateType = "new";
                break;

            case OrderStateType.Suspended:
                target.OrderStateType = "suspended";
                break;

            case OrderStateType.PartiallyFilled:
                target.OrderStateType = "partiallyFilled";
                break;

            case OrderStateType.Filled:
                target.OrderStateType = "filled";
                break;

            case OrderStateType.Cancelled:
                target.OrderStateType = "canceled";
                break;

            case OrderStateType.Expired:
                target.OrderStateType = "expired";
                break;

            default:
                throw new ConnectorException("Undefined order state type", null);
            }

            //TODO Check how will be processed partially filled order
            switch (source.TimeInForce)
            {
            case OrderTimeInForceType.GoodTillCancelled:
                target.TimeInForce = "GTC";
                break;

            case OrderTimeInForceType.ImmediateOrCancel:
                target.TimeInForce = "IOC";
                break;

            case OrderTimeInForceType.FillOrKill:
                target.TimeInForce = "FOK";
                break;

            case OrderTimeInForceType.UntillTheEndOfTheDay:
                target.TimeInForce = "Day";
                break;

            case OrderTimeInForceType.GoodTillDate:
                target.TimeInForce = "GTD";
                break;

            default:
                throw new ConnectorException(String.Format("Undefined TimeInForce state type: {0}", source.TimeInForce), null);
            }

            target.Quantity  = source.Quantity;
            target.Price     = source.Price;
            target.StopPrice = source.StopPrice ?? 0;
            target.Created   = source.Created;
            target.Updated   = source.Updated;

            target.PostOnly = false;

            return(target);
        }
コード例 #7
0
ファイル: OrderMap.cs プロジェクト: w01f/StockManager
        public static Infrastructure.Common.Models.Trading.Order ToOuterModel(this Order source, CurrencyPair currencyPair)
        {
            var target = new Infrastructure.Common.Models.Trading.Order();

            target.ExtId        = (Int64)source.Id;
            target.ClientId     = Guid.Parse(source.ClientId);
            target.CurrencyPair = currencyPair ??
                                  throw new ConnectorException(String.Format("Undefined currency: {0}", source.CurrencyPairId), null);

            switch (source.OrderSide)
            {
            case "sell":
                target.OrderSide = OrderSide.Sell;
                break;

            case "buy":
                target.OrderSide = OrderSide.Buy;
                break;

            default:
                throw new ConnectorException(String.Format("Undefined Order Side: {0}", source.OrderSide), null);
            }

            switch (source.OrderType)
            {
            case "limit":
                target.OrderType = OrderType.Limit;
                break;

            case "market":
                target.OrderType = OrderType.Market;
                break;

            case "stopLimit":
                target.OrderType = OrderType.StopLimit;
                break;

            case "stopMarket":
                target.OrderType = OrderType.StopMarket;
                break;

            default:
                throw new ConnectorException(String.Format("Undefined Order Type: {0}", source.OrderType), null);
            }

            switch (source.OrderStateType)
            {
            case "new":
                target.OrderStateType = OrderStateType.New;
                break;

            case "suspended":
                target.OrderStateType = OrderStateType.Suspended;
                break;

            case "partiallyFilled":
                target.OrderStateType = OrderStateType.PartiallyFilled;
                break;

            case "filled":
                target.OrderStateType = OrderStateType.Filled;
                break;

            case "canceled":
                target.OrderStateType = OrderStateType.Cancelled;
                break;

            case "expired":
                target.OrderStateType = OrderStateType.Expired;
                break;

            default:
                throw new ConnectorException(String.Format("Undefined Order State: {0}", source.OrderStateType), null);
            }

            switch (source.TimeInForce)
            {
            case "GTC":
                target.TimeInForce = OrderTimeInForceType.GoodTillCancelled;
                break;

            case "IOC":
                target.TimeInForce = OrderTimeInForceType.ImmediateOrCancel;
                break;

            case "FOK":
                target.TimeInForce = OrderTimeInForceType.FillOrKill;
                break;

            case "Day":
                target.TimeInForce = OrderTimeInForceType.UntillTheEndOfTheDay;
                break;

            case "GTD":
                target.TimeInForce = OrderTimeInForceType.GoodTillDate;
                break;

            default:
                throw new ConnectorException(String.Format("Undefined TimeIn Force: {0}", source.TimeInForce), null);
            }

            target.Quantity  = source.Quantity;
            target.Price     = source.Price;
            target.StopPrice = source.StopPrice;
            target.Created   = source.Created;
            target.Updated   = source.Updated;

            return(target);
        }
コード例 #8
0
 public Task RequestReplaceOrder(Infrastructure.Common.Models.Trading.Order changedOrder, Guid newClientId, Action replacementErrorCallback)
 {
     throw new NotImplementedException();
 }
コード例 #9
0
 public Task RequestCancelOrder(Infrastructure.Common.Models.Trading.Order order)
 {
     throw new NotImplementedException();
 }