using Managing.Domain.Accounts; using Managing.Domain.Candles; using Managing.Domain.Statistics; using Managing.Domain.Trades; using static Managing.Common.Enums; namespace Managing.Application.Abstractions.Services; public interface IExchangeService { Task OpenTrade( Account account, Ticker ticker, TradeDirection direction, decimal price, decimal quantity, decimal? leverage = null, TradeType tradeType = TradeType.Limit, bool reduceOnly = false, bool isForPaperTrading = false, DateTime? currentDate = null, bool ioc = true, decimal? stopLossPrice = null, decimal? takeProfitPrice = null); Task GetBalance(Account account, bool isForPaperTrading = false); Task> GetBalances(Account account, bool isForPaperTrading = false); Task GetPrice(Account account, Ticker ticker, DateTime date); Task GetTrade(Account account, string order, Ticker ticker); Task> GetCandles(Account account, Ticker ticker, DateTime startDate, Timeframe interval, bool isFirstCall = false); Task OpenStopLoss(Account account, Ticker ticker, TradeDirection originalDirection, decimal stopLossPrice, decimal quantity, bool isForPaperTrading = false, DateTime? currentDate = null); Task> GetTickers(Timeframe timeframe); Task OpenTakeProfit(Account account, Ticker ticker, TradeDirection originalDirection, decimal takeProfitPrice, decimal quantity, bool isForPaperTrading = false, DateTime? currentDate = null); Task ClosePosition(Account account, Position position, decimal lastPrice, bool isForPaperTrading = false); decimal GetVolume(Account account, Ticker ticker); Task> GetTrades(Account account, Ticker ticker); Task CancelOrder(Account account, Ticker ticker); decimal GetFee(Account account, bool isForPaperTrading = false); Task GetCandle(Account account, Ticker ticker, DateTime date); Task GetQuantityInPosition(Account account, Ticker ticker); Task> GetCandlesInflux(TradingExchanges exchange, Ticker ticker, DateTime startDate, Timeframe timeframe, int? limit = null); Task> GetCandlesInflux(TradingExchanges exchange, Ticker ticker, DateTime startDate, Timeframe timeframe, DateTime endDate, int? limit = null); Task GetBestPrice(Account account, Ticker ticker, decimal lastPrice, decimal quantity, TradeDirection direction); Orderbook GetOrderbook(Account account, Ticker ticker); Trade BuildEmptyTrade(Ticker ticker, decimal price, decimal quantity, TradeDirection direction, decimal? leverage, TradeType tradeType, DateTime dateTime, TradeStatus tradeStatus = TradeStatus.PendingOpen); Task> GetOpenOrders(Account account, Ticker ticker); Task GetTrade(string reference, string orderId, Ticker ticker); Task> GetFundingRates(); Task> GetBrokerPositions(Account account); }