我试图将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。
答案 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