Exemplo n.º 1
0
        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()));
        }
Exemplo n.º 2
0
        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()))
                );
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
 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;
         }
     }
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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;
            }
        }
Exemplo n.º 8
0
 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));
     }
 }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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()))
                );
        }
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 13
0
 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);
     }
 }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
 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);
 }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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
                );
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        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;
        }
Exemplo n.º 20
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);
        }
Exemplo n.º 21
0
        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));
            }
        }
Exemplo n.º 22
0
 public void ModifyAmount(FXMarket mkt, AssetMarket aMkt, string v, object valueAmount)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 23
0
 public IEnumerable <string> GetAvailableCurrencies()
 {
     return(FXMarket.GetAvailableCurrencies());
 }
Exemplo n.º 24
0
 public double GetTotalAmount(Currency ccy, FXMarket fxMkt)
 {
     return(TotalAmount * fxMkt.GetQuote(new CurrencyPair(_TotalCcy, ccy)));
 }
Exemplo n.º 25
0
 public IAccount TotalInstitution(FXMarket mkt, AssetMarket aMkt, Currency convCcy)
 {
     return(TotalInstitution(mkt, aMkt, convCcy, "Total"));
 }
Exemplo n.º 26
0
 public IAccount GetTotalAccount(FXMarket mkt, AssetMarket aMkt, ICcyAsset convCcy)
 {
     return(GetTotalAccount(mkt, aMkt, convCcy, null, null));
 }
Exemplo n.º 27
0
 public IAccount TotalAccount(FXMarket mkt, AssetMarket aMkt, Currency convCcy)
 {
     return(TotalAccount(mkt, aMkt, convCcy, "Total", null));
 }
Exemplo n.º 28
0
 public IAccount GetTotalAccount(FXMarket mkt, AssetMarket aMkt, ICcyAsset convCcy, string name, double?lastAmount)
 {
     return(TotalAccount(mkt, aMkt, convCcy.Ccy, name, lastAmount));
 }