Pinescript 相关性(source_a、source_b、长度)-> 到 python

Pinescript correlation(source_a, source_b, length) -> to python

我需要帮助将 pine 相关函数翻译成 python,我已经翻译了 stdev 和 swma 函数,但是这个让我有点困惑。

我也找到了这个解释,但不太明白如何实现它:

in python try using pandas with .rolling(window).corr where window is the correlation coefficient period, pandas allow you to compute any rolling statistic by using rolling(). The correlation coefficient from pine is calculated with : sma(y*x,length) - sma(y,length)*sma(x,length) divided by stdev(length*y,length)*stdev(length*x,length) where stdev is based on the naïve algorithm.

此功能的 Pine 文档:

> Correlation coefficient. Describes the degree to which two series tend
> to deviate from their sma values. correlation(source_a, source_b,
> length) → series[float] RETURNS Correlation coefficient.

参数

source_a (系列) 来源系列。

source_b(系列)目标系列。

length(整数)长度(后面的柱数)。

使用pandas确实是最好的选择,TA-Lib也有CORREL的功能。为了让您更好地了解 pine 中的 correlation 函数是如何实现的,这里是一个使用 numpy 的 python 代码,请注意,这不是一个有效的解决方案。

import numpy as np
from matplotlib import pyplot as plt

def sma(src,m):
    coef = np.ones(m)/m
    return np.convolve(src,coef,mode="valid")

def stdev(src,m):
    a = sma(src*src,m)
    b = np.power(sma(src,m),2)
    return np.sqrt(a-b)

def correlation(x,y,m):
    cov = sma(x*y,m) - sma(x,m)*sma(y,m)
    den = stdev(x,m)*stdev(y,m)
    return cov/den

ts = np.random.normal(size=500).cumsum()
n = np.linspace(0,1,len(ts))
cor = correlation(ts,n,14)

plt.subplot(2,1,1)
plt.plot(ts)
plt.subplot(2,1,2)
plt.plot(cor)
plt.show()