/// <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; } }
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)); }
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(); })); }
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); }
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 }; }
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; }
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(); }
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 }
public PositionService(IPositionManager positionManager) { _positionManager = positionManager; }
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); }
public WireTapPositionsManager(IPositionManager positionManager) => _positionManager = positionManager;
public PositionController(IPositionManager positionManager) : base() { _positionManager = positionManager; }
public PositionController(IPositionManager positionManager) { this.positionManager = positionManager; }
public PositionController(IPositionManager manager, IMapper mapper) { _manager = manager; _mapper = mapper; }
public PositionController() { _manager = IoCContainer.Resolve <IPositionManager>(); }