Exemple #1
0
        public static bool ParseOpenPositions(cAlgo.API.Positions _positions, out Messaging.Protobuf.Positions positions, string openedPositionLabel = "")
        {
            try
            {
                int index = 0;
                positions = new Messaging.Protobuf.Positions();

                foreach (cAlgo.API.Position p in _positions)
                {
                    if (!ParseOpenPosition(p, out Messaging.Protobuf.Position position, Messaging.Protobuf.Position.Types.StateChange.None))
                    {
                        continue;
                    }

                    //Update StateChage if this is a newly opened position
                    if (position.Label == openedPositionLabel)
                    {
                        position.StateChange = Messaging.Protobuf.Position.Types.StateChange.Opened;
                    }

                    positions.Position[index] = position;
                    index++;
                }
                positions.Count = index;
            }
            catch (Exception e)
            {
                Console.WriteLine("FAILED to parse Positions: " + e.ToString());
                positions = null;
                return(false);
            }
            return(true);
        }
        //Return the greater retrace of the percentage price or percent closed positions
        public void CalculateRetraceFactor(Messaging.Protobuf.Positions positions)
        {
            double retraceFactor = 0;
            double percentClosed = BotState.CalcPercentOfPositionsClosed();

            if (percentClosed <= percentRetrace)
            {
                retraceFactor = percentRetrace;
            }
            else
            {
                retraceFactor = percentClosed;
            }
            RetraceFactor = (int)retraceFactor;
        }
Exemple #3
0
        protected override void OnMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (!IsInitialised)
            {
                return;
            }
            DateTime   niffleTimeStamp = DateTime.FromBinary(e.Message.Timestamp);
            RoutingKey routingKey      = new RoutingKey(e.EventArgs.RoutingKey);
            string     source          = routingKey.GetSource();
            string     action          = routingKey.GetAction();
            string     _event          = routingKey.GetEvent();

            //Service messages received will be notify
            if (e.Message.Type == Niffle.Types.Type.Service)
            {
                if (e.Message.Service != null)
                {
                    if (e.Message.Service.Success)
                    {
                        ReportExecution(source, action, _event, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                    }
                }
            }

            //Positions messages will be for Position Opened, Closed or Modified.
            if (e.Message.Type == Niffle.Types.Type.Positions)
            {
                if (e.Message.Positions != null)
                {
                    Messaging.Protobuf.Positions positions = e.Message.Positions;
                    for (int count = 0; count < positions.Count; count++)
                    {
                        if (routingKey.GetEventAsEnum() == Event.ONPOSITIONCLOSED)
                        {
                            if (positions.Position[count].StateChange == Messaging.Protobuf.Position.Types.StateChange.Closed)
                            {
                                ReportPositionClosed(positions.Position[count]);
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONPOSITIONOPENED)
                        {
                            if (positions.Position[count].StateChange == Messaging.Protobuf.Position.Types.StateChange.Opened)
                            {
                                ReportPositionOpened(positions.Position[count]);
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONPOSITIONMODIFIED)
                        {
                            if (positions.Position[count].StateChange == Messaging.Protobuf.Position.Types.StateChange.Modified)
                            {
                                ReportPositionModified(positions.Position[count], Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                            }
                        }
                    }
                }
            }

            //Orders messages will be for Orders Placed, Cancelled or Modified
            if (e.Message.Type == Niffle.Types.Type.Orders)
            {
                if (e.Message.Orders != null)
                {
                    Messaging.Protobuf.Orders orders = e.Message.Orders;
                    for (int count = 0; count < orders.Count; count++)
                    {
                        if (routingKey.GetEventAsEnum() == Event.ONORDERPLACED)
                        {
                            if (orders.Order[count].StateChange == Messaging.Protobuf.Order.Types.StateChange.Placed)
                            {
                                ReportOrderPlaced(orders.Order[count]);
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONORDERCANCELLED)
                        {
                            if (orders.Order[count].StateChange == Messaging.Protobuf.Order.Types.StateChange.Cancelled)
                            {
                                ReportOrderCancelled(orders.Order[count], Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONORDERMODIFIED)
                        {
                            if (orders.Order[count].StateChange == Messaging.Protobuf.Order.Types.StateChange.Modified)
                            {
                                ReportOrderModified(orders.Order[count], Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                            }
                        }
                    }
                }
            }

            //Error messages
            if (e.Message.Type == Niffle.Types.Type.Orders)
            {
                if (e.Message.Error != null)
                {
                    ReportError(source, e.Message.Error, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                }
            }
        }