首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将linreg函数从pinescript转换为Python?

将linreg函数从pinescript转换为Python?
EN

Stack Overflow用户
提问于 2021-05-27 09:36:28
回答 1查看 1.5K关注 0票数 8

我正在尝试将TradingView指示器转换为Python (也使用熊猫来存储其结果)。

这是我想要转换为python指示符的指示器公共代码:

https://www.tradingview.com/script/sU9molfV/

我被困在创建松树脚本linereg默认函数。

这是我遇到麻烦的笔录指示器的片段:

代码语言:javascript
运行
复制
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs

这是它的文件:

线性回归曲线一种在用户定义的时间段内最适合指定价格的线路。它是用最小二乘法计算的。此函数的计算结果使用以下公式计算: linreg = offset +斜率*(长度-1-偏移),其中长度是y参数,偏移是z参数,截距和斜率是用源级数(x参数)上的最小二乘法计算的值。linreg(源、长度、偏移量)→系列浮点数

来源:

https://www.tradingview.com/pine-script-reference/#fun_linreg

我已经找到了这段mql4代码,并尝试一步一步地执行它,以便转换它,并最终在Python中创建一个函数行,以便进一步使用它来构建这个松脚本指示符:

https://www.mql5.com/en/code/8016

到目前为止,这是我的代码:

代码语言:javascript
运行
复制
# calculate linear regression:
# https://www.mql5.com/en/code/8016
barsToCount = 14
# sumy+=Close[i];
df['sumy'] = df['Close'].rolling(window=barsToCount).mean()

# sumxy+=Close[i]*i;
tmp = []
sumxy_lst = []
for window in df['Close'].rolling(window=barsToCount):
    for index in range(len(window)):
        tmp.append(window[index] * index)
    sumxy_lst.append(sum(tmp))
    del tmp[:]
df.loc[:,'sumxy'] = sumxy_lst
# sumx+=i;
sumx = 0
for i in range(barsToCount):
    sumx += i
# sumx2+=i*i;
sumx2 = 0
for i in range(barsToCount):
    sumx2 += i * i
# c=sumx2*barsToCount-sumx*sumx;
c = sumx2*barsToCount - sumx*sumx
# Line equation:
# b=(sumxy*barsToCount-sumx*sumy)/c;
df['b'] = ((df['sumxy']*barsToCount)-(sumx*df['sumy']))/c
# a=(sumy-sumx*b)/barsToCount;
df['a'] = (df['sumy']-sumx*df['b'])/barsToCount
# Linear regression line in buffer:
df['LR_line'] = 0.0
for x in range(barsToCount):
    # LR_line[x]=a+b*x;
    df['LR_line'].iloc[x] = df['a'].iloc[x] + df['b'].iloc[x] * x
    # print(x, df['a'].iloc[x], df['b'].iloc[x], df['b'].iloc[x]*x)
print(df.tail(50))
print(list(df))

它不起作用。

请知道如何在python中创建类似的linereg函数吗?

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-23 07:52:50

我用塔利布来计算坡度和截取收盘价,然后才意识到塔利布也提供了完整的calc。结果看起来和TradingView一样(只是目瞪口呆)。

在jupyterlab做了以下工作:

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np
import talib as tl
from pandas_datareader import data
%run "../../plt_setup.py"

asset = data.DataReader('^AXJO', 'yahoo', start='1/1/2015')

n = 270
(asset
 .assign(linreg = tl.LINEARREG(asset.Close, n))
 [['Close', 'linreg']]
 .dropna()
 .loc['2019-01-01':]
 .plot()
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67719509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档