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; }
/// <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 !"); }