Ejemplo n.º 1
0
 public void AllocationTableUpdate()
 {
     if (dataGridViewAllocation.InvokeRequired)
     {
         DelegateTables d = new DelegateTables(AllocationTableUpdate);
         this.Invoke(d, new object[] { });
     }
     else
     {
         var    data     = TSP.GetLastAllocationToTable(LiveTxHistory: true);
         double position = data["Total"].Position;
         dataGridViewAllocation.Rows.Clear();
         foreach (var key in data.Keys)
         {
             PnLElement item = data[key];
             Currency   ccy  = CurrencyPorperties.FromNameToCurrency(key);
             if (ccy.IsNone())
             {
                 ccy = Fiat;
             }
             dataGridViewAllocation.Rows.
             Add(key,
                 item.Presentation_Position(ccy),
                 item.Presentation_XChangeRate(ccy),
                 item.Presentation_AverageCost(ccy),
                 item.Weight.HasValue ? PercentageToString(item.Weight.Value) : "0",
                 Math.Round(item.OnGoingPnL, 2),
                 Math.Round(item.Fees, 2),
                 Math.Round(item.RealizedPnL, 2));
         }
         TSP.GetOnGoingPnLs();
     }
 }
Ejemplo n.º 2
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;
        }
Ejemplo n.º 3
0
 public void GetCheckedCurrencyPairs()
 {
     if (comboBoxFiat.InvokeRequired)
     {
         DelegateTables d = new DelegateTables(GetCheckedCurrencyPairs);
         this.Invoke(d, new object[] { });
     }
     else
     {
         TimeSeriesKeyList = new List <ITimeSeriesKey>();
         foreach (string item in checkedListBox1.CheckedItems)
         {
             Currency ccy = CurrencyPorperties.FromNameToCurrency(item);
             if (!ccy.IsNone())
             {
                 TimeSeriesKeyList.Add(new CurrencyPairTimeSeries(new CurrencyPair(ccy, Fiat), Frequency));
             }
             else if (item == "MyStrategy")
             {
                 TimeSeriesKeyList.Add(new AllocationSrategy(item, Fiat, Frequency));
             }
         }
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Convert the raw Ledger data from Kraken to CryptoSolution objects
        /// </summary>
        /// <returns></returns>
        public SortedList <DateTime, Transaction> GetTransactionList()
        {
            SortedList <DateTime, Transaction> res = new SortedList <DateTime, Transaction>();
            var items      = Ledger.Select(x => x.Value).GroupBy(x => x.Refid).ToDictionary(g => g.Key, g => g.ToList());
            var sortedKeys = items.Values.Select(x => new Tuple <double, string>(x.First().Time, x.First().Refid))
                             .OrderBy(x => x.Item1);

            foreach (var key in sortedKeys)
            {
                DateTime dt = StaticLibrary.UnixTimeStampToDateTime(key.Item1);
                if (dt < res.LastOrDefault().Key.AddSeconds(1))
                {
                    dt = res.Last().Key.AddSeconds(1);
                }
                var             item  = items[key.Item2];
                TransactionType ttype = TransactionTypeProperties.ReadTransactionType(item[0].Type);
                switch (ttype)
                {
                case TransactionType.Deposit:
                    if (item.Count > 1)
                    {
                        throw new Exception("One Transaction Only for Deposit");
                    }
                    Currency    ccyDp  = CurrencyPorperties.FromNameToCurrency(item[0].Asset);
                    Transaction txDepo = new Transaction(
                        item[0].Refid,
                        TransactionType.Deposit,
                        dt,
                        new Price(0, Currency.None),
                        new Price((double)item[0].Amount, ccyDp));
                    res.Add(dt, txDepo);
                    break;

                case TransactionType.WithDrawal:
                    if (item.Count > 1)
                    {
                        throw new Exception("One Transaction Only for Withdrawal");
                    }
                    Currency    ccyWd = CurrencyPorperties.FromNameToCurrency(item[0].Asset);
                    Transaction txWd  = new Transaction(
                        item[0].Refid,
                        TransactionType.WithDrawal,
                        dt,
                        new Price((double)-item[0].Amount, ccyWd),
                        new Price(0, Currency.None),
                        new Price((double)item[0].Fee, ccyWd));
                    res.Add(dt, txWd);
                    break;

                case TransactionType.Transfer:
                    if (item.Count > 1)
                    {
                        throw new Exception("One Transaction Only for Transfer");
                    }
                    Currency ccyTransfer = CurrencyPorperties.FromNameToCurrency(item[0].Asset);
                    if (!ccyTransfer.IsNone())
                    {
                        res.Add(dt, new Transaction(
                                    item[0].Refid,
                                    TransactionType.Transfer,
                                    dt,
                                    new Price(0, Currency.None),
                                    new Price((double)item[0].Amount,
                                              ccyTransfer)));
                    }
                    break;

                case TransactionType.Trade:
                    if (item.Count < 2)
                    {
                        break;
                    }
                    var itemPay = item.Where(x => x.Amount < 0).ToList();
                    if (itemPay.Count != 1)
                    {
                        throw new Exception("Temp Condition");
                    }
                    var itemRec = item.Where(x => x.Amount > 0).ToList();
                    if (itemRec.Count != 1)
                    {
                        throw new Exception("Temp Condition");
                    }

                    //if (item.Amount < 0)
                    //{
                    Currency ccyTradeM = CurrencyPorperties.FromNameToCurrency(itemPay[0].Asset);
                    Price    paid      = new Price(-(double)itemPay[0].Amount, ccyTradeM);
                    Price    fees      = new Price((double)itemPay[0].Fee, ccyTradeM);
                    //i++;
                    //LedgerInfo nextItem = items[i];
                    Price received = new Price(itemRec[0].Amount, itemRec[0].Asset);
                    res.Add(dt, new Transaction(
                                item[0].Refid,
                                TransactionType.Trade,
                                dt,
                                paid,
                                received,
                                fees));
                    //}
                    //else
                    //{
                    //    Price received = new Price(item.Amount, item.Asset);
                    //    i++;
                    //    LedgerInfo nextItem = items[i];
                    //    Currency ccyTradeP = CurrencyPorperties.FromNameToCurrency(nextItem.Asset);
                    //    Price paid = new Price(-(double)nextItem.Amount, ccyTradeP);
                    //    Price fees;
                    //    if (ccyTradeP.IsFiat())
                    //        fees = new Price((double)nextItem.Fee, ccyTradeP);
                    //    else
                    //    {
                    //        Currency ccyFees = CurrencyPorperties.FromNameToCurrency(item.Asset);
                    //        fees = new Price((double)item.Fee, ccyFees);
                    //    }

                    //    res.Add(dt, new Transaction(
                    //        item.Refid,
                    //        TransactionType.Trade,
                    //        dt,
                    //        paid,
                    //        received,
                    //        fees));
                    //}
                    break;
                }
            }
            return(res);
        }
Ejemplo n.º 5
0
        public void PnLTableUpdate()
        {
            if (dataGridViewPnL.InvokeRequired)
            {
                DelegateTables d = new DelegateTables(PnLTableUpdate);
                this.Invoke(d, new object[] { });
            }
            else
            {
                // start date
                DateTime dateStart = PnLExplainStartDateSelector.Date.GetRoundDate(TenorUnit.Day);
                var      dataStart = TSP.GetAllocationToTable(dateStart);
                // end date
                DateTime dateEnd = PnLExaplainEndDateSelector.Date.GetRoundDate(TenorUnit.Day);
                Dictionary <string, PnLElement> dataEnd;
                if (dateEnd == TSP.FXMH.LastRealDate_NoLive.Date)
                {
                    dataEnd = TSP.GetLastAllocationToTable();
                }
                else
                {
                    dataEnd = TSP.GetAllocationToTable(dateEnd);
                }

                // Total Statistics
                double value1 = dataStart["Total"].Position - (dataStart["Total"].Deposit - dataStart["Total"].Withdrawal);
                double value2 = dataEnd["Total"].Position - (dataEnd["Total"].Deposit - dataEnd["Total"].Withdrawal);
                double AbsoluteValueChange = value2 - value1;
                double RelativeChange      = AbsoluteValueChange / dataStart["Total"].Position;

                // fill rows
                dataGridViewPnL.Rows.Clear();
                foreach (var key in dataStart.Keys)
                {
                    PnLElement item  = dataStart[key];
                    PnLElement item2 = dataEnd[key];
                    Currency   ccy   = CurrencyPorperties.FromNameToCurrency(key);
                    if (ccy.IsNone())
                    {
                        ccy = Fiat;
                    }
                    double depositNetTotal   = Math.Round((item2.Deposit - item.Deposit) - (item2.Withdrawal - item.Withdrawal), 2);
                    double realizedPnLChange = item2.RealizedPnL - item.RealizedPnL;
                    double onGoingPnLChange  = item2.OnGoingPnL - item.OnGoingPnL + realizedPnLChange;
                    if (key != "Total")
                    {
                        dataGridViewPnL.Rows.
                        Add(key,                                                                // Ccy
                            item.Presentation_Position(ccy),                                    // Position
                            item.Presentation_XChangeRate(ccy),                                 // Rate
                            PercentageToString(item.Weight),                                    // Weight
                            PercentageToString(item2.Position / item.Position - 1),             // Delta Pos.
                            PercentageToString(item2.xChangeRate / item.xChangeRate - 1),       // Delta Rate
                            Math.Round(onGoingPnLChange, 2),                                    // Delta On Going PnL
                            Math.Round(realizedPnLChange, 2),                                   // Delta Realizes PnL
                            depositNetTotal);                                                   // Deposit Net Total
                    }
                    else
                    {
                        dataGridViewPnL.Rows.
                        Add(key,                                                                // Ccy
                            item.Presentation_Position(ccy),                                    // Total
                            0,                                                                  // 0
                            PercentageToString(item.Weight),                                    // Weight (100%)
                            Math.Round(AbsoluteValueChange, 2),                                 // Delta Pos. (Total Absolute Change)
                            PercentageToString(RelativeChange),                                 // Delta Rate (Total Relative Change)
                            Math.Round(onGoingPnLChange, 2),                                    // Delta On Going PnL
                            Math.Round(realizedPnLChange, 2),                                   // Delta Realized PnL
                            depositNetTotal);                                                   // Deposit Net Total
                    }
                }
            }
        }