public void FXMktHist_GetRealFXMarket() { FXMarketHistory fxmh = MarketTestTools.CreateMktHistory(); FXMarket fxNull = fxmh.GetRealFXMarket(MarketTestTools.dateArt, isExactDate: true); FXMarket fXMarket = fxmh.GetRealFXMarket(MarketTestTools.dateArt); if (fxNull != null) { Assert.IsTrue(false); } Assert.IsTrue(fXMarket.IsEquivalentTo(MarketTestTools.CreateMarket())); }
public void ModifyTotalCcy_AssetTest() { Account acc = Init.CreateAccountAsset1(); FXMarket fxMkt = Init.CreateFXMarket(); AssetMarket aMkt = Init.CreateAssetMarket(fxMkt); acc.ModifyTotalCcy(fxMkt, aMkt, fxMkt.CcyRef); Assert.IsTrue( acc.TotalCcy == fxMkt.CcyRef && acc.TotalAmount == acc.Amount * aMkt.GetQuote(new AssetCcyPair(Init.Asset1(), Init.Ccy2())) ); }
public void ModifyAmount_AssetTest() { Account acc = Init.CreateAccountAsset1(); FXMarket FXMkt = Init.CreateFXMarket(); acc.ConvertedCcy = FXMkt.CcyRef; AssetMarket aMkt = Init.CreateAssetMarket(FXMkt); acc.ModifyTotalCcy(FXMkt, aMkt, FXMkt.CcyRef); acc.ModifyAmount(FXMkt, aMkt, "NOT USED", "1.00"); Assert.IsTrue(acc.Amount == 1); }
public IAccount GetTotalAccount(FXMarket mkt, AssetMarket aMkt, ICcyAsset convCcy, string name, double?lastAmount) { _LastAmount = lastAmount; if (Ccy.IsCcy()) { RecalculateAmount(mkt, convCcy.Ccy); } else { RecalculateAmount(aMkt, convCcy.Ccy); } return(this); }
public void ModifyTotalCcy(FXMarket mkt, AssetMarket aMkt, Currency ccy) { if (_TotalCcy != ccy) { _TotalCcy = ccy; _TotalAmount = 0; foreach (Institution instit in Institutions) { instit.ModifyTotalCcy(mkt, aMkt, ccy); _TotalAmount += instit.TotalAmount; } } }
public static FXMarket CreateMarket() { List <XChangeRate> xrList = new List <XChangeRate> { }; xrList.Add(new XChangeRate(1000, Currency.XBT, Currency.USD)); xrList.Add(new XChangeRate(0.01, Currency.USD, Currency.ETH)); xrList.Add(new XChangeRate(900, Currency.XBT, Currency.EUR)); xrList.Add(new XChangeRate(0.011, Currency.EUR, Currency.ETH)); FXMarket fxMkt = new FXMarket(date1, xrList); return(fxMkt); }
public void Update(FXMarket fxMarket) { CalculateTotal(fxMarket); foreach (AllocationElement element in Data) { element.Share = fxMarket.FXConvert(element.Price, CcyRef) / Total.Amount; } if (!Fees.IsNull) { Fees.Share = fxMarket.FXConvert(Fees.Price, CcyRef) / Total.Amount; } }
public void ModifyTotalCcy(FXMarket mkt, AssetMarket aMkt, Currency ccy) { if (_TotalCcy != ccy) { _TotalCcy = ccy; IMarket iMkt = mkt; if (!_Ccy.IsCcy()) { iMkt = aMkt; } _TotalAmount = _Amount * iMkt.GetQuote(_Ccy.CreateMarketInput(_TotalCcy)); } }
public IAccount TotalInstitution(FXMarket mkt, AssetMarket aMkt, Currency convCcy, string overrideName, double?lastAmount = null) { double total = 0; foreach (var item in Institutions) { total += item.TotalAccount(mkt, aMkt, Ccy).ConvertedAmount; } Account acc = new Account(overrideName, Ccy, total, true, lastAmount); acc.RecalculateAmount(mkt, convCcy); return(acc); }
public IAccount TotalAccount(FXMarket mkt, AssetMarket aMkt, Currency convCcy, string overrideAccountName, double?lastAmount) { double total = 0; foreach (var x in _Accounts) { total += x.GetTotalAccount(mkt, aMkt, Ccy).ConvertedAmount; } Account res = new Account(overrideAccountName, Ccy, total, isCalculatedAccount: true, lastAmount); res.RecalculateAmount(mkt, convCcy); return(res); }
public void ModifyCcy_CcyTest() { Account acc = Init.CreateAccountCurrency1(); double amount = acc.Amount; FXMarket fxMkt = Init.CreateFXMarket(); AssetMarket aMkt = Init.CreateAssetMarket(); acc.ModifyCcy(fxMkt, aMkt, "NOT USED", Init.Ccy2(), false); //last input not used for Accounts Assert.IsTrue( acc.Ccy.Ccy == Init.Ccy2() && acc.Amount == amount && acc.ConvertedAmount == amount * fxMkt.GetQuote(new CurrencyPair(Init.Ccy2(), Init.Ccy1())) ); }
private void AddAllocationToHistory(Allocation alloc, FXMarket fx) { Allocation newAlloc = (Allocation)alloc.Clone(); newAlloc.CancelFee(); newAlloc.Update(fx); if (History.ContainsKey(fx.Date)) { History[fx.Date] = newAlloc; } else { History.Add(fx.Date, newAlloc); } }
public void ModifyCcy(FXMarket mkt, AssetMarket aMkt, string accountName, ICcyAsset value, bool IsLastRow) { if (IsLastRow) { Ccy = value.Ccy; foreach (Account item in Accounts) { item.RecalculateConvertedAmount(Ccy, mkt, aMkt); } } else { Account acc = GetAccount(accountName); acc.ModifyCcy(mkt, aMkt, "", value, false); } }
public static FXMarket CreateMarket2(DateTime?date = null) { if (!date.HasValue) { date = date2; } List <XChangeRate> xrList = new List <XChangeRate> { }; xrList.Add(new XChangeRate(1050, Currency.XBT, Currency.USD)); xrList.Add(new XChangeRate(1 / (110.0), Currency.USD, Currency.ETH)); xrList.Add(new XChangeRate(960, Currency.XBT, Currency.EUR)); xrList.Add(new XChangeRate(0.0101, Currency.EUR, Currency.ETH)); FXMarket fxMkt = new FXMarket(date.Value, xrList); return(fxMkt); }
public void CalculateTotal(FXMarket fxMarket, Currency ccyInput = Currency.None) { if (ccyInput == Currency.None) { ccyInput = CcyRef; } Total = new Price(0, ccyInput); foreach (AllocationElement element in Data) { Total = fxMarket.SumPrices(Total, element.Price); if (Total == null) { throw new Exception($"Problem with Price Conversion: {element.Ccy} / {ccyInput}"); } } //Total = fxMarket.SumPrices(Total, Fees.Price); }
public void HistoricalAccountingData() { HistoricalAccountingData had = new HistoricalAccountingData(); had.SetCcyDB(GetCcyDB()); // Create AccData 1 FXMarket fx1 = Init.CreateFXMarket(); fx1.CcyRef = had.CcyDB.RefCcy; fx1.AddQuote(new CurrencyPair("GBP", "EUR"), 1.1); fx1.AddQuote(new CurrencyPair("GBP", "JPY"), 130); AssetMarket amkt1 = Init.CreateAssetMarket(); amkt1.AddQuote(new AssetCcyPair(new Asset("AAPL"), new Currency("USD")), 1234.56); amkt1.PopulateWithFXMarket(fx1); List <Category> list = new List <Category> { Init.CreateCategory1(), Init.CreateCategory2() }; AccountingData ad1 = new AccountingData(list, fx1, amkt1); had.AddData(new DateTime(2020, 1, 1), ad1); // Create AccData2 FXMarket fx2 = new FXMarket(); fx2.Copy(fx1); fx2.AddQuote(new CurrencyPair("EUR", "USD"), 1.2); fx2.AddQuote(new CurrencyPair("GBP", "EUR"), 1.15); AssetMarket amkt2 = new AssetMarket(); amkt2.Copy(amkt1); amkt2.AddQuote(new AssetCcyPair(new Asset("BNP"), new Currency("EUR")), 50.0); amkt2.PopulateWithFXMarket(fx2); AccountingData ad2 = new AccountingData(list, fx2, amkt2); had.AddData(new DateTime(2020, 2, 3), ad2); // Test string fileName = SerializeObject(had, "HistoricalAccountingData"); HistoricalAccountingData desHad = DeserializeObject <HistoricalAccountingData>(fileName); Assert.IsTrue(had == desHad); }
public void ModifyCcy_AssetTest() { Account acc = Init.CreateAccountAsset1(); double amount = acc.Amount; FXMarket fxMkt = Init.CreateFXMarket(); acc.ConvertedCcy = fxMkt.CcyRef; AssetMarket aMkt = Init.CreateAssetMarket(fxMkt); acc.ModifyTotalCcy(fxMkt, aMkt, fxMkt.CcyRef); acc.ModifyCcy(fxMkt, aMkt, "NOT USED", Init.Asset3(), false); //last input not used for Accounts bool testAmount = acc.ConvertedAmount == amount *aMkt.GetQuote(new AssetCcyPair(Init.Asset3(), fxMkt.CcyRef)); Assert.IsTrue( acc.Ccy.Asset == Init.Asset3() && acc.Amount == amount && testAmount ); }
public List <OpenOrder> GetOpenOrders(FXMarket fxmkt) { if (DateTime.UtcNow.Subtract(OpenOrdersLastUploadTime) < TimeSpan.FromSeconds(60)) { return(OpenOrdersList); } Dictionary <string, OrderInfo> openOrders = KrakenApi.GetOpenOrders(); List <OpenOrder> orders = new List <OpenOrder> { }; foreach (var item in openOrders) { orders.Add(new OpenOrder(item.Key, item.Value, fxmkt)); } OpenOrdersList = orders; OpenOrdersLastUploadTime = DateTime.UtcNow; this.PublishInfo($"Open Orders: Downloaded {OpenOrdersList.Count} open orders from Kraken."); return(orders); }
public OpenOrder(string refID, OrderInfo orderInfo, FXMarket fxmkt)//, Dictionary<string, PnLElement> pnlInfo) { ID = refID; OrderDescription orderDescr = orderInfo.Descr; string descrPair = orderDescr.Pair; var infos = orderDescr.Order.Split(' '); IsBuyOrder = orderDescr.Type == "buy"; Volume = Convert.ToDouble(infos[1]); int cryptoLen = descrPair.Length - 3; Currency ccy1 = CurrencyPorperties.FromNameToCurrency(descrPair.Substring(0, cryptoLen)); Currency ccy2 = CurrencyPorperties.FromNameToCurrency(descrPair.Substring(cryptoLen, 3)); CurrencyPair cp = new CurrencyPair(ccy1, ccy2); Rate = new XChangeRate((double)orderInfo.Descr.Price, cp); CurrentRate = fxmkt.GetQuote(cp); Return = Rate.Rate / CurrentRate.Rate - 1; PreviouslyExecutedVolume = 0.0; TotalPnL = 0; }
public AccountingData Copy() { List <Category> newData = new List <Category> { }; foreach (var cat in _Data) { Category copyCat = cat.Copy(); newData.Add(copyCat); } FXMarket fxmkt = new FXMarket(_CcyDB.RefCcy); fxmkt.Copy(_FXMarket); AssetMarket aMkt = new AssetMarket(); aMkt.Copy(_AssetMarket); aMkt.PopulateWithFXMarket(fxmkt); AccountingData res = new AccountingData(_CcyDB) { _Ccy = (Currency)_Ccy.Clone(), _TotalValue = _TotalValue, _Data = newData, _FXMarket = fxmkt, _AssetMarket = aMkt, _Map = null }; res.ReorgAccountingData(_Map); foreach (Category cat in newData) { cat.ModifyAmountEventHandler += res.UpdateTotalAmount; } return(res); }
private void AddTransaction(Transaction tx, DateTime nextTxDate, FXMarketHistory fxmh) { Allocation alloc = GetClosestAllocation(tx.Date, true); FXMarket FX = fxmh.GetArtificialFXMarket(tx.Date); alloc = alloc.AddTransaction(tx, FX); alloc.CalculateTotal(FX); if (History.ContainsKey(tx.Date)) { tx.Date = tx.Date.AddSeconds(1); } History.Add(tx.Date, alloc); // update the same allocation for the following days List <DateTime> datesList = fxmh.ArtificialFXMarkets .Keys .Where(x => x > tx.Date && x < nextTxDate) .Select(x => x).ToList(); foreach (DateTime date in datesList) { AddAllocationToHistory(alloc, fxmh.GetArtificialFXMarket(tx.Date)); } }
public void ModifyAmount(FXMarket mkt, AssetMarket aMkt, string v, object valueAmount) { throw new NotImplementedException(); }
public IEnumerable <string> GetAvailableCurrencies() { return(FXMarket.GetAvailableCurrencies()); }
public double GetTotalAmount(Currency ccy, FXMarket fxMkt) { return(TotalAmount * fxMkt.GetQuote(new CurrencyPair(_TotalCcy, ccy))); }
public IAccount TotalInstitution(FXMarket mkt, AssetMarket aMkt, Currency convCcy) { return(TotalInstitution(mkt, aMkt, convCcy, "Total")); }
public IAccount GetTotalAccount(FXMarket mkt, AssetMarket aMkt, ICcyAsset convCcy) { return(GetTotalAccount(mkt, aMkt, convCcy, null, null)); }
public IAccount TotalAccount(FXMarket mkt, AssetMarket aMkt, Currency convCcy) { return(TotalAccount(mkt, aMkt, convCcy, "Total", null)); }
public IAccount GetTotalAccount(FXMarket mkt, AssetMarket aMkt, ICcyAsset convCcy, string name, double?lastAmount) { return(TotalAccount(mkt, aMkt, convCcy.Ccy, name, lastAmount)); }