Example #1
0
        public void Save(DealRequest DRequest)
        {
            lock (DataDealRequest)
            {
                if (DataDealRequest.ContainsKey(DRequest.CreationTime))
                {
                    DataDealRequest[DRequest.CreationTime] = DRequest;
                }
                else
                {
                    DataDealRequest.Add(DRequest.CreationTime, DRequest);
                }
            }

            this.SaveDataRequest(DRequest.CreationTime.ToString());
        }
Example #2
0
        public void DealClose(string confirmation, int tolerance, int expiration)
        {
            if (System.String.IsNullOrEmpty(confirmation))
            {
                return;
            }

            Deal deal = this.GetDealByConfirmationNumber(confirmation);


            if (deal == null)
            {
                return;
            }



            string product = deal.Product;


            if (!IsReady || !ForexConfiguration.ProductSettings.ContainsKey(product) || !ForexRates.Data.ContainsKey(product))
            {
                return;
            }

            ProductSetting Settings = ForexConfiguration.ProductSettings[product];
            Rate           rate     = ForexRates.GetRate(product);

            DealRequest DRequest = new DealRequest(expiration);

            DRequest.Product            = deal.Product;
            DRequest.Amount             = Math.Abs(int.Parse(deal.Contract)); //It can be negative if positionis short
            DRequest.ConfirmationNumber = deal.ConfirmationNumber;
            DRequest.DealSequence       = deal.DealSequence;
            DRequest.DealReference      = deal.DealReference;
            DRequest.Contract           = deal.Contract;
            DRequest.ASK       = rate.OFFER;
            DRequest.BID       = rate.BID;
            DRequest.BuySell   = deal.BuySell;// DRequest.Buy = !DRequest.Buy; //Reverse Order for closing purpouses
            DRequest.Buy       = !DRequest.Buy;
            DRequest.Close     = true;
            DRequest.Rate      = deal.Rate;
            DRequest.Tolerance = tolerance;

            this.Save(DRequest);
        }
Example #3
0
        public void DealRequest(bool TFBuySell, Rate rate, int amount, int tolerance, int expiration = 1000)
        {
            string product = rate.Pair;

            if (!IsReady || !ForexConfiguration.ProductSettings.ContainsKey(product) || !ForexRates.Data.ContainsKey(product))
            {
                return;
            }

            ProductSetting Settings = ForexConfiguration.ProductSettings[product];
            DealRequest    DRequest = new DealRequest(expiration);

            DRequest.Product   = product;
            DRequest.Executed  = false;
            DRequest.Buy       = TFBuySell;
            DRequest.Close     = false;
            DRequest.ASK       = rate.OFFER;
            DRequest.BID       = rate.BID;
            DRequest.Amount    = amount; //DRequest.Lots = (lots * int.Parse(Settings.OrderSize)).ToString();
            DRequest.Tolerance = tolerance;


            this.Save(DRequest);
        }
Example #4
0
        /// <summary>
        /// This method tries to instantly execute passed request
        /// </summary>
        /// <param name="DRequest">DealRequest containing information how to communicate with server.</param>
        public void DealInstantExecute(DealRequest DRequest)
        {
            if (!IsReady)
            {
                return;
            }

            #region Liquidate All
            if (DRequest.LiquidateAll)
            {
                BlotterOfDealResponse blotter = CEDTS_TradingService.LiquidateAll(ForexAuthentication.Token);

                if (ServiceTrading.BlotterSuccess(blotter))
                {
                    DataDealRequest[DRequest.CreationTime].Executed = true;
                    this.Save(DRequest);
                }

                AccountLogs.IsValid = false;
                return;
            }
            #endregion

            string product = DRequest.Product;
            if (!ForexRates.Data.ContainsKey(product))
            {
                return;
            }

            #region Close Position
            if (DRequest.ClosePosition)
            {
                DealResponse DResponse = CEDTS_TradingService.ClosePosition(ForexAuthentication.Token, product);

                if (DResponse.success)
                {
                    DataDealRequest[DRequest.CreationTime].Executed = true;
                    this.Save(DRequest);
                }

                AccountLogs.IsValid = false;
                return;
            }
            #endregion



            int    iDecimals = ForexConfiguration.GetDecimals(product);// ForexRates.Data[product].DECIMALS;
            string sRate     = DRequest.Buy ? Doubles.ToString(DRequest.ASK, null, iDecimals, 0, double.MaxValue, '.') : Doubles.ToString(DRequest.BID, null, iDecimals, 0, double.MaxValue, '.');
            string amount    = DRequest.Amount.ToString();

            #region Close
            if (DRequest.Close)
            {
                //double profit = this.GetLiveProfit(DRequest.ConfirmationNumber);

                DealResponse DResponse = CEDTS_TradingService.InstantExecution(
                    ForexAuthentication.Token,
                    product,
                    DRequest.BuySell,
                    amount,
                    sRate,
                    (int)DRequest.Tolerance);

                if (DResponse.success)
                {
                    //Account.ClosedBalance += profit;
                    DataDealRequest[DRequest.CreationTime].Executed = true;
                    this.Save(DRequest);
                }

                AccountLogs.IsValid = false;
                return;
            }
            #endregion

            #region Buy Sell
            if (DRequest.Buy || DRequest.Sell)
            {
                DealResponse DResponse = CEDTS_TradingService.InstantExecution(
                    ForexAuthentication.Token,
                    product,
                    DRequest.BuySell,
                    amount,
                    sRate,
                    (int)DRequest.Tolerance);

                if (DResponse.success)
                {
                    DataDealRequest[DRequest.CreationTime].Executed = true;
                    this.Save(DRequest);
                }


                AccountLogs.IsValid = false;
                return;
            }
            #endregion

            throw new Exception("DealInstantExecute Undefined request !");
        }