titan27149 发表于 2025-3-22 11:35:16

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

一段时期内,庄家风格是相似的,如果他操作多支票,那手法就会很想,但是会有时间差,这样能不能成为下一步的指导?

[*]欧几里得距离是一种常用的衡量空间中两点之间距离的方法。对于两条日 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(, 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("无法计算相似度,请检查数据获取情况。")
    距离越近,说明两条曲线越相似。欧几里得距离简单直观,但对异常值较为敏感。

shllwk 发表于 2025-3-31 07:20:50

谢谢分享收盘价、最高价

zunshoujilv 发表于 2025-4-16 01:05:52

这个很好的

kenlee1628 发表于 2025-4-19 19:09:45

这是个很好的想法

zunshoujilv 发表于 2025-4-25 01:52:05

这个看着很好

xinhua123 发表于 2025-5-8 00:20:58

很好的源码

dyt20 发表于 2025-5-21 09:52:38

哪有制做教程?

少儿编程老师 发表于 2025-6-7 10:58:38

挺好的理解

hwf9898 发表于 2025-6-8 16:04:42

真的可以吗?

Pikachu 发表于 2025-6-8 21:44:44

有点意思
页: [1]
查看完整版本: 我觉得,可以有一个相似度判定指标