public PerformanceResult GetPerformanceResult(TradeSet set = TradeSet.All) { List <Trade> tradesList = new List <Trade>(); //get the trades from all test sets foreach (TestSet testSet in testSets) { //can split these into trades from train and test set if TradeSet parameter is passed if (set == TradeSet.All) { tradesList.AddRange(testSet.Trades); } else if (set == TradeSet.Test) { tradesList.AddRange(testSet.Trades.Where(x => x.OpenTime > EndTrainDate)); } else if (set == TradeSet.Train) { tradesList.AddRange(testSet.Trades.Where(x => x.CloseTime <= EndTrainDate)); } } Trade[] trades = tradesList.ToArray(); PerformanceResult pr = new PerformanceResult(); pr.Description = Description + " " + set.ToString(); pr.TradeCount = trades.Count(); pr.TotalProfit = trades.Sum(x => x.Profit); pr.SpreadCost = trades.Sum(x => x.SpreadCost); pr.WinPercent = PerformanceResult.CalculateWinPercent(trades); pr.ProfitFactor = PerformanceResult.CalculateProfitFactor(trades); return(pr); }
public Trade[] GetTradeSet(string description, TradeSet set = TradeSet.All) { TestSet testSet = testSets.Where(x => x.Description == description).FirstOrDefault(); if (testSet == null) { return(null); } //can split these into trades from train and test set if TradeSet parameter is passed if (set == TradeSet.All) { return(testSet.Trades); } else if (set == TradeSet.Test) { return(testSet.Trades.Where(x => x.OpenTime > EndTrainDate).ToArray()); } else if (set == TradeSet.Train) { return(testSet.Trades.Where(x => x.CloseTime <= EndTrainDate).ToArray()); } return(null); }
public async Task <Guid> AddTradeSet(TradeSet tradeSet) { State.TradeSets[tradeSet.TrackingId] = tradeSet; await WriteStateAsync(); return(tradeSet.TrackingId); }
public Transaction CreateTransaction(TradeOrder order, TradeSet ts, Entity.Indicator ind) { Share s = new ShareBLL(_unit).GetByID(order.ShareId); Transaction tr = new Transaction { Direction = order.Direction, Message = string.Format("{0} {1} * {2} @ ${3}", order.Direction, s.Symbol, order.Size, order.OrderPrice), ModifiedBy = order.UpdatedBy, ModifiedDate = DateTime.Now, Price = order.OrderPrice, Size = order.Size, Fee = order.Fee, TradingDate = ind.TradingDate, TradeOrderId = order.Id //, //TradeSetID = ts.Id }; this.Create(tr); return(tr); }
public void ToCsv(string filename, TradeSet set = TradeSet.All) { Trade[] trades = Trades; if (set == TradeSet.Test) { trades = Trades.Where(x => x.CloseTime > EndTrainDate).ToArray(); } else if (set == TradeSet.Train) { trades = Trades.Where(x => x.CloseTime <= EndTrainDate).ToArray(); } List <string> tradeStrings = new List <string>(); tradeStrings.Add(Trade.GetCsvHeaders(TradeDataLabels)); foreach (Trade trade in trades) { tradeStrings.Add(trade.ToString()); } File.WriteAllLines(filename, tradeStrings); }
/// <summary> /// 修改交易设置信息 /// </summary> /// <param name="loginID">登陆标识</param> /// <param name="tradingSettingInfo">修改后的交易设置信息</param> /// <returns>ErrType</returns> public ErrType ModifyTradeSet(string loginID, TradeConfigInfo tradingSettingInfo) { try { TradeSet tradeSet = new TradeSet(); tradeSet.ObjName = tradingSettingInfo.ObjName; tradeSet.ObjCode = tradingSettingInfo.ObjCode; tradeSet.ObjValue = tradingSettingInfo.ObjValue; tradeSet.Remark = tradingSettingInfo.Remark; ResultDesc result = ManagerService.ModifyTradeSet(tradeSet, loginID); return result.Result ? GeneralErr.Success : new ErrType(ERR.SERVICE, result.Desc); } catch (TimeoutException te) { FileLog.WriteLog("", Assembly.GetExecutingAssembly().GetName().Name, this.GetType().Name, new StackTrace().GetFrame(0).GetMethod().Name, te.Message); return new ErrType(ERR.EXEPTION, ErrorText.TimeoutException); } catch (Exception ex) { FileLog.WriteLog("", Assembly.GetExecutingAssembly().GetName().Name, this.GetType().Name, new StackTrace().GetFrame(0).GetMethod().Name, ex.Message); return new ErrType(ERR.EXEPTION, ErrorText.OperationError); } }
/// <summary> /// Creates the trade position. /// </summary> /// <param name="order">The order.</param> /// <param name="ts">The ts.</param> /// <returns>is position closed </returns> public TradePosition CreateTradePosition(Transaction trans, TradeOrder order, TradeSet ts, Entity.Indicator ind, out bool isReverse) { TradePosition tp = null; TradeOrderBLL toBll = new TradeOrderBLL(_unit); //TradeOrder order = toBll.GetByID(trans.TradeOrderId); isReverse = false; tp = _unit.DataContext.TradePosition.Where(p => p.AccountId == order.AccountId && p.ShareId == order.ShareId).SingleOrDefault(); if (tp == null) { tp = new TradePosition { ShareId = order.ShareId, AccountId = order.AccountId, Size = trans.Size * order.Flag, EntryPrice = (trans.Size * trans.Price + trans.Fee * trans.Flag) / trans.Size, UpdateDT = DateTime.Now, CurrentPrice = ind.Close.Value, CurrentTradingDate = ind.TradingDate, }; this.Create(tp); } else { // update the position size if (toBll.IsReverse(order, tp)) { isReverse = true; tp.Size += order.Size * order.Flag; if (tp.Size != 0) { tp.EntryPrice = tp.EntryCost / Math.Abs(tp.Size); } tp.UpdateDT = DateTime.Now; tp.CurrentPrice = ind.Close.Value; tp.CurrentTradingDate = ind.TradingDate; this.Update(tp); } else { tp.Size += order.Size * order.Flag; if (tp.Size != 0) { tp.EntryPrice = tp.EntryCost / Math.Abs(tp.Size); } tp.UpdateDT = DateTime.Now; tp.CurrentPrice = ind.Close.Value; tp.CurrentTradingDate = ind.TradingDate; this.Update(tp); } } return(tp); }
public Task <Guid> AddTradeSet(string tradesetName, params ItemRecipe[] itemRecipes) { var tradeSet = new TradeSet(tradesetName, itemRecipes); return(AddTradeSet(tradeSet)); }