Esempio n. 1
0
        /// <summary>
        /// Send a New Order
        /// <see href="https://scrapbox.io/BitFlyerDotNet/SendChildOrder">Online help</see>
        /// </summary>
        /// <param name="productCode"></param>
        /// <param name="orderType"></param>
        /// <param name="side"></param>
        /// <param name="price"></param>
        /// <param name="size"></param>
        /// <param name="minuteToExpire"></param>
        /// <param name="timeInForce"></param>
        /// <returns></returns>
        public Task <BitFlyerResponse <BfChildOrderResponse> > SendChildOrderAsync(
            BfProductCode productCode,
            BfOrderType orderType,
            BfTradeSide side,
            decimal price,
            decimal size,
            int minuteToExpire,
            BfTimeInForce timeInForce,
            CancellationToken ct
            )
        {
            var request = new BfChildOrderRequest
            {
                ProductCode    = productCode,
                ChildOrderType = orderType,
                Side           = side,
                Price          = price,
                Size           = size,
                MinuteToExpire = minuteToExpire,
                TimeInForce    = timeInForce,
            };

            Validate(ref request);
            return(SendChildOrderAsync(request, ct));
        }
Esempio n. 2
0
        public void Update(IBfParentOrder order)
        {
            OrderId      = order.OrderId;
            AcceptanceId = order.AcceptanceId;
            _orderMethod = order.OrderType;

            ExpireDate = order.ExpireDate;
            OrderDate  = order.OrderDate;

            // API 仕様的に実質 Active 状態しか取得できない。
            switch (order.State)
            {
            case BfOrderState.Active:
                ChangeState(BfxOrderState.Ordered);
                break;

            case BfOrderState.Completed:
                ChangeState(BfxOrderState.Completed);
                break;

            case BfOrderState.Canceled:
                ChangeState(BfxOrderState.Canceled);
                break;

            case BfOrderState.Expired:
                ChangeState(BfxOrderState.Expired);
                break;

            default:
                throw new ArgumentException("Unexpected parent order state.");
            }

            Update(order.Children);
        }
Esempio n. 3
0
        public void Update(BfParentOrderEvent poe)
        {
            _orderMethod    = poe.ParentOrderType;
            LastUpdatedTime = poe.EventDate;
            switch (poe.EventType)
            {
            case BfOrderEventType.Order:
                OrderDate  = poe.EventDate;    // Is it same value to real ordered date ?
                ExpireDate = poe.ExpireDate;
                ChangeState(BfxOrderState.Ordered);
                break;

            case BfOrderEventType.OrderFailed:
                ChangeState(BfxOrderState.OrderFailed);
                break;

            case BfOrderEventType.Cancel:
                ChangeState(BfxOrderState.Canceled);
                break;

            case BfOrderEventType.CancelFailed:
                ChangeState(BfxOrderState.CancelFailed);
                break;

            case BfOrderEventType.Trigger:
                _childOrders[poe.ChildOrderIndex - 1].Update(poe);
                break;

            case BfOrderEventType.Expire:
                ChangeState(BfxOrderState.Expired);
                break;

            case BfOrderEventType.Complete:
                CompletedCount++;
                Log.Trace($"BfOrderEventType.Complete received. count = {CompletedCount}");
                switch (OrderType)
                {
                case BfOrderType.IFD:
                case BfOrderType.IFDOCO:
                    if (CompletedCount == 2)
                    {
                        ChangeState(BfxOrderState.Completed);
                    }
                    break;
                }
                break;

            case BfOrderEventType.Unknown:
            case BfOrderEventType.Execution:
                throw new NotSupportedException();
            }
        }
Esempio n. 4
0
 public static int GetChildCount(this BfOrderType orderType)
 {
     return(orderType switch
     {
         BfOrderType.IFDOCO => 3,
         BfOrderType.IFD => 2,
         BfOrderType.OCO => 2,
         BfOrderType.Simple => 1,
         BfOrderType.Stop => 1,
         BfOrderType.StopLimit => 1,
         BfOrderType.Trail => 1,
         _ => 0
     });
Esempio n. 5
0
        static void PlaceUnexecutableParentOrder(BfOrderType orderType, bool mte = false, bool fok = false)
        {
            var childOrder1 = _orderFactory.CreateLimitPriceOrder(BfTradeSide.Sell, _market.MinimumOrderSize, _market.BestAskPrice + 50000.0m);
            var childOrder2 = _orderFactory.CreateLimitPriceOrder(BfTradeSide.Buy, _market.MinimumOrderSize, _market.BestBidPrice - 50000.0m);
            BfParentOrderRequest request;

            switch (orderType)
            {
            case BfOrderType.IFD:
                request = _orderFactory.CreateIFD(
                    childOrder1.ToParameter(),
                    childOrder2.ToParameter(),
                    mte ? TimeSpan.FromMinutes(1) : default(TimeSpan),
                    fok ? BfTimeInForce.FOK : BfTimeInForce.NotSpecified
                    );
                break;

            case BfOrderType.OCO:
                request = _orderFactory.CreateOCO(
                    childOrder1.ToParameter(),
                    childOrder2.ToParameter(),
                    mte ? TimeSpan.FromMinutes(1) : default(TimeSpan),
                    fok ? BfTimeInForce.FOK : BfTimeInForce.NotSpecified
                    );
                break;

            default:
                throw new AggregateException();
            }

            var transaction = _market.PlaceOrder(request).Result;

            if (transaction != null)
            {
                _parentOrderTransaction = transaction;
                Console.WriteLine("Order accepted.");
            }
            else
            {
                Console.WriteLine("Order failed.");
            }
        }
Esempio n. 6
0
        public BfxParentOrder(BfParentOrderRequest request)
            : this(request.OrderMethod)
        {
            Request      = request;
            _orderMethod = request.OrderMethod;
            _childOrders = request.Parameters.Select(e => new BfxChildOrder(e)).ToArray();

            ProductCode = _childOrders[0].ProductCode;
            if (request.OrderMethod == BfOrderType.Simple)
            {
                var childOrder = _childOrders[0];
                OrderType    = childOrder.OrderType;
                Side         = childOrder.Side;
                OrderSize    = childOrder.OrderSize;
                OrderPrice   = childOrder.OrderPrice;
                TriggerPrice = childOrder.TriggerPrice;
                TrailOffset  = childOrder.TrailOffset;
            }
            else
            {
                OrderType = request.OrderMethod;
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Send a New Order
        /// <see href="https://scrapbox.io/BitFlyerDotNet/SendChildOrder">Online help</see>
        /// </summary>
        /// <param name="productCode"></param>
        /// <param name="orderType"></param>
        /// <param name="side"></param>
        /// <param name="price"></param>
        /// <param name="size"></param>
        /// <param name="minuteToExpire"></param>
        /// <param name="timeInForce"></param>
        /// <returns></returns>
        public BitFlyerResponse <BfChildOrderResponse> SendChildOrder(
            BfProductCode productCode,
            BfOrderType orderType,
            BfTradeSide side,
            decimal price,
            decimal size,
            int minuteToExpire        = 0,
            BfTimeInForce timeInForce = BfTimeInForce.NotSpecified)
        {
            var request = new BfChildOrderRequest
            {
                ProductCode    = productCode,
                ChildOrderType = orderType,
                Side           = side,
                Price          = price,
                Size           = size,
                MinuteToExpire = minuteToExpire,
                TimeInForce    = timeInForce,
            };

            Validate(ref request);
            return(SendChildOrder(request));
        }
Esempio n. 8
0
 public BfxParentOrder(BfOrderType orderType)
 {
     _childOrders = new BfxChildOrder[orderType.GetChildCount()];
 }