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