/// <summary> /// VAR0:=(2*CLOSE+HIGH+LOW)/4; /// B:=XMA((VAR0-LLV(LOW,30))/(HHV(HIGH,30)-LLV(LOW,30))*100,12); /// 主力做多资金:EMA(B,3),LINETHICK2,COLORWHITE; /// </summary> /// <param name="kline"></param> /// <param name="begin"></param> /// <param name="end"></param> /// <param name="param"></param> /// <returns></returns> public static TimeSeries <ITimeSeriesItem <double> > indicator_fund_main1(this KLine kline, int begin = 0, int end = 0, PropertyDescriptorCollection param = null) { TimeSeries <ITimeSeriesItem <double> > close = kline.Select <double>("CLOSE", begin, end); TimeSeries <ITimeSeriesItem <double> > open = kline.Select <double>("OPEN", begin, end); TimeSeries <ITimeSeriesItem <double> > high = kline.Select <double>("HIGH", begin, end); TimeSeries <ITimeSeriesItem <double> > low = kline.Select <double>("LOW", begin, end); TimeSeries <ITimeSeriesItem <double> > VAR0 = (close * 2.0 + open + low) / 4; TimeSeries <ITimeSeriesItem <double> > t1 = VAR0 - low.LLV(30); TimeSeries <ITimeSeriesItem <double> > t2 = high.HHV(30) - low.LLV(30); TimeSeries <ITimeSeriesItem <double> > t3 = (t1 / t2) * 100; TimeSeries <ITimeSeriesItem <double> > B = t3.XMA(12); TimeSeries <ITimeSeriesItem <double> > results = B.EMA(3); return(results); }
/// <summary> /// VAR0:=(2*CLOSE+HIGH+LOW)/4; /// B:=XMA((VAR0-LLV(LOW,30))/(HHV(HIGH,30)-LLV(LOW,30))*100,12); /// 主力做多资金:EMA(B,3),LINETHICK2,COLORWHITE; /// </summary> /// <param name="kline"></param> /// <param name="begin"></param> /// <param name="end"></param> /// <param name="param"></param> /// <returns></returns> public static TimeSeries <ITimeSeriesItem <List <double> > > executeIndicator(this KLine kline, int begin = 0, int end = 0, PropertyDescriptorCollection param = null) { TimeSeries <ITimeSeriesItem <double> > close = kline.Select <double>("CLOSE", begin, end); TimeSeries <ITimeSeriesItem <double> > open = kline.Select <double>("OPEN", begin, end); TimeSeries <ITimeSeriesItem <double> > high = kline.Select <double>("HIGH", begin, end); TimeSeries <ITimeSeriesItem <double> > low = kline.Select <double>("LOW", begin, end); TimeSeries <ITimeSeriesItem <double> > VAR0 = (close * 2.0 + high + low) / 4; TimeSeries <ITimeSeriesItem <double> > t1 = VAR0 - low.LLV(20); TimeSeries <ITimeSeriesItem <double> > t2 = high.HHV(20) - low.LLV(20); TimeSeries <ITimeSeriesItem <double> > t3 = (t1 / t2) * 100; //TimeSeries<ITimeSeriesItem<double>> B = t3.XMA(12); TimeSeries <ITimeSeriesItem <double> > B = t3.EMA(12); TimeSeries <ITimeSeriesItem <double> > mainforces = B.EMA(3); TimeSeries <ITimeSeriesItem <double> > retailInverstors = mainforces.EMA(30); TimeSeries <ITimeSeriesItem <List <double> > > results = new TimeSeries <ITimeSeriesItem <List <double> > >(); foreach (ITimeSeriesItem <double> mainforce in mainforces) { TimeSeriesItem <List <double> > r = new TimeSeriesItem <List <double> >(); r.Value = new List <double>(new double[2] { 0, 0 }); r.Date = mainforce.Date; r.Value[0] = mainforce.Value; ITimeSeriesItem <double> retailInverstor = retailInverstors[r.Date]; r.Value[1] = retailInverstor == null ? 0 : retailInverstor.Value; results.Add(r); } return(results); }
/// <summary> /// DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG); /// DEA:EMA(DIF, MID); /// MACD:(DIF-DEA)*2,COLORSTICK; /// 其中SHORT = 12,LONG = 26,MID = 9 /// </summary> /// <param name="kline"></param> /// <returns></returns> public static MACD Create(KLine kline) { if (kline == null) { return(null); } int p_short = 12, p_long = 26, p_mid = 9; TimeSeries <ITimeSeriesItem <double> > CLOSE = kline.Select <double>("close"); TimeSeries <ITimeSeriesItem <double> > DIF = CLOSE.EMA(p_short) - CLOSE.EMA(p_long); TimeSeries <ITimeSeriesItem <double> > DEA = DIF.EMA(p_mid); TimeSeries <ITimeSeriesItem <double> > MACD = (DIF - DEA) * 2; MACD macd = new MACD(kline.Code, kline.TimeUnit); double prevDif = 0, prevdea = 0; for (int i = 0; i < kline.Count; i++) { DateTime d = kline[i].Date; MACDItem item = new MACDItem(); item.Date = d; ITimeSeriesItem <double> difItem = DIF[d]; if (difItem == null) { continue; } item.DIF = difItem.Value; if (prevDif == 0) { prevDif = difItem.Value; } ITimeSeriesItem <double> deaItem = DEA[d]; if (deaItem == null) { continue; } item.DEA = deaItem.Value; if (prevdea == 0) { prevdea = deaItem.Value; } ITimeSeriesItem <double> macdItem = MACD[d]; if (macdItem == null) { continue; } item.MACD = macdItem.Value; if (prevDif < prevdea && difItem.Value > deaItem.Value) { item.CROSS = difItem.Value - deaItem.Value;//金叉点 } else if (prevDif > prevdea && difItem.Value < deaItem.Value) { item.CROSS = difItem.Value - deaItem.Value;//死叉点 } macd.Add(item); prevDif = difItem.Value; prevdea = deaItem.Value; } return(macd); }
/// <summary> /// 买线:EMA(CLOSE,3),COLORRED,LINETHICK1; /// 卖线:EMA(SLOPE(CLOSE,21)*20+CLOSE,42),COLORBLUE,LINETHICK2; /// </summary> /// <param name="kline"></param> /// <returns></returns> public static TradingLine indicator_trading_stereo1(this KLine kline, int begin = 0, int end = 0) { TimeSeries <ITimeSeriesItem <double> > close = kline.Select <double>("close", begin, end); TimeSeries <ITimeSeriesItem <double> > buyLine = close.EMA(3); TimeSeries <ITimeSeriesItem <double> > sellLine = (close.SLOPE(21) * 20 + close).EMA(42); TimeSeries <ITimeSeriesItem <char> > buysellPoints = new TimeSeries <ITimeSeriesItem <char> >(); int buy_gt_sell = 1, sell_gt_buy = 2; //买大于卖为1,卖大于买为2 int state = 0; //前一个状态 for (int i = 0; i < buyLine.Count; i++) { ITimeSeriesItem <double> buyItem = buyLine[i]; ITimeSeriesItem <double> sellItem = sellLine[buyItem.Date]; if (sellItem == null) { continue; } double t = buyItem.Value - sellItem.Value; if (t == 0) { continue; } if (state == 0) { state = t > 0 ? buy_gt_sell : sell_gt_buy; continue; } int cs = t > 0 ? buy_gt_sell : sell_gt_buy; if (cs == state) { continue; } if (state == buy_gt_sell) { TimeSeriesItem <char> v = new TimeSeriesItem <char>() { Date = buyItem.Date, Value = 'S' }; buysellPoints.Add(v); } else if (state == sell_gt_buy) { TimeSeriesItem <char> v = new TimeSeriesItem <char>() { Date = buyItem.Date, Value = 'B' }; buysellPoints.Add(v); } state = cs; } return(new TradingLine() { buyLine = buyLine, sellLine = sellLine, buysellPoints = buysellPoints }); }
/// <summary> /// VAR0:=(2*CLOSE+HIGH+LOW)/4; ///B:=XMA((VAR0-LLV(LOW,30))/(HHV(HIGH,30)-LLV(LOW,30))*100,12); ///主力做多资金:EMA(B,3),LINETHICK2,COLORWHITE; ///个股做空资金:EMA(主力做多资金,30),COLORD9D919,LINETHICK2; /// </summary> /// <param name="kline"></param> /// <param name="begin"></param> /// <param name="end"></param> /// <param name="param"></param> /// <returns></returns> public static TimeSeries <ITimeSeriesItem <double> > indicator_fund_ratailinvestor1(this KLine kline, int begin = 0, int end = 0, PropertyDescriptorCollection param = null) { TimeSeries <ITimeSeriesItem <double> > t1 = kline.indicator_fund_main1(begin, end, param); return(t1.EMA(30)); }