我试图将tradeview脚本转换为python。有谁知道[]运算符的含义?

时间:2016-12-19 14:32:21

标签: python

我试图将tradeview脚本代码转换为python,但我有这个操作符我不明白,我想得到一些帮助。

https://www.tradingview.com/script/Q0eQz7ll-Fisher-Transform-Indicator-by-Ehlers-Strategy/

                      Date   Open   High    Low  Close
37821  2016/10/13 18:10:00  50.31  50.31  50.27  50.28
37822  2016/10/13 18:09:00  50.30  50.31  50.29  50.31
37823  2016/10/13 18:08:00  50.31  50.31  50.30  50.31
37824  2016/10/13 18:07:00  50.34  50.34  50.31  50.32
37825  2016/10/13 18:06:00  50.37  50.37  50.35  50.35
37826  2016/10/13 18:05:00  50.35  50.37  50.34  50.37
37827  2016/10/13 18:04:00  50.39  50.39  50.35  50.35


for x in range(len(df)):
    Pt = (df.iloc[x,2] + df.iloc[x,3]) / 2.0
    MaxH = df.iloc[x:x+9, 2].max()             
    MinL = df.iloc[x:x+9, 3].min()          

    X = 0.33 * 2.0 * ((Pt - MinL)/(MaxH - MinL) - 0.5) * 0.67 * X[1]  # ?????

我不理解的表达来自(nFish [1])和(nValue1 [1])部分。

在脚本手册(https://www.tradingview.com/study-script-reference/#op_[])中,它表示它的系列下标,并提供对以前的系列值的访问权。

我尝试将脚本代码转换为python,其数据框如下所示,但我不知道如何翻译(nFish [1])和(nValue1 [1])部分。

ALTER TABLE sometable 
    ADD somecolumn BIT NOT NULL DEFAULT 0;

ALTER TABLE sometable 
    ADD CONSTRAINT somedate_before_now 
        CHECK (somedatecolumn < GETDATE()); 

我想知道第一个脚本中方括号的含义,如果可能的话,我想知道如何将其转换为Python。

3 个答案:

答案 0 :(得分:1)

如果你有一个变量,例如x = [],这意味着变量被设置为一个列表或一个你喜欢称之为数组的数组(它在技术上称为Python中的列表),所以你可以存储其中的值,例如x = [1,2,3]

然后,您可以在程序中稍后通过x[0]检索这些值,其中0是列表中的第1项。

编辑:所以在这种情况下,x[0]将等于1,因为这是列表中的第一项。

答案 1 :(得分:1)

在Tradingview的Pine脚本中,像nFish [1]这样的变量是图表上1 bar之前的变量nFish的值。 nFish [8]是8个小节之前的nFish的值。希望对您有所帮助。

答案 2 :(得分:0)

我正在寻找在python中复制TradingView的fisher转换。

查看了多个代码后,我发现它们以不同的方式实现了费舍尔变换。我仍在尝试找出答案:

1-什么是MaxH和MinL?

在某些文档中,它是某个时期内所有HIGH的最高值。参考:https://wizardforcel.gitbooks.io/python-quant-uqer/content/131.html 在像您这样的其他实现中,它在一定时期内的价格最高(高+低)/ 2。参考:https://www.mesasoftware.com/papers/UsingTheFisherTransform.pdf 2-交易视图使用哪个价格来计算费舍尔变换,某些实现使用(高+低)/ 2的价格,另一些实现使用收盘价/开盘价。 3-乘法的比率,一些使用(0.33&0.67),而其他使用(0.5&0.5)。

这是我汇总的Python脚本,使用最高价和最低价,但与TradingView的fisher 9指标不匹配。我也尝试使用价格最高/最低的hl,也没有运气。

def fisherT(high,low,n):
    high = np.asarray(high,dtype=np.float32)
    low = np.asarray(low,dtype=np.float32)
    sizeArray = len(high)
    hl = (high + low)/2
    maxHln = [max(high[x:x+n]) for x in range(sizeArray-n+1)]
    minHln = [min(low[x:x+n]) for x in range(sizeArray-n+1)]
    valTn = [0.33*2*((hl[x+n-1]-minHln[x])/(maxHln[x]-minHln[x])-0.5) if maxHln[x]-minHln[x] != 0 else 0.33*2*((hl[x+n-1]-minHln[x])/(0.001)-0.5) for x in range(sizeArray-n+1)]
    for i in range(1,sizeArray-n+1):
        valTn[i] = valTn[i] + 0.67 * valTn[i-1]
        if valTn[i] > 0.99:
            valTn[i] = 0.999
        elif valTn[i] < -0.99:
            valTn[i] = -0.999
    _fisher = [0.5*np.log((1.0+valTn[x])/(1.0-valTn[x])) for x in range(sizeArray-n+1)]
    _fisherSignal = []
    for i in range(1,sizeArray-n+1):
        _fisher[i] = _fisher[i] + 0.5 * _fisher[i-1]
        _fisherSignal.append(_fisher[i-1])
    fisher = np.zeros(sizeArray)
    fisherSignal = np.zeros(sizeArray)
    fisher[n-1:] = _fisher
    fisherSignal[n:] = _fisherSignal
    return fisher,fisherSignal