我正在创建一个基于类的信号发生器,在给定买入阈值、卖出阈值和一系列指标的情况下,在给定的一天内创建一个“买入”“卖出”信号,如果当天的指示数大于卖出阈值。
但是前一天它并不大,所以基本上当该指标超过买入门槛时,当该指标越过买入门槛时,它就会发出一个卖出信号和一个买入信号(它低于当天的阈值,但它没有)。
我想知道这个工作代码是否可以使用zip来清理。
class Directionalindicator_signals():
def __init__(self, buy_threshold, sell_threshold, list_of_indicators):
self.buy_threshold = buy_threshold
self.sell_threshold = sell_threshold
self.list_of_indicators = list_of_indicators
def calculate(self):
signals = ['']
for i in range(1, len(self.list_of_indicators)):
if self.list_of_indicators[i] > self.buy_threshold and self.list_of_indicators[i-1] <= self.buy_threshold:
signals.append('Sell')
elif self.list_of_indicators[i] < self.buy_threshold and self.list_of_indicators[i-1] >= self.buy_threshold:
signals.append('Buy')
else:
signals.append('')
return signals发布于 2014-02-19 09:42:59
如果不需要的话,我的第一个建议是停止写作课程:您的类只有两个方法--一个init和一个适当的方法。这很可能是作为一个简单的函数编写的:
def calculate_directions(buy_threshold, sell_threshold, list_of_indicators):
signals = ['']
for i in range(1, len(list_of_indicators)):
if list_of_indicators[i] > buy_threshold and list_of_indicators[i-1] <= buy_threshold:
signals.append('Sell')
elif list_of_indicators[i] < buy_threshold and list_of_indicators[i-1] >= buy_threshold:
signals.append('Buy')
else:
signals.append('')
return signals那么,它似乎比sell_threshold更明显是没有用的。
此外,正如jonrsharpe的评论所建议的那样,您可以使用zip:
def calculate_directions(buy_threshold, list_of_indicators):
signals = ['']
for prev, curr in zip(list_of_indicators, list_of_indicators[1:]):
if curr > buy_threshold and prev <= buy_threshold:
signals.append('Sell')
elif curr < buy_threshold and prev >= buy_threshold:
signals.append('Buy')
else:
signals.append('')
return signals这可以用列表理解来写:
def calculate_directions(buy_threshold, list_of_indicators):
return ['']+[('Sell' if (curr > buy_threshold and prev <= buy_threshold) else ('Buy' if (curr < buy_threshold and prev >= buy_threshold) else '')) for prev, curr in zip(list_of_indicators, list_of_indicators[1:])]在现实生活中,我建议不要将列表中的逻辑理解为函数。
https://codereview.stackexchange.com/questions/42122
复制相似问题