import jointquant

# 获得某只股票的所有交易日期
def get_all_trade_dates(symbol):
    df = jointquant.get_kline(symbol, '1d')
    return list(df.index.strftime('%Y-%m-%d'))

# 获得某只股票某一天的交易数据
def get_trade_data(symbol, trade_date):
    return jointquant.get_kline(symbol, '1d', start_date=trade_date, end_date=trade_date)

# 判断价格是否在某个区间内
def is_price_within_range(price, price_range):
    return price_range[0] <= price <= price_range[1]

# 获取所有支撑位和阻力位
def get_support_resistance_levels(symbol):
    trade_dates = get_all_trade_dates(symbol)
    levels = [[], []] # 0: support levels, 1: resistance levels
    for i in range(4, len(trade_dates)):
        # 获取前5个交易日的数据
        prev_trade_dates = trade_dates[i-4:i+1]
        prev_trade_data = [get_trade_data(symbol, d) for d in prev_trade_dates]

        # 计算价格波动不超过3%的价格区间
        close_prices = [td.loc[prev_trade_dates[i], 'close'] for i, td in enumerate(prev_trade_data)]
        price_range = (min(close_prices) * 0.97, max(close_prices) * 1.03)

        # 判断当前价格是否在支撑位或阻力位之内
        current_trade_data = get_trade_data(symbol, trade_dates[i])
        current_price = current_trade_data.loc[trade_dates[i], 'close']
        if is_price_within_range(current_price, price_range):
            # 如果当前价格在支撑位或阻力位之内,则将其加入对应的列表中
            levels[0].append(price_range[0])
            levels[1].append(price_range[1])

    return levels

# 测试代码,获取万科A的所有支撑位和阻力位
levels = get_support_resistance_levels('000002.XSHE')
print('Support levels:', levels[0])
print('Resistance levels:', levels[1])
使用JointQuant获取股票支撑位和阻力位:Python代码实现

原文地址: http://www.cveoy.top/t/topic/mOJO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录