ThinkScript到Python -迭代for循环,遇到麻烦



我正试图将以下代码从ThinkScript (TD Ameritrade代码)翻译为Python,并且我无法将其输出正确的形状。

ThinkScript:

TDA中的代码输出以"lengtha", - 10,10;使用";fold",它迭代前10个开盘价,并将它们与当前收盘价进行比较。根据迭代输出,循环从"增加或减少1;s",其中;s";初始值默认为0。

例如oa的最后10个值ca > GetValue(oa, i)true,则输出为10。

我想把它翻译成python,其中oaca是numpy数组。并且,其中输出是另一个numpy数组,与oaca具有相同的滞留时间。

input lengtha = 10;
def oa = open();
def ca = close();
def data = fold i = 0 to lengtha
with s
do s + (if ca > GetValue(oa, i)
then 1
else if ca < GetValue(oa, i)
then - 1
else 0);

我试过了:

这是我尝试过的许多版本之一。这个特殊的例子似乎确实按照我期望的方式(可能)进行了数学运算。但是,它输出一个数组的数组,我想简单地为ca中的每个值返回1个值。

oa = np.array(open)
ca = np.array(close)
window_size = 10
running_count = 0
result = []
for i in range(window_size):
oa_window = oa[i:i+window_size]
ca_window = ca
window_result = np.where(ca_window > oa_window, running_count+1, running_count-1)
running_count += np.sum(np.where(ca_window > oa_window, 1, -1))
running_count = min(max(running_count, -10), 10)
result.append(window_result)
result = np.array(result)
print(result)

输出:

  1. 我不确定这是如何导致-11的。
  2. 我不确定如何返回结果为1由X(1D)数组,而不是这10由X由10。(其中Xcaoa的大小)
[[[ -1   1  -1 ...   1   1  -1]
[  1   1  -1 ...   1   1   1]
[ -1   1  -1 ...   1   1   1]
...
[ -1  -1  -1 ...  -1  -1  -1]
[ -1  -1  -1 ...  -1  -1  -1]
[ -1  -1  -1 ...  -1  -1  -1]]
[[ -9 -11 -11 ...  -9 -11 -11]
[ -9 -11  -9 ...  -9  -9  -9]
[ -9 -11  -9 ...  -9  -9 -11]
...
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]]
[[-11 -11  -9 ... -11 -11  -9]
[-11  -9  -9 ...  -9  -9  -9]
[-11  -9  -9 ...  -9 -11  -9]
...
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]]
...
[[ -9  -9 -11 ...  -9  -9  -9]
[ -9  -9  -9 ...  -9  -9  -9]
[ -9  -9  -9 ...  -9  -9  -9]
...
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]]
[[ -9 -11 -11 ...  -9  -9  -9]
[ -9  -9  -9 ...  -9  -9  -9]
[ -9  -9 -11 ...  -9  -9  -9]
...
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]]
[[-11 -11  -9 ...  -9  -9  -9]
[ -9  -9  -9 ...  -9  -9  -9]
[ -9 -11  -9 ...  -9  -9  -9]
...
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]
[-11 -11 -11 ... -11 -11 -11]]]

所期望的输出:(随机的例子)

[ 1
-8
3
9
10
0
. . . 
-10
-9 ]

可能的解决方案

在这上面花了一些时间,这个公式看起来可能是我想要的:

这并没有得到我想要的输出。似乎它会在-10度停留很长一段时间。

for j in range(i-10, i):
sum += np.where(ca > oa[j], 1, np.where(ca < oa[j], -1, 0))

我想我明白了。np.roll()的加入让它回到了家。

for j in range(0, 10):
sum += np.where(ca > np.roll(oa,j), 1, np.where(ca < np.roll(oa,j), -1, 0))

最新更新