/// <summary>
        /// Initializes a new instance of the <see cref="PositionMessageAdapter"/>.
        /// </summary>
        /// <param name="innerAdapter">The adapter, to which messages will be directed.</param>
        /// <param name="positionManager">The position calculation manager..</param>
        public PositionMessageAdapter(IMessageAdapter innerAdapter, IPositionManager positionManager)
            : base(innerAdapter)
        {
            _positionManager = positionManager ?? throw new ArgumentNullException(nameof(positionManager));

            if (_positionManager is ILogSource source && source.Parent == null)
            {
                source.Parent = this;
            }
        }
Esempio n. 2
0
        public Uc_Strategy(IOrderMaker orderMaker, TradeSettings settings, ITimeManager timeManager, ILogger logger)
        {
            this._orderMaker    = orderMaker;
            this._tradeSettings = settings;
            this._timeManager   = timeManager;
            this._logger        = logger;

            InitializeComponent();

            if (!File.Exists(_tradeSettings.FileName))
            {
                File.Create(_tradeSettings.FileName).Close();
            }
            _positionFile    = new PositionFile();
            _positionManager = ServiceFactory.CreatePositionManager(_orderMaker, _tradeSettings, logger);

            this.timer.Interval = _tradeSettings.Interval;
            this.timer.Enabled  = true;

            #region  UI
            var lbl = UIHelpers.CreateLabel(_tradeSettings.Name);
            lbl.Font = new System.Drawing.Font("新細明體", 11.25F);
            this.tpTop.Controls.Add(lbl, 0, 0);


            this.tpTop.Controls.Add(UIHelpers.CreateLabel("即時部位:"), 2, 0);
            lblPosition = UIHelpers.CreateLabel("");
            this.tpTop.Controls.Add(lblPosition, 3, 0);


            lblTime = UIHelpers.CreateLabel("");
            this.tpTop.Controls.Add(lblTime, 4, 0);


            for (int i = 0; i < _tradeSettings.Accounts.Count; i++)
            {
                var item = _tradeSettings.Accounts[i];

                var uc_Account = new Uc_Account();
                uc_Account.BindData(item);

                this.uc_AccountList.Add(uc_Account);


                fpanelAccounts.Height += uc_Account.Height;
                this.fpanelAccounts.Controls.Add(uc_Account);
                fpanelAccounts.Controls.SetChildIndex(uc_Account, 0);


                this.Height += uc_Account.Height;
            }
            #endregion
        }
 public DefaultConsumerDispatcher(ILoggerFactory loggerFactory, IMessageSerializer messageSerializer, Handlers handlers, IPositionManager positionManager)
 {
     if (handlers == null)
     {
         throw new ArgumentNullException(nameof(handlers));
     }
     _loggerFactory     = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
     _messageSerializer = messageSerializer ?? throw new ArgumentNullException(nameof(messageSerializer));
     _positionManager   = positionManager ?? throw new ArgumentNullException(nameof(positionManager));
     _handlers          = handlers.ToArray();
     _logger            = loggerFactory.GetLogger(typeof(DefaultConsumerDispatcher));
 }
Esempio n. 4
0
    public static IEnumerable <TopicPartitionOffset> PartitionsAssigned(
        ILogger logger,
        IReadOnlyList <TopicPartition> partitions,
        IPositionManager positionManager,
        Func <ConsumerContext, IEnumerable <TopicPartition>, Task> partitionsAssignedHandler,
        ConsumerContext context
        )
    {
        if (!partitions.Any())
        {
            return(Enumerable.Empty <TopicPartitionOffset>());
        }

        var partitionsByTopic = partitions
                                .GroupBy(p => p.Topic)
                                .Select(g => new { Topic = g.Key, Partitions = g.Select(p => p.Partition.Value) })
                                .ToList();

        logger.Info("Assignment: {@partitions}", partitionsByTopic);

        if (partitionsAssignedHandler != null)
        {
            AsyncHelpers.RunSync(() => partitionsAssignedHandler(context, partitions));
        }

        return(AsyncHelpers.GetAsync(async() =>
        {
            var results = await partitions
                          .Select(async tp => new
            {
                TopicPartition = tp,
                Position = await positionManager.Get(tp.Topic, tp.Partition.Value)
            })
                          .ToListAsync();

            return results
            .Select(a =>
            {
                if (a.Position.IsDefault)
                {
                    return a.TopicPartition.WithOffset(Offset.Beginning);
                }

                if (a.Position.IsOnlyNew)
                {
                    return a.TopicPartition.WithOffset(Offset.End);
                }

                return a.Position.Advance(1).ToTopicPartitionOffset();
            })
            .ToList();
        }));
    }
Esempio n. 5
0
 public OrderManager(IOrderRepository order,
                     IPositionManager positionManager,
                     IUpdatesManager updatesManager,
                     ITraderInfoManager trader,
                     IMessageBus messageBus)
 {
     _order           = order;
     _positionManager = positionManager;
     _updatesManager  = updatesManager;
     _trader          = trader;
     _messageBus      = messageBus;
 }
        private PositionsViewModel GetVm(
            IMarketDataManager marketDataManager         = null,
            IPositionManager positionManager             = null,
            IContractManager contractManager             = null,
            ITradeRecordingService tradeRecordingService = null)
        {
            var manager = marketDataManager ?? Substitute.For <IMarketDataManager>();

            _accountManager = Substitute.For <IAccountManager>();

            if (positionManager == null)
            {
                positionManager = Substitute.For <IPositionManager>();
                positionManager.RequestOpenOrdersAsync().Returns(Task.FromResult(new List <OpenOrderEventArgs>()));
            }

            if (contractManager == null)
            {
                contractManager = Substitute.For <IContractManager>();
                contractManager.RequestDetailsAsync(Arg.Any <Contract>()).Returns(Task.FromResult(new List <ContractDetails>()));
            }

            var queueProcessor = Substitute.For <IQueueProcessor>();

            queueProcessor
            .When(x => x.Enqueue(Arg.Any <Action>()))
            .Do(x =>
            {
                var action = x.Arg <Action>();
                action.Invoke();
            });

            var dispatcherHelper = Substitute.For <IDispatcherHelper>();

            dispatcherHelper
            .When(x => x.InvokeOnUiThread(Arg.Any <Action>()))
            .Do(x =>
            {
                var action = x.Arg <Action>();
                action.Invoke();
            });

            if (tradeRecordingService == null)
            {
                tradeRecordingService = Substitute.For <ITradeRecordingService>();
            }

            return(new PositionsViewModel(dispatcherHelper, manager, _accountManager, positionManager, contractManager, queueProcessor, tradeRecordingService));
        }
            /// <summary>
            /// Создать <see cref="InnerModel"/>.
            /// </summary>
            /// <param name="model">Модель расчета значений "греков" по формуле Блэка-Шоулза.</param>
            /// <param name="positionManager">Менеджер позиции.</param>
            public InnerModel(BlackScholes model, IPositionManager positionManager)
            {
                if (model == null)
                {
                    throw new ArgumentNullException("model");
                }

                if (positionManager == null)
                {
                    throw new ArgumentNullException("positionManager");
                }

                Model           = model;
                PositionManager = positionManager;
            }
        private PositionsViewModel GetPositionForSymbolTest(
            PositionItem item,
            IMarketDataManager marketDataManager = null,
            IPositionManager positionManager     = null,
            IContractManager contractManager     = null)
        {
            var vm        = GetVm(marketDataManager, positionManager, contractManager);
            var positions = new List <PositionItem>
            {
                item
            };

            // Act
            _accountManager.RequestPositionsAsync().Returns(positions);
            return(vm);
        }
Esempio n. 9
0
 public KafkaConsumerImplementation(ILoggerFactory loggerFactory, string address, IEnumerable <string> topics, string group,
                                    IConsumerDispatcher consumerDispatcher, IPositionManager positionManager)
 {
     if (loggerFactory == null)
     {
         throw new ArgumentNullException(nameof(loggerFactory));
     }
     if (topics == null)
     {
         throw new ArgumentNullException(nameof(topics));
     }
     _logger             = loggerFactory.GetLogger(typeof(KafkaConsumerImplementation));
     _address            = address ?? throw new ArgumentNullException(nameof(address));
     _group              = group ?? throw new ArgumentNullException(nameof(group));
     _consumerDispatcher = consumerDispatcher ?? throw new ArgumentNullException(nameof(consumerDispatcher));
     _topics             = topics.ToArray();
     _positionManager    = positionManager;
     _worker             = new Thread(Run)
     {
         IsBackground = true
     };
 }
Esempio n. 10
0
        public PositionsViewModel(
            IDispatcherHelper dispatcherHelper,
            IMarketDataManager marketDataManager,
            IAccountManager accountManager,
            IPositionManager positionManager,
            IContractManager contractManager,
            IQueueProcessor queueProcessor,
            ITradeRecordingService tradeRecordingService)
            : base(dispatcherHelper, queueProcessor)
        {
            Positions = new ObservableCollectionNoReset <PositionItem>(dispatcherHelper: DispatcherHelper);

            Messenger.Default.Register <ConnectionChangingMessage>(this, HandleConnectionChangingMessage);
            Messenger.Default.Register <OrderStatusChangedMessage>(this, OrderStatusChangedMessage.Tokens.Positions, OnOrderStatusChangedMessage);
            Messenger.Default.Register <BarPriceMessage>(this, HandleBarPriceMessage);

            _marketDataManager     = marketDataManager;
            _accountManager        = accountManager;
            _positionManager       = positionManager;
            _contractManager       = contractManager;
            _queueProcessor        = queueProcessor;
            _tradeRecordingService = tradeRecordingService;
        }
Esempio n. 11
0
        public FileSystemConsumerImplementation(string directoryPath, ILoggerFactory loggerFactory, IEnumerable <string> topics, string group, IConsumerDispatcher consumerDispatcher, IPositionManager positionManager)
        {
            if (topics == null)
            {
                throw new ArgumentNullException(nameof(topics));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }
            _directoryPath      = directoryPath;
            _consumerDispatcher = consumerDispatcher ?? throw new ArgumentNullException(nameof(consumerDispatcher));
            _positionManager    = positionManager ?? throw new ArgumentNullException(nameof(positionManager));

            _logger = loggerFactory.GetLogger(typeof(FileSystemConsumerImplementation));

            _workers = topics
                       .Select(topic => new Thread(() => PumpTopic(topic))
            {
                Name = $"Kafkaesque worker for topic '{topic}'"
            })
                       .ToList();
        }
Esempio n. 12
0
        public static IEnumerable <TopicPartitionOffset> PartitionsAssigned <T1, T2>(ILogger logger, IConsumer <T1, T2> consumer, IEnumerable <TopicPartition> partitions, IPositionManager positionManager)
        {
            var partitionsList = partitions.ToList();

            if (!partitionsList.Any())
            {
                return(Enumerable.Empty <TopicPartitionOffset>());
            }

            var partitionsByTopic = partitionsList
                                    .GroupBy(p => p.Topic)
                                    .Select(g => new { Topic = g.Key, Partitions = g.Select(p => p.Partition.Value) })
                                    .ToList();

            logger.Info("Assignment: {@partitions}", partitionsByTopic);

            return(partitionsList
                   .Select(tp => new
            {
                TopicPartition = tp,
                Position = AsyncHelpers.GetAsync(() => positionManager.Get(tp.Topic, tp.Partition.Value))
            })
                   .Select(a => a.Position?.Advance(1).ToTopicPartitionOffset() // either resume from the event following the last one successfully committedf
                           ?? a.TopicPartition.WithOffset(Offset.Beginning)));  // or just resume from the beginning
        }
Esempio n. 13
0
 public PositionService(IPositionManager positionManager)
 {
     _positionManager = positionManager;
 }
Esempio n. 14
0
 public InitialPositionDecorator(IPositionManager positionManager, StartFromPosition startFromPosition)
 {
     _positionManager   = positionManager ?? throw new ArgumentNullException(nameof(positionManager));
     _startFromPosition = startFromPosition;
 }
 public PositionController(FitnesDbContext context, IPositionManager manager)
 {
     _manager = manager;
     _context = context;
 }
        /// <inheritdoc />
        public PositionChangeMessage ProcessMessage(Message message)
        {
            IPositionManager CreateManager(long transId, string strategyId)
            {
                var manager = _managersByStrategyId.SafeAdd(strategyId, key => new PositionManager(ByOrders)
                {
                    Parent = this
                });

                _managersByTransId.Add(transId, Tuple.Create(manager, strategyId));
                return(manager);
            }

            void ProcessRegOrder(OrderRegisterMessage regMsg)
            {
                if (regMsg.StrategyId.IsEmpty())
                {
                    return;
                }

                IPositionManager manager;

                lock (_sync)
                    manager = CreateManager(regMsg.TransactionId, regMsg.StrategyId);

                manager.ProcessMessage(message);
            }

            switch (message.Type)
            {
            case MessageTypes.Reset:
            {
                lock (_sync)
                {
                    _managersByStrategyId.Clear();
                    _managersByTransId.Clear();
                }

                break;
            }

            case MessageTypes.OrderRegister:
            case MessageTypes.OrderReplace:
            {
                ProcessRegOrder((OrderRegisterMessage)message);
                break;
            }

            case MessageTypes.OrderPairReplace:
            {
                var pairMsg = (OrderPairReplaceMessage)message;

                ProcessRegOrder(pairMsg.Message1);
                ProcessRegOrder(pairMsg.Message2);

                break;
            }

            case MessageTypes.Execution:
            {
                var execMsg = (ExecutionMessage)message;

                if (execMsg.IsMarketData())
                {
                    break;
                }

                IPositionManager manager    = null;
                string           strategyId = null;

                lock (_sync)
                {
                    if (execMsg.TransactionId == 0)
                    {
                        if (_managersByTransId.TryGetValue(execMsg.OriginalTransactionId, out var tuple))
                        {
                            manager    = tuple.Item1;
                            strategyId = tuple.Item2;
                        }
                    }
                    else
                    {
                        if (!execMsg.StrategyId.IsEmpty())
                        {
                            strategyId = execMsg.StrategyId;
                            manager    = CreateManager(execMsg.TransactionId, strategyId);
                        }
                    }
                }

                if (manager == null)
                {
                    break;
                }

                var change = manager.ProcessMessage(message);

                if (change != null)
                {
                    change.StrategyId = strategyId;
                }

                return(change);
            }
            }

            return(null);
        }
Esempio n. 17
0
 public WireTapPositionsManager(IPositionManager positionManager) => _positionManager = positionManager;
 public PositionController(IPositionManager positionManager) : base()
 {
     _positionManager = positionManager;
 }
 public PositionController(IPositionManager positionManager)
 {
     this.positionManager = positionManager;
 }
Esempio n. 20
0
 public PositionController(IPositionManager manager, IMapper mapper)
 {
     _manager = manager;
     _mapper  = mapper;
 }
Esempio n. 21
0
 public PositionController()
 {
     _manager = IoCContainer.Resolve <IPositionManager>();
 }