找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 32|回复: 0

我觉得,可以有一个相似度判定指标

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-27 22:12:00 | 显示全部楼层 |阅读模式
一段时期内,庄家风格是相似的,如果他操作多支票,那手法就会很想,但是会有时间差,这样能不能成为下一步的指导?

欧几里得距离是一种常用的衡量空间中两点之间距离的方法。对于两条日 K 曲线,我们可以将其视为多维空间中的两个向量,每个维度对应一个特征(如开盘价、收盘价、最高价、最低价、成交量等)。假设两条曲线分别为A=(a1​,a2​,⋯,an​)和B=(b1​,b2​,⋯,bn​),则它们之间的欧几里得距离d(A,B)为:

d(A,B)=∑i=1n​(ai​−bi​)2​

import pandas as pd
import pandas_datareader.data as web
import datetime
from scipy.stats import pearsonr


def get_stock_data(ticker, start_date, end_date):
    try:
        data = web.DataReader(ticker, 'yahoo', start_date, end_date)
        return data['Close']
    except Exception as e:
        print(f"获取 {ticker} 数据时出错: {e}")
        return None


def calculate_similarity(stock1, stock2):
    if stock1 is None or stock2 is None:
        return None
    # 合并两个股票的收盘价数据
    combined = pd.concat([stock1, stock2], axis=1)
    combined.columns = ['Stock1', 'Stock2']
    # 去除缺失值
    combined = combined.dropna()
    if len(combined) < 2:
        return None
    # 计算皮尔逊相关系数和 p 值
    corr, p_value = pearsonr(combined['Stock1'], combined['Stock2'])
    return corr


if __name__ == "__main__":
    # 设置日期范围
    start_date = datetime.datetime(2024, 1, 1)
    end_date = datetime.datetime(2024, 12, 31)

    # 股票代码,这里以苹果和微软为例
    ticker1 = 'AAPL'
    ticker2 = 'MSFT'

    # 获取股票数据
    stock1_data = get_stock_data(ticker1, start_date, end_date)
    stock2_data = get_stock_data(ticker2, start_date, end_date)

    # 计算相似度
    similarity = calculate_similarity(stock1_data, stock2_data)

    if similarity is not None:
        print(f"{ticker1} 和 {ticker2} 的相似度(皮尔逊相关系数): {similarity}")
    else:
        print("无法计算相似度,请检查数据获取情况。")
    复制代码距离越近,说明两条曲线越相似。欧几里得距离简单直观,但对异常值较为敏感。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-9 23:19 , Processed in 0.140999 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表