首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于类的信号发生器

基于类的信号发生器
EN

Code Review用户
提问于 2014-02-19 09:15:37
回答 1查看 199关注 0票数 -1

我正在创建一个基于类的信号发生器,在给定买入阈值、卖出阈值和一系列指标的情况下,在给定的一天内创建一个“买入”“卖出”信号,如果当天的指示数大于卖出阈值。

但是前一天它并不大,所以基本上当该指标超过买入门槛时,当该指标越过买入门槛时,它就会发出一个卖出信号和一个买入信号(它低于当天的阈值,但它没有)。

我想知道这个工作代码是否可以使用zip来清理。

代码语言:javascript
复制
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
EN

回答 1

Code Review用户

发布于 2014-02-19 09:42:59

如果不需要的话,我的第一个建议是停止写作课程:您的类只有两个方法--一个init和一个适当的方法。这很可能是作为一个简单的函数编写的:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

这可以用列表理解来写:

代码语言:javascript
复制
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:])]

在现实生活中,我建议不要将列表中的逻辑理解为函数。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/42122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档