Пример #1
0
        public void UpdateAccount()
        {
            if (!ForexAuthentication.Connected || !ForexRates.Loaded || (DataAccount.IsValid && DataAccount.UpdateSpan < 1000))
            {
                return;
            }

            Margin marg = null;

            try
            {
                marg = CEDTS_TradingService.GetMarginBlotter(ForexAuthentication.Token).Output[0];
            }
            catch (Exception e)
            {
                Exceptions.Add(e);
                return;
            }

            Account current = AccountInfo.ToAccount(marg);

            current.MarginOrigin = TickTime.Now;

            if (DataAccount.Count <= 0)
            {
                if (current.OpenPosition == 0)
                {
                    current.ClosedBalance = current.MarginBalance;
                    current.OriginBalance = current.MarginBalance;
                }
                else
                {
                    throw new Exception("Archive log must contain at least one closed record !");
                }
            }
            else
            {
                current.ClosedBalance = this.GetClosedMarginBalance();
                current.OriginBalance = this.GetOriginMarginBalance();
            }

            if (DataAccount.Count <= 0 || (current.OpenPosition == 0 && !AccountInfo.EqualsPosition(current, AccountLog)))
            {
                lock (DataAccount)
                {
                    DataAccount.IsValid = false;
                    DataAccount.Add(current.MarginOrigin, current); //only closed position should be saved
                    DataAccount.SaveFile(false);
                }
            }

            current.LiveProfit  = this.GetLiveProfit();
            Account             = current; //Account.LiveOrigin = TickTime.Now;
            DataAccount.IsValid = true;
        }
Пример #2
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 !");
        }