def _join_contracts_std_ago(contract, startdate, enddate, whichtime_ago,freq,whitch_std): """ 功能:得到当前合约相当MA()均线的位置 1,获得单一合约历史数据 2,计算ma数值 3,计算相对均线的位置 4,which_timeago 要获得过去哪个时间的Ma,位置情况格式"%Y-%m-%d %H:%M:%S" 注意:endday-startday周期数应满足计算ma的数量,不然ma不对 :param contracts: 合约简写 :param startdate: 计算开始日期 :param endday: 计算结束日期 :param freq: 计算周期 :param whitch_std 多少周期的均线值 :return: 'NU'--无数据、‘ON’--线上、‘BLOW’--线下 """ hsdata = get_price(rs_const.AllCONTRACTS_MAIN[contract], start_date=startdate, end_date=enddate, frequency=freq, skip_paused=True) if len(hsdata)<=0: print("%s--该合约无数据!exit--\n"%rs_const.AllCONTRACTS_MAIN[contract]) return rs_const.C_POSITON_MA_STATUS['_NONE_MA'] #hsdata=hsdata[:whichtime_ago]#默认get_price()会填充当日全部数据,清除未来数据 hsdata=hsdata[:rs_date.get_now()]#默认get_price()会填充当日全部数据,清除未来数据 if 'HC'==contract: print(hsdata[:-20]) malast=rs_indictor.ma(hsdata,whitch_std)#计算std中间线均线值 pdc = pd.DataFrame([], index=[], columns={'ma'}) for i in range(-60, 0, 1): if hsdata['close'][i]>malast[i]: STATUS=rs_const.C_POSITON_MA_STATUS['_ON_MA'] else: STATUS = rs_const.C_POSITON_MA_STATUS['_BLOW_MA'] pds = pd.DataFrame([STATUS], index=[hsdata.index[i]], columns={'ma'}) pdc=pdc.append(pds) return pdc
def _watch_contracts_cross_ma(contract, startdate, endday, freq): """ 1,获得各合约历史数据 2,计算穿越周期线的合约 :param contracts: 合约简写 :param startdate: 计算开始日期 :param endday: 计算结束日期 :param freq: 计算周期 :return: 'NU'--无数据、‘ON’--线上、‘BLOW’--线下 """ hsdata = get_price(rs_const.AllCONTRACTS_MAIN[contract], start_date=startdate, end_date=endday, frequency=freq, skip_paused=True) if len(hsdata) <= 2: print("%s--该合约数据不足!exit--\n" % rs_const.AllCONTRACTS_MAIN[contract]) return 'NU' malast = indi.ma(hsdata[:-1], 50) print(hsdata[-10:]) print('%s---%s---%s\n' % (hsdata['close'][-2], malast[-1], hsdata['close'][-1])) if (hsdata['close'][-1] > malast[-1] and hsdata['close'][-2] < malast[-1]): return rs_const.CROSS_STATUS['CROSSING_ON'] elif (hsdata['close'][-1] < malast[-1] and hsdata['close'][-2] > malast[-1]): return rs_const.CROSS_STATUS['CROSSING_BLOW'] else: return rs_const.CROSS_STATUS['CROSSING_NONE']
def _join_contracts_cross_ma_close(contract, startdate, enddate, freq,whitch_ma): """ 功能:得到当前合约相当MA()均线的位置,盘中实时 1,获得单一合约历史数据 2,计算ma数值 3,计算相对均线的位置 注意:endday-startday周期数应满足计算ma的数量,不然ma不对 :param contracts: 合约简写 :param startdate: 计算开始日期 :param endday: 计算结束日期 :param freq: 计算周期 :param whitch_ma 多少周期的均线值 :return: 'NU'--无数据、‘ON’--线上、‘BLOW’--线下 """ hsdata = get_price(rs_const.AllCONTRACTS_MAIN[contract], start_date=startdate, end_date=enddate, frequency=freq, skip_paused=True) if len(hsdata)<=0: print("%s--该合约无数据!exit--\n"%rs_const.AllCONTRACTS_MAIN[contract]) return rs_const.C_POSITON_MA_STATUS['_NONE_MA'] print(hsdata.tail(20)) hsdata=hsdata[:rs_date.get_now()]#默认get_price()会填充当日全部数据,清除未来数据 print(hsdata.tail(10)) malast=rs_indictor.ma(hsdata,whitch_ma)#计算均线值 if hsdata['close'][-1]>malast[-1]: pds = pd.DataFrame({rs_const.C_POSITON_MA_STATUS['_ON_MA']}, index=[hsdata.index[-1]], columns={'ma'}) return pds else: pds = pd.DataFrame({rs_const.C_POSITON_MA_STATUS['_BLOW_MA']}, index=[hsdata.index[-1]], columns={'ma'}) return pds
def _join_contracts_cross_ma(contracts, startdate, endday, freq): """ 1,获得各合约历史数据 2,计算穿越周期线的合约 :param contracts: 合约简写 :param startdate: 计算开始日期 :param endday: 计算结束日期 :param freq: 计算周期 :return: 'NU'--无数据、‘ON’--线上、‘BLOW’--线下 """ hsdata = get_price(rs_const.AllCONTRACTS_MAIN[contracts], start_date=startdate, end_date=endday, frequency=freq, skip_paused=True) if len(hsdata) <= 0: print("%s--该合约无数据!exit--\n" % rs_const.AllCONTRACTS_MAIN[contracts]) return 'NU' malast = indi.ma(hsdata, 50) print('malast=%s' % malast[-1]) if hsdata['close'][-1] > malast[-1]: return 'ON' else: return 'BLOW'