/// <summary>
        /// The control only consumes dataDelivery provider, so that it is not available for sessionless operations too.
        /// </summary>
        public NewOrderControl(IQuoteProvider dataProvider, DataSessionInfo session, 
                    bool balancedPositionModeVisible, bool balancePositionModeChecked)
        {
            InitializeComponent();

            _dataProvider = dataProvider;
            if (_dataProvider != null)
            {
                _dataProvider.QuoteUpdateEvent += _dataProvider_OnValuesUpdateEvent;
            }

            _balancedPositionModeVisible = balancedPositionModeVisible;
            _balancePositionModeChecked = balancePositionModeChecked;

            _session = session;

            numericUpDownStopLoss.Increment = session.DecimalIncrement;
            numericUpDownStopLoss.DecimalPlaces = session.DecimalPlaces;

            numericUpDownSlippage.Increment = session.DecimalIncrement;
            numericUpDownSlippage.DecimalPlaces = session.DecimalPlaces;

            numericUpDownTakeProfit.Increment = session.DecimalIncrement;
            numericUpDownTakeProfit.DecimalPlaces = session.DecimalPlaces;

            numericUpDownPendingPrice.Increment = session.DecimalIncrement;
            numericUpDownPendingPrice.DecimalPlaces = session.DecimalPlaces;
        }
예제 #2
0
        public static string PostUsing(IQuoteProvider quote)
        {
            string url = "";

            try {
                string postQueryString = CreateQueryString (quote.Parameters);

                HttpWebRequest request = (HttpWebRequest) WebRequest.Create (quote.BaseUrl);
                request.Timeout = 15000;
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.AllowAutoRedirect = quote.ShouldAllowAutoRedirect;

                UTF8Encoding encoding = new UTF8Encoding ();
                byte[] data = encoding.GetBytes (postQueryString);
                request.ContentLength = data.Length;

                using (Stream newStream = request.GetRequestStream ())
                {
                    newStream.Write (data, 0, data.Length);
                }

                using (HttpWebResponse response = (HttpWebResponse) request.GetResponse ())
                {
                    url = quote.GetQuoteUrlFromResponse (response);
                }
            }
            catch {
                url = "An error occured while posting quote.";
            }

            return url;
        }
 /// <summary>
 /// Detailed constructor.
 /// </summary>
 public ModifyOrderControl(ModeEnum mode, ActiveOrder order)
 {
     InitializeComponent();
     _provider = order.OrderExecutionProvider;
     _mode = mode;
     _order = order;
     _dataProvider = order.QuoteProvider;
     _dataProvider.QuoteUpdateEvent += new QuoteProviderUpdateDelegate(_dataProvider_QuoteUpdateEvent);
     _session = order.SessionInfo.Value;
 }
        public void UnInitialize()
        {
            if (_dataProvider != null)
            {
                _dataProvider.QuoteUpdateEvent -= new QuoteProviderUpdateDelegate(_dataProvider_QuoteUpdateEvent);
                _dataProvider = null;
            }

            _order = null;
        }
예제 #5
0
        public StockPricePollingWorker(string id, int pollRateMilliseconds, TriggerController controller, IQuoteProvider quoteProvider) : base(id, pollRateMilliseconds)
        {
            if (controller == null)
                throw new ArgumentNullException("controller");
            if (quoteProvider == null)
                throw new ArgumentNullException("quoteProvider");

            _controller = controller;
            _quoteProvider = quoteProvider;
        }
예제 #6
0
        /// <summary>
        /// Constructor, allows direct order initialization.
        /// </summary>
        /// <param name="session"></param>
        /// <param name="initialize">Initialize order on construction. If init fails, exception will occur.</param>
        public ActiveOrder(ISourceManager manager, ISourceOrderExecution executionProvider,
            IQuoteProvider quoteProvider, ComponentId dataSourceId, Symbol symbol, bool initialize)
        {
            _manager = manager;
            _symbol = symbol;

            _dataSourceId = dataSourceId;

            _executionProvider = executionProvider;
            _quoteProvider = quoteProvider;

            State = OrderStateEnum.UnInitialized;

            if (initialize)
            {
                SystemMonitor.CheckThrow(Initialize());
            }
        }
예제 #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="provider"></param>
        protected override void OnQuoteUpdate(IQuoteProvider provider)
        {
            lock (this)
            {
                if (provider != null)
                {
                    if (this.AddQuote(provider.CurrentQuote))
                    {
                        if (this.writer != null)
                        {
                            this.Decide(provider.CurrentQuote);

                            this.writer.WriteLine("{0}, {1}, {2}", provider.Time, this.energyAsk, this.energyBid);
                        }
                    }
                }
            }
        }
예제 #8
0
        /// <summary>
        /// Constructor, allows direct order initialization.
        /// </summary>
        /// <param name="session"></param>
        /// <param name="initialize">Initialize order on construction. If init fails, exception will occur.</param>
        public ActiveOrder(ISourceManager manager, ISourceOrderExecution executionProvider,
                           IQuoteProvider quoteProvider, ComponentId dataSourceId, Symbol symbol, bool initialize)
        {
            _manager = manager;
            _symbol  = symbol;

            _dataSourceId = dataSourceId;

            _executionProvider = executionProvider;
            _quoteProvider     = quoteProvider;

            State = OrderStateEnum.UnInitialized;

            if (initialize)
            {
                SystemMonitor.CheckThrow(Initialize());
            }
        }
예제 #9
0
        private void toolStripButtonNewOrder_Click(object sender, EventArgs e)
        {
            if (_manager == null)
            {
                return;
            }

            Position position = SelectedPosition;

            if (position == null)
            {
                MessageBox.Show("Select a position to put order to.");
                return;
            }

            if (position.DataDelivery.OperationalState != OperationalStateEnum.Operational ||
                position.OrderExecutionProvider.OperationalState != OperationalStateEnum.Operational)
            {
                MessageBox.Show("Position data or order execution provider not operational.");
                return;
            }

            IQuoteProvider  quotes = _manager.ObtainQuoteProvider(position.DataDelivery.SourceId, position.Symbol);
            DataSessionInfo?info   = _manager.GetSymbolDataSessionInfo(position.DataDelivery.SourceId, position.Symbol);

            if (info.HasValue == false)
            {
                MessageBox.Show("Failed to establish position session.", Application.ProductName + " - Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            NewOrderControl control = new NewOrderControl(quotes, info.Value, true, true);

            control.CreatePlaceOrderEvent += new NewOrderControl.CreatePlaceOrderDelegate(SubmitPositionOrder);

            HostingForm f = new HostingForm("New Order", control);

            f.FormBorderStyle = FormBorderStyle.FixedSingle;
            f.MaximizeBox     = false;
            f.ShowDialog();
            control.CreatePlaceOrderEvent -= new NewOrderControl.CreatePlaceOrderDelegate(SubmitPositionOrder);
        }
예제 #10
0
        /// <summary>
        ///
        /// </summary>
        bool GetProviders(Symbol symbol, out IQuoteProvider quotes, out IDataBarHistoryProvider bars)
        {
            quotes = _manager.ObtainQuoteProvider(_dataDelivery.SourceId, symbol);
            RuntimeDataSessionInformation sessionInformation = _dataDelivery.GetSymbolRuntimeSessionInformation(symbol);

            if (sessionInformation.AvailableDataBarPeriods == null || sessionInformation.AvailableDataBarPeriods.Count == 0)
            {
                quotes = null;
                bars   = null;
                SystemMonitor.OperationError("Can not close order since no suitable data provider sessions found.");
                return(false);
            }

            bars = _manager.ObtainDataBarHistoryProvider(_dataDelivery.SourceId, symbol, sessionInformation.AvailableDataBarPeriods[0]);

            if (quotes == null || quotes.Ask.HasValue == false || bars == null)
            {
                return(false);
            }

            return(true);
        }
예제 #11
0
        /// <summary>
        ///
        /// </summary>
        public virtual bool SetInitialParameters(ISourceManager manager, ComponentId sourceId, ExpertSession session)
        {
            _sessionInfo = session.Info;

            _manager = manager;

            _sourceId = sourceId;

            _dataDelivery = manager.ObtainDataDelivery(sourceId);

            _quote = manager.ObtainQuoteProvider(sourceId, _sessionInfo.Symbol);

            _tickProvider = manager.ObtainDataTickHistoryProvider(sourceId, _sessionInfo.Symbol);

            _dataBarProvider = null;

            bool result = _dataDelivery != null && _quote != null && _tickProvider != null;

            SystemMonitor.CheckError(result, "Failed to initialize data provider.");

            return(result);
        }
예제 #12
0
 protected Subscriber(IAggregateWriter <RequestForQuotes> aggregateWriter, IQuoteProvider quoteProvider)
 {
     AggregateWriter = aggregateWriter;
     QuoteProvider   = quoteProvider;
 }
예제 #13
0
 void _dataProvider_QuoteUpdateEvent(IQuoteProvider provider)
 {
     WinFormsHelper.BeginFilteredManagedInvoke(this, TimeSpan.FromMilliseconds(250), UpdateUI);
 }
예제 #14
0
        /// <summary>
        /// Update position parameters.
        /// </summary>
        /// <param name="symbol"></param>
        /// <param name="volumeChange">*Directional* volume change, 0 for no change.</param>
        /// <param name="operationResultMessage"></param>
        /// <returns></returns>
        bool UpdatePosition(Symbol symbol, int volumeChange, out string operationResultMessage)
        {
            if (_manager == null || _dataDelivery == null || _dataDelivery.SourceId.IsEmpty)
            {
                operationResultMessage = "Not initialized properly for operation.";
                return(false);
            }

            // Update the position corresponding to this order.
            Position position = _tradeEntities.GetPositionBySymbol(symbol, true);

            if (position == null)
            {
                operationResultMessage = "Failed to find corresponding position.";
                return(false);
            }

            IQuoteProvider quotes = position.QuoteProvider;

            if (quotes == null)
            {
                operationResultMessage = "Failed to find corresponding quotation provider.";
                return(false);
            }

            PositionInfo updatedPositionInfo = position.Info;

            if (updatedPositionInfo.Volume.HasValue == false)
            {
                updatedPositionInfo.Volume = 0;
            }

            updatedPositionInfo.PendingBuyVolume  = 0;
            updatedPositionInfo.PendingSellVolume = 0;

            if (volumeChange != 0)
            {
                //decimal initialPositionResult = updatedPositionInfo.Result.Value;

                decimal?operationBasis = quotes.GetOrderOpenQuote(volumeChange > 0);
                if (operationBasis.HasValue == false)
                {
                    operationResultMessage = "Failed to establish order operation basis price.";
                    return(false);
                }
                else
                {
                    //SystemMonitor.CheckError(updatedPositionInfo.Basis.HasValue, "Position has no properly assigned basis price.");
                }

                if (RecalculatePositionBasis(ref updatedPositionInfo, volumeChange, operationBasis.Value) == false)
                {
                    operationResultMessage = "Failed to recalculate position parameters.";
                    return(false);
                }
            }

            decimal?pendingPrice = quotes.GetOrderCloseQuote(updatedPositionInfo.Volume > 0);

            if (updatedPositionInfo.Volume.HasValue && updatedPositionInfo.Volume != 0 &&
                pendingPrice.HasValue && updatedPositionInfo.Basis.HasValue)
            {
                updatedPositionInfo.Result = (pendingPrice.Value - updatedPositionInfo.Basis.Value) * updatedPositionInfo.Volume.Value;
            }
            else
            {
                updatedPositionInfo.Result = 0;
            }

            bool positionClosing = (position.Volume > 0 && volumeChange < 0) || (position.Volume < 0 && volumeChange > 0);

            if (volumeChange != 0 && positionClosing && position.Info.Result.HasValue && updatedPositionInfo.Result.HasValue)
            {// Update the account upon closing some (or all) of the position volume.
                _runningAccountBalance += position.Info.Result.Value - updatedPositionInfo.Result.Value;
            }

            position.UpdateInfo(updatedPositionInfo);

            operationResultMessage = string.Empty;
            return(true);
        }
        /// <summary>
        /// 
        /// </summary>
        bool GetProviders(Symbol symbol, out IQuoteProvider quotes, out IDataBarHistoryProvider bars)
        {
            quotes = _manager.ObtainQuoteProvider(_dataDelivery.SourceId, symbol);
            RuntimeDataSessionInformation sessionInformation = _dataDelivery.GetSymbolRuntimeSessionInformation(symbol);

            if (sessionInformation.AvailableDataBarPeriods == null || sessionInformation.AvailableDataBarPeriods.Count == 0)
            {
                quotes = null;
                bars = null;
                SystemMonitor.OperationError("Can not close order since no suitable data provider sessions found.");
                return false;
            }

            bars = _manager.ObtainDataBarHistoryProvider(_dataDelivery.SourceId, symbol, sessionInformation.AvailableDataBarPeriods[0]);

            if (quotes == null || quotes.Ask.HasValue == false || bars == null)
            {
                return false;
            }

            return true;
        }
예제 #16
0
        public StockPricePollingWorker(string id, int pollRateMilliseconds, TriggerController controller, IQuoteProvider quoteProvider) : base(id, pollRateMilliseconds)
        {
            if (controller == null)
            {
                throw new ArgumentNullException("controller");
            }
            if (quoteProvider == null)
            {
                throw new ArgumentNullException("quoteProvider");
            }

            _controller    = controller;
            _quoteProvider = quoteProvider;
        }
 void Quote_QuoteUpdateEvent(IQuoteProvider provider)
 {
     OnQuoteUpdate();
 }
예제 #18
0
        /// <summary>
        ///
        /// </summary>
        protected override string OnExecuteMarket(ISourceOrderExecution provider, OrderTypeEnum orderType, int volume,
                                                  decimal?price, decimal?slippage, decimal?takeProfit, decimal?stopLoss, TimeSpan timeOut,
                                                  out PositionExecutionInfo executionInfo, out string operationResultMessage)
        {
            SystemMonitor.CheckError(provider.SupportsActiveOrderManagement, "Wrong position type for this provider.");

            executionInfo = PositionExecutionInfo.Empty;

            IQuoteProvider quoteProvider = _manager.ObtainQuoteProvider(_dataDelivery.SourceId, Symbol);

            if (quoteProvider == null)
            {
                operationResultMessage = "Failed to establish quote provider for [" + _dataDelivery.SourceId.Name + ", " + Symbol.Name + "].";
                SystemMonitor.Error(operationResultMessage);
                return(string.Empty);
            }

            price = ProcessPrice(quoteProvider, orderType, price);

            // New order shall be created.
            ActiveOrder order = new ActiveOrder(_manager, provider, quoteProvider, _dataDelivery.SourceId, Symbol, true);

            OrderInfo?infoReference;

            // Using the extended operationTimeOut to 40 seconds.
            bool result = provider.SynchronousExecute(provider.DefaultAccount.Info, order, _info.Symbol,
                                                      orderType, volume, slippage, price, takeProfit, stopLoss, string.Empty, TimeSpan.FromSeconds(40), out infoReference, out operationResultMessage);

            if (result && infoReference.HasValue)
            {
                OrderInfo infoAssign = infoReference.Value;
                if (infoAssign.Type == OrderTypeEnum.UNKNOWN)
                {
                    infoAssign.Type = orderType;
                }

                if (infoAssign.Volume == int.MinValue ||
                    infoAssign.Volume == int.MaxValue)
                {// Volume was not retrieved by integration.
                    infoAssign.Volume = volume;
                }

                if (infoAssign.OpenPrice.HasValue)
                {
                    executionInfo = new PositionExecutionInfo(infoReference.Value.Id, _dataDelivery.SourceId, provider.SourceId, Symbol,
                                                              infoAssign.Type, infoAssign.OpenPrice.Value, volume, volume,
                                                              infoAssign.OpenTime, PositionExecutionInfo.ExecutionResultEnum.Success);
                }
                else
                {
                    SystemMonitor.Error("Received execution result, but price not assigned.");
                }

                order.AdoptInfo(infoAssign);

                provider.TradeEntities.AddOrder(order);
                return(infoReference.Value.Id);
            }

            return(string.Empty);
        }
        public virtual void Dispose()
        {
            UnInitialize();

            _manager = null;

            _dataDelivery = null;

            _quote = null;

            _tickProvider = null;

            _dataBarProvider = null;

            ChangeOperationalState(OperationalStateEnum.Disposed);
        }
예제 #20
0
 public QuoteCurrencyService(IQuoteProvider quoteProvider)
 {
     this.quoteProvider = quoteProvider;
 }
 void _dataProvider_QuoteUpdateEvent(IQuoteProvider provider)
 {
     WinFormsHelper.BeginFilteredManagedInvoke(this, TimeSpan.FromMilliseconds(250), UpdateUI);
 }
        /// <summary>
        /// 
        /// </summary>
        public virtual bool SetInitialParameters(ISourceManager manager, ComponentId sourceId, ExpertSession session)
        {
            _sessionInfo = session.Info;

            _manager = manager;

            _sourceId = sourceId;

            _dataDelivery = manager.ObtainDataDelivery(sourceId);

            _quote = manager.ObtainQuoteProvider(sourceId, _sessionInfo.Symbol);

            _tickProvider = manager.ObtainDataTickHistoryProvider(sourceId, _sessionInfo.Symbol);

            _dataBarProvider = null;

            bool result = _dataDelivery != null && _quote != null && _tickProvider != null;

            SystemMonitor.CheckError(result, "Failed to initialize data provider.");

            return result;
        }
 void _dataProvider_OnValuesUpdateEvent(IQuoteProvider dataProvider)
 {
     WinFormsHelper.BeginFilteredManagedInvoke(this, UpdateUI);
 }
예제 #24
0
        public override IEnumerable <Item> DynamicModifierItemsForItem(Item item)
        {
            IQuoteProvider quoteProvider = QuoteProviderFactory.GetProviderFromPreferences();

            return(quoteProvider.SavedTags.Cast <Item> ());
        }
예제 #25
0
        void AddUnknownTags(string tags, IQuoteProvider service)
        {
            QuoteTagItem tag;

            foreach (string tagName in tags.Trim ().Split (' ')) {
                tag = new QuoteTagItem (tagName);

                if (service.SavedTags.Contains (tag)) continue;

                service.AddTag (tag);
            }
        }
예제 #26
0
 protected override void OnQuoteUpdate(IQuoteProvider provider)
 {
     if (provider != null)
     {
     }
 }
        /// <summary>
        /// Register IQuoteProvider.
        /// </summary>
        protected bool AddElement(ComponentId id, Symbol symbol, IQuoteProvider provider)
        {
            if (id.IsEmpty || symbol.IsEmpty || provider == null)
            {
                SystemMonitor.Warning("Invalid Id, Symbol or quote provider instance.");
                return false;
            }

            lock (this)
            {
                if (_quoteProviders.ContainsKey(id) && _quoteProviders[id].ContainsKey(symbol))
                {
                    SystemMonitor.Warning("Failed to add order execution provider, since already added with this Id.");
                    return false;
                }

                if (_quoteProviders.ContainsKey(id) == false)
                {
                    _quoteProviders.Add(id, new Dictionary<Symbol, IQuoteProvider>());
                }

                _quoteProviders[id].Add(symbol, provider);
            }

            return true;
        }
예제 #28
0
 /// <summary>
 /// 
 /// </summary>
 public virtual void Dispose()
 {
     _manager = null;
     _executionProvider = null;
     _quoteProvider = null;
     _dataSourceId = ComponentId.Empty;
 }
예제 #29
0
 /// <summary>
 ///
 /// </summary>
 public override void Dispose()
 {
     _manager           = null;
     _quoteProvider     = null;
     _executionProvider = null;
 }
 public HistoricalQuoteController(IQuoteProvider provider, IHistoricalQuotesStorage storageClient)
 {
     _provider = provider;
     _storageClient = storageClient;
 }
예제 #31
0
 /// <summary>
 /// Handle dataDelivery updates; used by children types to implement placement strategies.
 /// </summary>
 protected virtual void Quote_QuoteUpdateEvent(IQuoteProvider provider)
 {
 }
예제 #32
0
 /// <summary>
 /// 
 /// </summary>
 public override void Dispose()
 {
     _manager = null;
     _quoteProvider = null;
     _executionProvider = null;
 }
        public void UnInitializeControl()
        {
            if (DataProvider != null)
            {
                DataProvider.QuoteUpdateEvent -= _dataProvider_OnValuesUpdateEvent;
            }

            _dataProvider = null;
        }
예제 #34
0
 /// <summary>
 /// Handle dataDelivery updates; used by children types to implement placement strategies.
 /// </summary>
 protected virtual void Quote_QuoteUpdateEvent(IQuoteProvider provider)
 {
 }
        void Quotes_QuoteUpdateEvent(IQuoteProvider provider)
        {
            // Changing the name of the trade chart series is done in the PlatformExpertSessionControl,
            // since it requires the session status.

            RaiseSeriesValuesUpdated(true);
        }
        /// <summary>
        /// 
        /// </summary>
        decimal? ProcessPrice(IQuoteProvider quoteProvider, OrderTypeEnum orderType, decimal? price)
        {
            if (price.HasValue == false && quoteProvider.Ask.HasValue && quoteProvider.Bid.HasValue)
            {
                if (OrderInfo.TypeIsBuy(orderType))
                {
                    return quoteProvider.Ask;
                }
                else
                {
                    return quoteProvider.Bid;
                }
            }

            return price;
        }
예제 #37
0
 /// <summary>
 /// NON UI Thread.
 /// </summary>
 void Quote_QuoteUpdateEvent(IQuoteProvider provider)
 {
     WinFormsHelper.BeginFilteredManagedInvoke(this, UpdateUI);
 }
예제 #38
0
 public RFQController(IQuoteProvider quoteProvider)
 {
     _quoteProvider = quoteProvider;
 }
예제 #39
0
 protected virtual void OnQuoteUpdate(IQuoteProvider provider)
 {
 }
예제 #40
0
 public RaiseRFQSubscriber(IAggregateWriter <RequestForQuotes> aggregateWriter, IQuoteProvider quoteProvider)
     : base(aggregateWriter, quoteProvider)
 {
 }
예제 #41
0
 public BuySpreadFactory(IEnumerable <StrategyHeader> leftLeg, IEnumerable <StrategyHeader> rightLeg, IQuoteProvider quoteProvider)
 {
     this.quoteProvider = quoteProvider;
     this.leftLeg       = leftLeg;
     this.rightLeg      = rightLeg;
 }
예제 #42
0
 public CancelRFQRequestSubscriber(IAggregateWriter <RequestForQuotes> aggregateWriter, IQuoteProvider quoteProvider)
     : base(aggregateWriter, quoteProvider)
 {
 }
        /// <summary>
        /// Will calculate the result of this execution up until now, against the values of the provider.
        /// </summary>
        /// <param name="provider"></param>
        /// <returns></returns>
        public decimal? GetPendingResult(IQuoteProvider provider, Order.ResultModeEnum mode, DataSessionInfo info)
        {
            if (this.IsEmpty || _executedPrice.HasValue == false || this._executedPrice == 0 || provider == null)
            {
                return null;
            }

            return Order.GetResult(mode, _executedPrice, null, _volumeExecuted, Symbol, OrderStateEnum.Executed, OrderType, null, Symbol.Empty,
                info.LotSize, info.DecimalPlaces, provider.Ask, provider.Bid);
        }
 /// <summary>
 /// NON UI Thread.
 /// </summary>
 void Quote_QuoteUpdateEvent(IQuoteProvider provider)
 {
     WinFormsHelper.BeginFilteredManagedInvoke(this, UpdateUI);
 }
예제 #45
0
 void _dataProvider_OnValuesUpdateEvent(IQuoteProvider dataProvider)
 {
     WinFormsHelper.BeginFilteredManagedInvoke(this, UpdateUI);
 }
 void Quote_QuoteUpdateEvent(IQuoteProvider provider)
 {
     OnQuoteUpdate();
 }
예제 #47
0
 public HomeController(IQuoteProvider quoteProvider)
 {
     _quoteProvider = quoteProvider;
 }