<p>不是在<code>result</code>和<code>avrg</code>的对应元素上循环,而是在每个组合上循环。例如,如果将<code>print(result[prices], avrg[averages])</code>粘贴到循环中,您将看到</p>
<pre><code>590.0 580.0
590.0 590.0
590.0 593.33
590.0 590.0
590.0 580.0
590.0 570.0
590.0 566.67
600.0 580.0
600.0 590.0
600.0 593.33
[.. etc.]
</code></pre>
<p>所以附加的<code>signal</code>实际上是比较<code>result[prices]</code>和<code>avrg</code>的最后一个</em>元素的结果。你知道吗</p>
<p>我认为您真正想做的是比较相应的术语,我们可以使用<code>zip</code>来进行比较。此外,在Python中,我们可以直接循环列表,而不需要通过索引访问它们。例如:</p>
<pre><code>>>> list(zip(result, avrg))
[(590.0, 580.0), (600.0, 590.0), (590.0, 593.33), (580.0, 590.0),
(570.0, 580.0), (560.0, 570.0), (570.0, 566.67)]
</code></pre>
<p>这样我们就可以写作了</p>
<pre><code>lst = []
for price, average in zip(result, avrg):
if price > average:
signal = 'BUY'
else:
signal = 'SELL'
lst.append(signal)
</code></pre>
<p>(为了简单起见,忽略<code>price == average</code>案例)</p>
<p>产生</p>
<pre><code>>>> lst
['BUY', 'BUY', 'SELL', 'SELL', 'SELL', 'SELL', 'BUY']
</code></pre>
<p>在这里,我们甚至可以使用列表理解而不是循环:</p>
<pre><code>>>> ['BUY' if price > average else 'SELL' for price, average in zip(result, avrg)]
['BUY', 'BUY', 'SELL', 'SELL', 'SELL', 'SELL', 'BUY']
</code></pre>
<p>但是,逻辑越复杂,只需编写一个clear for循环就越好。你知道吗</p>
<p>在任何情况下,我认为基本的问题是,你做了一个完整的所有价格对所有平均值的比较,并采取最后一个值时,你真的想比较相应的元素。你知道吗</p>
<p>[注:我刚注意到一些奇怪的事情。当价格高于平均水平时买东西不是不对吗?你不应该在低于平均水平时买进,在高于平均水平时卖出吗?]你知道吗</p>