Esempio n. 1
0
        public void Close(GF.Api.Positions.IPosition position, Action action)
        {
            if (_resultActions.ContainsKey(position))
            {
                return;
            }

            var orders = GetPositionOrders(position).ToList();

            if (orders.Any())
            {
                CancelAll(orders);
            }
            else
            {
                if (position.Net.Volume == 0)
                {
                    action();
                    return;
                }

                PlaceExitOrder(position);
            }

            _resultActions[position] = action;
        }
Esempio n. 2
0
        public void ExitPosition(GF.Api.Positions.IPosition position, GF.Api.Positions.PositionChangedEventArgs e)
        {
            var volume = GetPositionVolume(position);
            var side   = volume > 0 ? OrderSide.Sell : OrderSide.BuyToCover;

            Console.WriteLine("Initiating order...");
            PlaceOrder(gfClient, e.ContractPosition.Contract.ElectronicContract, OrderSide.Sell, Math.Abs(volume));
        }
Esempio n. 3
0
        private void PlaceExitOrder(GF.Api.Positions.IPosition avgPosition)
        {
            OrderDraft orderDraft = new OrderDraftBuilder()
                                    .WithAccountID(avgPosition.Account.ID)
                                    .WithContractID(avgPosition.Contract.ID)
                                    .WithSide(avgPosition.Net.Volume > 0 ? OrderSide.Sell : OrderSide.Buy)
                                    .WithOrderType(OrderType.Market)
                                    .WithQuantity(Math.Abs(avgPosition.Net.Volume))
                                    .WithComments("Exit")
                                    .Build();

            IReadOnlyList <OrderDraftValidationError> validationErrors = _client.Orders.Drafts.Validate(orderDraft);

            if (validationErrors.Any())
            {
                throw new Exception($"Exit Order Draft validation error: {validationErrors.First()}");
            }

            _client.Orders.SendOrder(orderDraft);
        }
Esempio n. 4
0
 private int GetPositionVolume(GF.Api.Positions.IPosition position)
 {
     //            return position.Net.Volume;  //Does this not work??
     return(position.Short.Volume - position.Long.Volume);
 }
Esempio n. 5
0
 public IEnumerable <GF.Api.Orders.IOrder> GetPositionOrders(GF.Api.Positions.IPosition position)
 {
     return(GetPositionOrders(position.Account, position.Contract));
 }