public bool AddStock(IStockData sd) { if (sd == null) { return(false); } prevStock_ = currentStock_; currentStock_ = sd; if ((prevStock_ == null) || (currentStock_ == null)) { return(false); } double typicalPrice = CalcTypicalPrice(currentStock_); bool isUp = StockJudger.IsRise(currentStock_, prevStock_); AddTodayPrice(typicalPrice * currentStock_.Amount, isUp); // 直接保存Money Flow, 即Typical Price * Volume if (PriceUpDowns_.Count < MFICALCDAYS) { return(false); } CalculateMFI(); return(true); }
public bool AddStock(IStockData sd) { if (sd == null) { return(false); } prevStock_ = currentStock_; currentStock_ = sd; if ((prevStock_ == null) || (currentStock_ == null)) { return(false); } AddTodayPrice(sd.EndPrice, StockJudger.IsRise(sd, prevStock_)); if (Prices_.Count < RSICALCDAYS) { return(false); } double rsi = CalculateRSI(); AnalyseOperation(rsi); return(true); }
public override ICollection <StockOper> GetOper(DateTime day, IAccount account) { IStockData curProp = stockHistory.GetStock(day); IStockData stockYesterdayProp = stockHistory.GetPrevDayStock(day); DateTime prevDate = stockHistory.GetPreviousDay(day); IStockData stockprevProp = stockHistory.GetPrevDayStock(prevDate); DateTime prevNextDate = stockHistory.GetPreviousDay(prevDate); if (!CheckStock(curProp, day) || !CheckStock(stockYesterdayProp, prevDate) || !CheckStock(stockprevProp, prevNextDate)) { return(null); } ICollection <StockOper> opers = new List <StockOper>(); // IsRise? Condition questionable. if ( StockJudger.IsRise(stockYesterdayProp, stockprevProp) && StockJudger.IsUp(stockYesterdayProp) && StockJudger.IsUp(stockprevProp)) { if (stockHolder.HasStock()) { StockOper oper = new StockOper(curProp.StartPrice, stockHolder.StockCount(), OperType.Sell); opers.Add(oper); return(opers); } } else if ( !StockJudger.IsRise(stockYesterdayProp, stockprevProp) && !StockJudger.IsUp(stockYesterdayProp) && !StockJudger.IsUp(stockprevProp)) { int stockCount = Transaction.GetCanBuyStockCount(account.BankRoll, curProp.StartPrice); if (stockCount > 0) { StockOper oper = new StockOper(curProp.StartPrice, stockCount, OperType.Buy); opers.Add(oper); return(opers); } } return(null); }
// 依时间次序的连续三天,判断是否满足相反的条件 // Day1最前,Day2晚一些. public bool ReverseFulFil(IStockData day1, IStockData day2, IStockData day3) { // 连续三天下跌条件 return(!StockJudger.IsRise(day3, day2) && !StockJudger.IsRise(day2, day1)); }
// 依时间次序的连续三天,判断是否满足条件 // Day1最前,Day2晚一些. public bool FulFil(IStockData day1, IStockData day2, IStockData day3) { // 连续三天上涨条件 return(StockJudger.IsRise(day3, day2) && StockJudger.IsRise(day2, day1)); }