分类: 股票

  • 获取A股行业、股价信息

    """
    股票数据获取程序,并写入get_stocks.xslx文件
    """
    
    import pandas as pd
    import requests
    import logging
    import os
    
    def fetch_stock_data(stock_code):
        """
        获取股票数据的核心函数
        
        参数:
        stock_code (str): 股票代码,如"688360"
        
        返回:
        dict: 包含股票数据的字典
        """
        # 配置日志记录
        logging.basicConfig(level=logging.INFO, 
                            format='%(asctime)s - %(levelname)s - %(message)s')
        logger = logging.getLogger('StockDataFetcher')
        
        # 原始API端点
        api_url = "https://push2.eastmoney.com/api/qt/stock/get"
        
        try:
            # 6开头为沪市(代码1),其他为深市(代码0)
            market_code = 1 if stock_code.startswith("6") else 0
            
            # 构建请求参数
            request_params = {
                "fltt": "2",
                "invt": "2",
                "fields": "f57,f58,f84,f85,f127,f116,f117,f189,f43",
                "secid": f"{market_code}.{stock_code}",
            }
            
            logger.info(f"正在请求股票数据: {stock_code}")
            
            # 发送API请求(超时处理)
            response = requests.get(api_url, params=request_params, timeout=10)
            response.raise_for_status()  # 检查HTTP状态码
            
            logger.info("数据获取成功")
            return response.json()
        
        except requests.exceptions.RequestException as e:
            logger.error(f"请求失败: {e}")
            return None
        except Exception as e:
            logger.error(f"处理过程中发生错误: {e}")
            return None
    
    def process_stock_data(raw_data):
        """
        处理从API获取的原始股票数据
        
        参数:
        raw_data (dict): API返回的原始数据
        
        返回:
        pd.DataFrame: 处理后的股票数据
        """
        if not raw_data or "data" not in raw_data:
            return pd.DataFrame()
        
        # 原始字段到中文名称的映射
        field_mapping = {
            "f57": "股票代码",
            "f58": "股票简称",
            "f84": "总股本",
            "f85": "流通股",
            "f127": "行业",
            "f116": "总市值",
            "f117": "流通市值",
            "f189": "上市时间",
            "f43": "最新价",
        }
        
        try:
            # 提取核心数据
            stock_data = raw_data.get("data", {})
            
            # 创建数据列表 - 使用列表推导式更高效
            processed_data = []
            for field, display_name in field_mapping.items():
                # 只处理存在的字段
                if field in stock_data:
                    processed_data.append({
                        "字段标识": field,
                        "项目": display_name,
                        "数值": stock_data[field]
                    })
            
            # 转换为DataFrame
            df = pd.DataFrame(processed_data)
            
            # 如果数据为空,返回空DataFrame
            if df.empty:
                return df
            
            # 仅保留需要的列
            return df[["项目", "数值"]]
        
        except Exception as e:
            logging.error(f"数据处理失败: {e}")
            return pd.DataFrame()
    
    def display_stock_info(stock_code):
        """
        显示股票信息的主函数
        
        参数:
        stock_code (str): 股票代码
        """
        
        # 获取原始数据
        raw_data = fetch_stock_data(stock_code)
        
        if not raw_data:
            print(f"无法获取股票 {stock_code} 的数据")
            return
        
        # 处理数据
        stock_df = process_stock_data(raw_data)
        
        if stock_df.empty:
            print(f"股票 {stock_code} 的数据处理失败")
            return
        
        # 格式化输出
        print("\n股票信息:")
        print(stock_df.to_string(index=False))
        print("\n")
    
        file_path = 'get_stocks.xlsx'
        try:
            # 检查文件是否存在
            file_exists = os.path.isfile(file_path)
            mode = 'a' if file_exists else 'w'
            writer_kwargs = {
                'engine': 'openpyxl',
                'mode': mode
            }
            if mode == 'a':
                writer_kwargs['if_sheet_exists'] = 'replace'
            with pd.ExcelWriter(file_path, **writer_kwargs) as writer:
                stock_df.to_excel(writer, sheet_name=stock_code, index=False)
            print(f"股票 {stock_code} 的数据已成功写入 {file_path}")
        except Exception as e:
            print(f"写入股票 {stock_code} 数据到 Excel 时出错: {e}")
    
    # 主程序
    if __name__ == "__main__":
        # 示例股票代码 - 包含不同市场的股票
        stock_codes = ["601288","000937","688360", "603300", "002195", "300014"]
        
        # 为每个股票代码获取并显示信息
        for code in stock_codes:
            display_stock_info(code)

    PS C:\Users\czliu> & “C:/Program Files/Python313/python.exe” c:/Users/czliu/Documents/python/stocks_get.py
    2025-07-17 18:26:35,917 – INFO – 正在请求股票数据: 601288
    2025-07-17 18:26:36,043 – INFO – 数据获取成功

    股票信息:
    项目 数值
    股票代码 601288
    股票简称 XD农业银
    总股本 349983033873.0
    流通股 319244210777.0
    行业 银行
    总市值 2145395997641.48999
    流通市值 1956967012063.01001
    上市时间 20100715
    最新价 6.13

    股票 601288 的数据已成功写入 get_stocks.xlsx
    2025-07-17 18:26:36,282 – INFO – 正在请求股票数据: 000937
    2025-07-17 18:26:36,385 – INFO – 数据获取成功

    股票信息:
    项目 数值
    股票代码 000937
    股票简称 冀中能源
    总股本 3533546850.0
    流通股 3433394152.0
    行业 煤炭行业
    总市值 20847926415.0
    流通市值 20257025496.800003
    上市时间 19990909
    最新价 5.9

    股票 000937 的数据已成功写入 get_stocks.xlsx
    2025-07-17 18:26:36,432 – INFO – 正在请求股票数据: 688360
    2025-07-17 18:26:36,530 – INFO – 数据获取成功

    股票信息:
    项目 数值
    股票代码 688360
    股票简称 德马科技
    总股本 263745667.0
    流通股 252286035.0
    行业 通用设备
    总市值 5617782707.1
    流通市值 5373692545.5
    上市时间 20200602
    最新价 21.3

    股票 688360 的数据已成功写入 get_stocks.xlsx
    2025-07-17 18:26:36,582 – INFO – 正在请求股票数据: 603300
    2025-07-17 18:26:36,678 – INFO – 数据获取成功

    股票信息:
    项目 数值
    股票代码 603300
    股票简称 海南华铁
    总股本 1990650596.0
    流通股 1990650596.0
    行业 专用设备
    总市值 23230892455.32
    流通市值 23230892455.32
    上市时间 20150529
    最新价 11.67

    股票 603300 的数据已成功写入 get_stocks.xlsx
    2025-07-17 18:26:36,716 – INFO – 正在请求股票数据: 002195
    2025-07-17 18:26:36,813 – INFO – 数据获取成功

    股票信息:
    项目 数值
    股票代码 002195
    股票简称 岩山科技
    总股本 5681544596.0
    流通股 5612251612.0
    行业 互联网服务
    总市值 32043911521.439999
    流通市值 31653099091.679996
    上市时间 20071212
    最新价 5.64

    股票 002195 的数据已成功写入 get_stocks.xlsx
    2025-07-17 18:26:36,868 – INFO – 正在请求股票数据: 300014
    2025-07-17 18:26:36,966 – INFO – 数据获取成功

    股票信息:
    项目 数值
    股票代码 300014
    股票简称 亿纬锂能
    总股本 2045721497.0
    流通股 1861434646.0
    行业 电池
    总市值 92057467365.0
    流通市值 83764559070.0
    上市时间 20091030
    最新价 45.0

    股票 300014 的数据已成功写入 get_stocks.xlsx

  • 三七互娱股票突然接近跌停

    骑些日子走的还不错,昨日三七互娱下跌9%,太吓人了,估计近期长太高了!涨指数,没有赚钱效应,银行还好,我觉得最近银行,多元金融。游戏最近涨不少,连长三天,昨天回调,没成想,三七互娱下跌这么多,进了500股,再跌,加点仓……

  • 关于股票分红

    现在的玩法可能变了,凡是分红的股票分红当天拉的相当高。等分红之后,然后再跌一个分红的幅度,甚至更多。你看看近期的集中能源和中国海油。民生银行,分红前一天拉升了5.8%。真的不如分红前期把它卖掉,然后再在底部接回。我在冀中能源上等分红吃了大亏,直到现在一直在贴钱赔钱状态。可是37互娱。这支票就不一样了分红之后继续一路上涨。这就是股票的魅力,你猜不到结果。记住分红之后的红利。一个月内卖掉会扣百分之20的水。持股超过一个月。到一年之间扣百分之十。持股超过一年。就不再扣税。有的公司改成了半年甚至一季度一分红。这个事就麻烦了。有人建议开两个账户。钱不多,无所谓了。如果你的分红有10万。就是一个不小的数目。

  • 今天指数站上3500

    我买的银行股大涨。民生银行涨5.8。中国海油涨3.7。银行涨1.34%。我把东方财富账户里的股票清空了。

  • 炒股票学会了技术就有用吗?

    #此文章头条挣了0.64元 炒股学会了技术,就有用吗#技术是有用的,但是在股票市场中,技术也只占到很小的一部分,也就是个参考而已。股票涉及的内容太多,这家企业所处行业,管理人,国家的经济政策,技术的领先程度以及发展持续性,再加上公募私募国家的基金小散都掺和进来的话,这个故事就非常热闹啊。拥有的资量也会影响你操作这支股票的策略。第1局好股票资金多,可以持股享分红,但是只有几万块钱的话,那点分红简直不值一提。炒股不说是世界上最复杂的行为,但是必须有一定的定力和技术水平,耐心决断力执行力。可能需要花很多钱和时间来买这些经验教训。还要投入非常多的精力。如果只是玩玩而已,其实这些都无所谓,甚至可以不碰股票,但是一旦进入,你就知道炒股永远在炒,永远在路上。光是股票的盈利策略就够你学上一阵子了,比如:网格交易,打板,量化对冲,各种指标交易法……如果你喜欢挑战,那就进股市吧。如果不成功,最起码也可以有点谈资。

  • 果断买单离场

    听了“新船长投研。”的话。认栽,需要多大勇气。离场,那是证金白银呀,听了你的话,好吧,我把第一财经,亏损14,000的情况下扔了。

  • 股票量化对冲策略python代码

    量化对冲策略计算绘图

    代码提要

    代码运行环境,WIN 11 ,python 3.13

    1. 使用akshare获取股票数据,并用pandasewm函数
    2. 添加了akshare库获取真实股票数据
    3. 主程序中使用ak.stock_zh_index_daily获取上证指数数据
    4. 增加了异常处理,当获取数据失败时使用随机数据作为备选
    5. 确保数据列名与原代码兼容
    6. 截取最近200个交易日的数据进行计算

    使用说明:

    1. 需要安装依赖库:pip install pandas numpy akshare
    2. 默认获取上证指数数据,可以通过修改ak.stock_zh_index_daily(symbol="sh000001")中的symbol参数获取其他股票数据
    3. 股票代码格式示例:
    • 上证指数: sh000001
    • 深证成指: sz399001
    • 创业板指: sz399006
    • 个股: sh600000(浦发银行) 或 sz000001(平安银行)
    • 本代码股票代码 sz000937 (冀中能源)

    下面是添加了绘图功能的完整代码,使用matplotlib绘制股票价格和各项量化指标的图表:

    import pandas as pd
    import numpy as np
    import akshare as ak
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    from matplotlib.ticker import MaxNLocator
    import matplotlib.patches as mpatches
    import warnings
    import matplotlib.font_manager as fm
    import os
    
    # 忽略警告
    warnings.filterwarnings('ignore')
    
    # 设置全局字体
    font_path = 'C:/Windows/Fonts/simhei.ttf'  # 黑体字体路径,根据实际情况修改
    if fm.findfont(fm.FontProperties(fname=font_path)):
        plt.rcParams['font.family'] = fm.FontProperties(fname=font_path).get_name()
    else:
        print("未找到指定字体,请检查路径。将使用默认字体。")
    
    # 解决负号显示问题
    plt.rcParams['axes.unicode_minus'] = False
    
    def quant_hedge_strategy(df):
        # 主力暗盘资金副图指标
        df['量化对冲1'] = df['close'].ewm(span=9, adjust=False).mean()
        df['量化对冲3'] = (df['量化对冲1'] * 1.14).ewm(span=5, adjust=False).mean()
        df['量化对冲4'] = df['close'].ewm(span=2, adjust=False).mean()
    
        # 计算130日高低点
        df['130日高点'] = df['high'].rolling(130).max()
        df['130日低点'] = df['low'].rolling(130).min()
    
        # 计算条件柱状图
        df['stickline_cond'] = np.where(df['量化对冲4'] >= df['量化对冲3'], 1, 0)
    
        # 计算其他指标
        df['40日最低'] = df['low'].rolling(40).min()
        df['量化对冲2'] = (df['close'] - df['40日最低']) / df['40日最低'] * 100
    
        df['MA40'] = df['close'].rolling(40).mean()
        df['量化对冲7'] = (df['close'] - df['MA40']) / df['MA40'] * 100
    
        df['40日最低_MA40'] = df['40日最低'].rolling(40).mean()
        df['量化对冲8'] = (df['close'] - df['40日最低_MA40']) / df['40日最低_MA40'] * 100
    
        df['量化对冲9'] = 28
    
        df['量化对冲10'] = df['close'].rolling(5).mean()
        df['100日最高'] = df['量化对冲10'].rolling(100).max()
        df['量化对冲11'] = np.where(df['量化对冲10'] == df['100日最高'], df['量化对冲8'], np.nan)
    
        # 成本分布计算(简化为使用移动平均)
        df['cost90'] = df['close'].rolling(90).mean().shift(1)
        df['cost10'] = df['close'].rolling(10).mean().shift(1)
    
        df['量化对冲12'] = ((df['close'] * df['volume'] - df['cost90'] * df['volume']) / 20 + 250) * 1.2 / 5
        df['量化对冲13'] = ((df['cost90'] * df['volume'] - df['close'] * df['volume']) / 20 + 250) * 1.2 / 5
        df['量化对冲14'] = ((df['close'] * df['volume'] - df['cost10'] * df['volume']) / 20 + 250) * 1.2 / 5
        df['量化对冲15'] = ((df['cost10'] * df['volume'] - df['close'] * df['volume']) / 20 + 250) * 1.2 / 5
    
        # 主力暗盘资金副图指标信号条件
        df['量化对冲5'] = ((df['量化对冲14'] > 0) &
                         ((df['量化对冲12'] > df['量化对冲13']) |
                          (df['量化对冲12'] > 0)))
    
        df['量化对冲6'] = ((df['量化对冲14'] > 0) &
                         (df['量化对冲12'] > 0) &
                         (df['量化对冲13'] < 0) &
                         (df['量化对冲15'] < 0))
    
        df['量化对冲5_count'] = df['量化对冲5'].rolling(10).sum()
        df['量化对冲6_count'] = df['量化对冲6'].rolling(60).sum()
    
        df['量化对冲16'] = ((df['量化对冲5'] & (df['量化对冲5_count'] == 1)) |
                          (df['量化对冲6'] & (df['量化对冲6_count'] == 1)))
    
        df['量化对冲16_count'] = df['量化对冲16'].rolling(20).sum()
        df['起飞信号'] = np.where(df['量化对冲16'] & (df['量化对冲16_count'] == 1),
                              df['量化对冲2'] * 1.16, np.nan)
    
        # 妖股信号
        df['量化对冲14_60日高点'] = df['量化对冲14'].rolling(60).max()
        df['量化对冲14_20日高点'] = df['量化对冲14'].rolling(20).max()
        df['妖股条件1'] = df['量化对冲14'] >= df['量化对冲14_60日高点']
        df['妖股条件2'] = (df['量化对冲14'] >= df['量化对冲14_20日高点']).rolling(20).sum() == 1
        df['妖股条件3'] = df['量化对冲14'] > df['量化对冲13']
    
        df['妖股信号'] = np.where(df['妖股条件1'] & df['妖股条件2'] & df['妖股条件3'],
                              df['量化对冲2'] * 1.16, np.nan)
    
        # 交叉信号
        df['交叉信号'] = np.where(df['量化对冲2'].shift(1) < df['量化对冲9'],
                              df['量化对冲2'], np.nan)
    
        return df
    
    def plot_quant_strategy(df, stock_name="上证指数"):
        """绘制量化对冲策略图表"""
        # 创建一个包含4个子图的图表
        fig, axes = plt.subplots(4, 1, figsize=(16, 18), sharex=True)
        fig.suptitle(f'{stock_name}量化对冲策略分析', fontsize=16)
    
        # 绘制K线图和均线
        ax1 = axes[0]
        ax1.set_title('价格走势与均线', fontsize=14)
        ax1.plot(df.index, df['close'], label='收盘价', color='black', linewidth=2)
        ax1.plot(df.index, df['MA40'], label='MA40', color='blue', linestyle='--')
        ax1.plot(df.index, df['量化对冲10'], label='MA5', color='red', linestyle='--')
    
        # 绘制起飞信号
        signal_dates = df[~df['起飞信号'].isna()].index
        signal_values = df[~df['起飞信号'].isna()]['close']
        ax1.scatter(signal_dates, signal_values, color='green', s=100, label='起飞信号', marker='^')
    
        # 绘制妖股信号
        妖股_dates = df[~df['妖股信号'].isna()].index
        妖股_values = df[~df['妖股信号'].isna()]['close']
        ax1.scatter(妖股_dates, 妖股_values, color='purple', s=100, label='妖股信号', marker='*')
    
        # 绘制交叉信号
        cross_dates = df[~df['交叉信号'].isna()].index
        cross_values = df[~df['交叉信号'].isna()]['close']
        ax1.scatter(cross_dates, cross_values, color='orange', s=100, label='交叉信号', marker='o')
    
        ax1.grid(True)
        ax1.legend(loc='upper left')
        ax1.set_ylabel('价格')
    
        # 绘制量化对冲2、9、11指标
        ax2 = axes[1]
        ax2.set_title('量化对冲指标2、9、11', fontsize=14)
        ax2.plot(df.index, df['量化对冲2'], label='量化对冲2', color='blue')
        ax2.plot(df.index, df['量化对冲9'], label='量化对冲9', color='red', linestyle='--')
        ax2.plot(df.index, df['量化对冲11'], label='量化对冲11', color='green', marker='o', linestyle='', alpha=0.7)
    
        # 填充量化对冲2大于量化对冲9的区域
        ax2.fill_between(df.index, df['量化对冲2'], df['量化对冲9'],
                        where=(df['量化对冲2'] > df['量化对冲9']),
                        color='lightgreen', alpha=0.3)
        # 填充量化对冲2小于量化对冲9的区域
        ax2.fill_between(df.index, df['量化对冲2'], df['量化对冲9'],
                        where=(df['量化对冲2'] < df['量化对冲9']),
                        color='lightcoral', alpha=0.3)
    
        ax2.grid(True)
        ax2.legend(loc='upper left')
        ax2.set_ylabel('指标值')
    
        # 绘制量化对冲12、13、14、15指标
        ax3 = axes[2]
        ax3.set_title('主力暗盘资金指标', fontsize=14)
        ax3.plot(df.index, df['量化对冲12'], label='量化对冲12', color='blue')
        ax3.plot(df.index, df['量化对冲13'], label='量化对冲13', color='red')
        ax3.plot(df.index, df['量化对冲14'], label='量化对冲14', color='green')
        ax3.plot(df.index, df['量化对冲15'], label='量化对冲15', color='purple')
    
        # 绘制起飞信号和妖股信号在这张图上的位置
        ax3.scatter(signal_dates, df.loc[signal_dates, '量化对冲14'], color='green', s=50, marker='^')
        ax3.scatter(妖股_dates, df.loc[妖股_dates, '量化对冲14'], color='purple', s=50, marker='*')
    
        ax3.grid(True)
        ax3.legend(loc='upper left')
        ax3.set_ylabel('资金指标')
    
        # 绘制量化对冲5、6指标柱状图
        ax4 = axes[3]
        ax4.set_title('量化对冲信号5、6', fontsize=14)
    
        # 绘制柱状图
        bar_width = 0.6
        quant5_positive = df['量化对冲5_count'].copy()
        quant5_positive[quant5_positive < 0] = 0
        quant6_positive = df['量化对冲6_count'].copy()
        quant6_positive[quant6_positive < 0] = 0
    
        ax4.bar(df.index, quant5_positive, width=bar_width, color='blue', alpha=0.7, label='量化对冲5')
        ax4.bar(df.index, quant6_positive, width=bar_width, color='green', alpha=0.7, label='量化对冲6')
    
        # 添加信号标记
        ax4.scatter(signal_dates, [0]*len(signal_dates), color='green', s=100, marker='^')
        ax4.scatter(妖股_dates, [0]*len(妖股_dates), color='purple', s=100, marker='*')
    
        ax4.grid(True)
        ax4.legend(loc='upper left')
        ax4.set_ylabel('信号强度')
        ax4.set_xlabel('日期')
    
        # 设置x轴日期格式
        locator = mdates.AutoDateLocator()
        formatter = mdates.ConciseDateFormatter(locator)
        for ax in axes:
            ax.xaxis.set_major_locator(locator)
            ax.xaxis.set_major_formatter(formatter)
    
        plt.tight_layout()
        plt.subplots_adjust(top=0.94)
        return fig
    
    # 使用示例
    if __name__ == "__main__":
        # 使用akshare获取股票数据
        try:
            # 获取上证指数数据,可替换为其他股票代码
            stock_data = ak.stock_zh_index_daily(symbol="sz000937")
            # 重命名列以匹配原代码
            df = stock_data.rename(columns={
                'date': 'date',
                'open': 'open',
                'high': 'high',
                'low': 'low',
                'close': 'close',
                'volume': 'volume'
            })
            # 设置日期索引
            df['date'] = pd.to_datetime(df['date'])
            df.set_index('date', inplace=True)
    
            # 确保数据量足够
            if len(df) < 200:
                print(f"数据长度不足,只有{len(df)}行")
            else:
                # 截取最近200个交易日数据
                df = df.iloc[-200:]
    
                # 计算量化对冲指标
                result_df = quant_hedge_strategy(df)
    
                # 绘制图表
                fig = plot_quant_strategy(result_df, "冀中能源")
    
                # 显示图表
                plt.show()
    
                # 输出结果
                print(result_df[['量化对冲1', '量化对冲2', '量化对冲3', '量化对冲4', '量化对冲11',
                               '起飞信号', '妖股信号', '交叉信号']].tail())
        except Exception as e:
            print(f"获取数据出错: {e}")
            print("使用随机数据作为替代")
            # 随机数据作为备选
            data = {
                'date': pd.date_range(start='2023-01-01', periods=200),
                'open': np.random.uniform(100, 200, 200),
                'high': np.random.uniform(110, 220, 200),
                'low': np.random.uniform(90, 190, 200),
                'close': np.random.uniform(100, 200, 200),
                'volume': np.random.randint(10000, 100000, 200)
            }
            df = pd.DataFrame(data)
            df.set_index('date', inplace=True)
    
            # 计算量化对冲指标
            result_df = quant_hedge_strategy(df)
    
            # 绘制图表
            fig = plot_quant_strategy(result_df, "随机数据")
    
            # 显示图表
            plt.show()
    
            # 输出结果
            print(result_df[['量化对冲1', '量化对冲2', '量化对冲3', '量化对冲4', '量化对冲11',
                           '起飞信号', '妖股信号', '交叉信号']].tail())

    新增的绘图功能特点:

    1. 包含4个子图,全面展示量化策略的各项指标:
    • 子图1:股票价格走势与关键均线,标记各种信号出现位置
    • 子图2:量化对冲2、9、11指标,填充指标间区域
    • 子图3:主力暗盘资金指标(量化对冲12-15)
    • 子图4:量化对冲信号5、6的柱状图
    1. 信号标记:
    • 绿色三角:起飞信号
    • 紫色星号:妖股信号
    • 橙色圆点:交叉信号
    1. 图表美化:
    • 自动调整日期显示格式
    • 添加网格线提高可读性
    • 每个子图都有标题和图例
    • 合理的颜色搭配
    1. 交互功能:
    • 鼠标悬停可查看具体数值
    • 可放大缩小特定区域
    • 可保存图表为图片文件

    使用说明:

    1. 需要安装额外依赖库:pip install matplotlib
    2. 运行代码后会自动显示绘制的图表
    3. 图表标题会显示股票名称,默认为”上证指数”
    4. 可以通过修改plot_quant_strategy函数来自定义图表样式和内容

    量化对冲指标的解释

    以下是代码中主要量化对冲指标的解释,这些指标用于分析股票趋势、资金流向和潜在交易信号:

    1. 趋势跟踪指标

    量化对冲1

    • 计算方式EMA(close, 9)(9日指数移动平均线)
    • 作用:反映短期价格趋势,比简单均线更敏感,用于识别短期方向。

    量化对冲3

    • 计算方式EMA(量化对冲1 × 1.14, 5)(对放大后的短期均线再做5日EMA)
    • 作用:增强趋势信号,放大短期波动,用于捕捉快速变化的趋势。

    量化对冲4

    • 计算方式EMA(close, 2)(2日指数移动平均线)
    • 作用:超短期趋势指标,对价格变动极为敏感,用于识别极短期转折点。

    2. 相对强弱指标

    量化对冲2

    • 计算方式(close - 40日最低) / 40日最低 × 100
    • 作用:衡量当前价格相对于近40日最低价的涨幅百分比,类似于RSI指标,反映价格强度。
    • 信号逻辑:值越高,表明价格距离低点越远,可能处于超买区域;反之可能处于超卖区域。

    量化对冲7

    • 计算方式(close - MA40) / MA40 × 100
    • 作用:衡量当前价格相对于40日均价的偏离程度,用于判断价格是否偏离均值过远(可能回调)。

    3. 资金流向指标

    量化对冲12-15

    • 计算方式:基于收盘价、成交量与不同周期成本价(90日/10日均价)的差值计算
    • 量化对冲12 = ((close × volume - cost90 × volume) / 20 + 250) × 1.2 / 5
    • 量化对冲13 = ((cost90 × volume - close × volume) / 20 + 250) × 1.2 / 5
    • 量化对冲14 = ((close × volume - cost10 × volume) / 20 + 250) × 1.2 / 5
    • 量化对冲15 = ((cost10 × volume - close × volume) / 20 + 250) × 1.2 / 5
    • 作用:模拟不同周期的资金流入流出情况,正值表示资金流入,负值表示资金流出。
    • 信号逻辑:当短期资金流入(如量化对冲14)强于长期资金流出(如量化对冲13)时,视为看涨信号。

    4. 信号生成指标

    起飞信号

    • 触发条件
    1. 量化对冲16为True(满足量化对冲5量化对冲6条件)
    2. 量化对冲16在近20天内首次出现
    • 作用:捕捉价格启动初期的信号,可能预示短期快速上涨。

    妖股信号

    • 触发条件
    1. 量化对冲14 ≥ 量化对冲14_60日高点(短期资金流入创60日新高)
    2. 量化对冲14 ≥ 量化对冲14_20日高点在近20天内仅出现1次
    3. 量化对冲14 > 量化对冲13(短期资金流入强于长期流出)
    • 作用:识别可能出现大幅上涨的”妖股”特征,通常伴随强资金推动。

    交叉信号

    • 触发条件量化对冲2的前一日值低于量化对冲9(阈值28),当日值高于或等于阈值
    • 作用:捕捉价格从弱势区域向上突破的转折点,类似MACD金叉信号。

    5. 辅助指标

    量化对冲5 & 量化对冲6

    • 量化对冲5:短期资金流入为正,且(短期资金流入>长期资金流出 或 短期资金流入为正)
    • 量化对冲6:短期资金流入为正,且短期和长期资金流入均为正,同时短期和长期资金流出均为负
    • 作用:量化对冲5侧重短期资金流向,量化对冲6要求更严格的资金面条件,两者结合用于确认强势信号。

    策略逻辑总结

    1. 趋势判断:通过多周期均线(量化对冲1、3、4)识别价格趋势方向。
    2. 强弱评估:通过量化对冲2评估价格相对强度,结合阈值(量化对冲9)判断超买超卖。
    3. 资金监控:通过量化对冲12-15跟踪不同周期资金流向,判断多空力量对比。
    4. 信号生成:综合上述指标,生成起飞信号、妖股信号和交叉信号,作为交易决策依据。

    该策略适合用于识别短期趋势转折点和强势股,但实际应用中需结合止损机制和仓位管理,避免假信号带来的风险。

  • 周五股票跌了

    前两天股票涨了,小盘长得好,我买的农业银行、中国海油、冀中能源没涨多少,上证指数来到了3462,我的两个账户跌去1600多元。农行跌了3.62%多……!!!!!!

  • 股票建仓,慢慢来

    两种建立底仓的方法!有人问我如何建立底仓,我谈谈两种建立底仓的方法吧!假如你打算购买5000股底仓,如果股价不高,只有几块,十几块钱一股,那么分五次买入即可,每次买入1000股。如果股价很高,100块,或者几百块一股,那么就分十次买入。这种建立底仓的方法,叫做分批买入,多次买入。

    第二种建立底仓的方法是一边交易,一边建立底仓。假如你想购买5000股底仓。你可以每次买入1500股,当股价上涨时,你卖出1000股,留下500股。连续坚持十次,就有5000股底仓了。这种建立底仓的方法就是一边做波段,一边建立底仓。至于使用哪种方法建立底仓,你要根据自己的情况来决定。

  • 日周月线看趋势

    趋势分级:月线定多空,周线抓波段,日线60分钟精买卖。