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);
        }
Ejemplo n.º 3
0
        public async Task <Guid> AddTradeSet(TradeSet tradeSet)
        {
            State.TradeSets[tradeSet.TrackingId] = tradeSet;
            await WriteStateAsync();

            return(tradeSet.TrackingId);
        }
Ejemplo n.º 4
0
        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);
     }
 }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        public Task <Guid> AddTradeSet(string tradesetName, params ItemRecipe[] itemRecipes)
        {
            var tradeSet = new TradeSet(tradesetName, itemRecipes);

            return(AddTradeSet(tradeSet));
        }