Exemple #1
0
def price_section(df, period: str):
    """
    获取某个周期的boll上下轨的值 以及 收敛情况
    :param df: 包含boll数据 的DateFrame
    :param period: 自定义周期
    :return:  返回boll上下轨的值 及 收敛情况
    """
    last_df = df.iloc[-1, :]
    boll_up = last_df['boll_up']
    boll_low = last_df['boll_low']

    boll_sd_df = df['boll_SD']
    sd_mean = boll_sd_df[-10:].mean()
    # print(sd_mean)
    boll_sd = '正常'
    if boll_sd_df.iloc[-1] > sd_mean:
        boll_sd = '发散'
    if boll_sd_df.iloc[-1] < sd_mean:
        boll_sd = '收敛'
    return {
        f'{period}_boll_up': get_float(boll_up),
        f'{period}_boll_low': get_float(boll_low),
        f'{period}_boll_sd': boll_sd,
        f'{period}_close': get_float(last_df['close']),
        f'{period}_high': get_float(last_df['high']),
        f'{period}_low': get_float(last_df['low']),
    }
Exemple #2
0
def trade_day(stock_code, asset='E'):
    start_day = datetime.datetime.strptime(str(
        datetime.date.today()), '%Y-%m-%d') + datetime.timedelta(days=-200)
    start_date = start_day.date().strftime('%Y%m%d')
    day_df = ts.pro_bar(ts_code=stock_code,
                        start_date=start_date,
                        asset=asset,
                        freq='D',
                        adj='qfq')
    day_df.sort_values(by='trade_date', inplace=True)
    my_BOLL(day_df)
    my_MA(day_df)
    my_MA(day_df, item='vol', timeperiod=(10, ))
    my_swing(day_df)
    my_MACD(day_df)
    my_KDJ(day_df)
    # day_df.to_csv('kdj.csv')
    price_res = price_section(day_df, period='day')
    trend_res = trend(day_df)
    probab_res = probability(day_df)
    deviation_res = deviation(day_df)

    res_day = dict(**price_res, **probab_res, **trend_res, **deviation_res)
    advice = give_advice(res_day)
    # trend_res.get('ma_trend')
    # trend_res.get('trend_go_on')
    section = ''
    if '买入' in advice:
        section_low = get_float(float(price_res.get('day_boll_low')) * 0.98)
        section_up = get_float(float(price_res.get('day_boll_low')) * 1.02)
        section += f'交易区间:({section_low},{section_up})'
    elif '卖出' in advice:
        section_low = get_float(float(price_res.get('day_boll_up')) * 0.98)
        section_up = get_float(float(price_res.get('day_boll_up')) * 1.02)
        section += f'交易区间:({section_low},{section_up})'
    else:
        pass

    html_day = f"""
    <div>
    <div style="color: magenta;height: 10px"><b>日参考:</b></div>
    <ul>
        <li>趋势:<b style="color: blue">{' ++ '.join(trend_res.values())}</b></li>
        <li>背离:<b style="color: red">{' ++ '.join(deviation_res.values())}</b></li>
        <li>KDJ:【{probab_res.get('buy_sell')}】 快值K:{probab_res.get('value').get('kdj_k')}  慢值D:{probab_res.get('value').get('kdj_D')}</li>
        <li>BOLL:<b>{price_res.get('day_boll_sd')}</b> 区间:【{price_res.get('day_boll_low')},{price_res.get('day_boll_up')}】</li>
        <li>交易参考:<b style="color: blue">{advice}</b> {section}</li>
    </ul>
</div>
    """
    # return report_body
    return html_day
    def fromMillimeters(self, value):
        """Scale a value from an equivalent distance in millimeters.

fromMillimeters(value)
        """
        _v = util.get_float(value)
        if self.__unit == Unit.MILLIMETERS:
            _sv = _v
        elif self.__unit == Unit.MICROMETERS:
            _sv = _v * 1e3
        elif self.__unit == Unit.METERS:
            _sv = _v * 1e-3
        elif self.__unit == Unit.KILOMETERS:
            _sv = _v * 1e-6
        elif self.__unit == Unit.INCHES:
            _sv = _v / 25.4
        elif self.__unit == Unit.FEET:
            _sv = _v / 304.8
        elif self.__unit == Unit.YARDS:
            _sv = _v / 914.4
        elif self.__unit == Unit.MILES:
            _sv = _v / 1609344.4
        else:
            raise ValueError, "Undefined unit value! " + str(self.__unit)
        return _sv
    def fromMillimeters(self, value):
        """Scale a value from an equivalent distance in millimeters.

fromMillimeters(value)
        """
        _v = util.get_float(value)
        if self.__unit == Unit.MILLIMETERS:
            _sv = _v
        elif self.__unit == Unit.MICROMETERS:
            _sv = _v * 1e3
        elif self.__unit == Unit.METERS:
            _sv = _v * 1e-3
        elif self.__unit == Unit.KILOMETERS:
            _sv = _v * 1e-6
        elif self.__unit == Unit.INCHES:
            _sv = _v / 25.4
        elif self.__unit == Unit.FEET:
            _sv = _v / 304.8
        elif self.__unit == Unit.YARDS:
            _sv = _v / 914.4
        elif self.__unit == Unit.MILES:
            _sv = _v / 1609344.4
        else:
            raise ValueError, "Undefined unit value! " + str(self.__unit)
        return _sv
Exemple #5
0
def probability(df):
    # 1. kdj指标 K、D的值与20 80 比较 给出超买 超卖结论
    last_kdj = df.iloc[-1, :]
    k_value = last_kdj['kdj_K']
    d_value = last_kdj['kdj_D']
    buy_sell = '合理'
    if d_value > 80 or k_value > 80:
        buy_sell = '超买'
    if d_value < 20 or k_value < 20:
        buy_sell = '超卖'
    res = {
        'buy_sell': buy_sell,
        'value': {
            'kdj_k': get_float(k_value, 2),
            'kdj_D': get_float(d_value, 2)
        }
    }
    return res
Exemple #6
0
def get_market():
    #util.clean_market(0)
    url = 'http://pregao-online.bmfbovespa.com.br/Cotacoes.aspx'
    soup = BeautifulSoup(urlfetch.fetch(url, deadline=50).content, 'lxml')
    rate = util.get_exchange()
    #dt = get_datetime()
    dt = datetime.datetime.now(tz.tzstr('EBST3EBDT'))

    market = Market(ref=0, date=dt.date(), time=dt.time(), exchange_rate=rate)
    market.put()

    table = soup('table', attrs={'id': 'ctl00_DefaultContent_GrdCarteiraIndice'})[0]
    for tr in table('tr')[1:]:
        tds = tr('td')
        code = str(tds[0].string)
        name = util.clean_string(tds[1].string)
        value = util.get_float(tds[2].string)
        diff = util.get_float(tds[3].text.strip())
        stock = Stock(name=util.get_or_create_name(0, code, name),
                      value=value, diff=diff, market=market.key())
        stock.put()
Exemple #7
0
def week_price_section(df_month, df_week):
    """
    根据boll来判断价格区间
    :param df_month:
    :param df_week:
    :return:
    """
    # 1. 月线boll线上下轨
    last_month_df = df_month.iloc[-1, :]
    second_month_df = df_month.iloc[-2, :]
    next_month_boll_up = last_month_df['boll_up'] * 2 - second_month_df[
        'boll_up']
    next_month_boll_low = last_month_df['boll_low'] * 2 - second_month_df[
        'boll_low']
    # 2. 周线boll线上下轨 标准差收敛情况
    week_boll_up_df = df_week['boll_up']
    week_boll_low_df = df_week['boll_low']
    week_boll_mid_df = df_week['boll_mid']
    # 计算收敛情况
    week_boll_sd_df = df_week['boll_SD']
    sd_mean = week_boll_sd_df[-10:].mean()
    # print(sd_mean)
    week_boll_sd = '正常'
    if week_boll_sd_df.iloc[-1] > sd_mean:
        week_boll_sd = '发散'
    if week_boll_sd_df.iloc[-1] < sd_mean:
        week_boll_sd = '收敛'
    # 计算下一周的boll上下轨价格
    next_week_up = week_boll_up_df.iloc[-1] * 2 - week_boll_up_df.iloc[-2]
    next_week_low = week_boll_low_df.iloc[-1] * 2 - week_boll_low_df.iloc[-2]
    next_week_mid = week_boll_mid_df.iloc[-1] * 2 - week_boll_mid_df.iloc[-2]

    # 3. 计算周线boll线上轨附近卖出价格区间  下轨附近买入区间
    last_week_df = df_week.iloc[-1, :]
    last_close = last_week_df['close']

    risk_rate_income, section = 0, 0
    # 进入观察区的价格浮动比率
    look_k = 0.05
    # 买入价格浮动比率
    k = 0.025
    # 回报风险比
    income_rate_risk = 0
    # boll线,上轨附近,卖出  给出价格区间
    # boll线上轨附近
    if abs(last_close - next_week_up) < next_week_mid * look_k:
        section = (get_float(next_week_up - k * week_boll_mid_df.iloc[-1]),
                   get_float(next_week_up + k * week_boll_mid_df.iloc[-1]))
        # 卖出  收益风险比很小
        income_rate_risk = 0.01
    # boll线下轨 买入 给出买入区间
    if abs(last_close - next_week_low) < week_boll_mid_df.iloc[-1] * look_k:
        section = (get_float(next_week_low - k * week_boll_mid_df.iloc[-1]),
                   get_float(next_week_low + k * week_boll_mid_df.iloc[-1]))
        try:
            income_rate_risk = (next_week_mid -
                                last_close) / (last_close - next_week_low) - 1

        except:
            income_rate_risk = 6
        if income_rate_risk > 5 or -2 < income_rate_risk < -1:
            income_rate_risk = 5

    res = {
        # 本月boll上轨
        'month_boll_up': get_float(next_month_boll_up),
        'month_boll_low': get_float(next_month_boll_low),
        # 下周boll
        'next_week_up': get_float(next_week_up),
        'next_week_mid': get_float(next_week_mid),
        'next_week_low': get_float(next_week_low),
        # 'last_week_high':last_week_df['high'],
        # 'last_week_low':last_week_df['low'],
        'week_boll_sd': week_boll_sd,
        # 风险回报比
        'income_risk': get_float(income_rate_risk),
        # 价格参考区间
        'section': section,
    }
    return res