para_list_long=generate_fibonacci_sequence(2, 100), para_list_short=generate_fibonacci_sequence(2, 100), pa=generate_fibonacci_sequence(1, 100)): para = [] for p in para_list_long: for p1 in para_list_short: for b in pa: b = b / 100 para.append([int(p), int(p1), b]) return para这个代码中generate_fibonacci_sequence该怎么定义
时间: 2023-11-28 13:50:40 浏览: 87
`generate_fibonacci_sequence` 函数可以定义如下:
```python
def generate_fibonacci_sequence(start, end):
sequence = [start, start]
while sequence[-1] < end:
next_number = sequence[-1] + sequence[-2]
sequence.append(next_number)
return sequence[:-1]
```
这个函数会生成一个斐波那契数列,从 start 开始,一直到小于 end 为止。例如,`generate_fibonacci_sequence(2, 100)` 会生成 `[2, 2, 4, 6, 10, 16, 26, 42, 68]` 这个数列。
相关问题
def signal_john(df, para=[20, 0.05, 20], proportion=1): para_ = para[0] df['median'] = df['close'].rolling(para_, min_periods=1).mean() df['bias'] = df['close'] / df['median'] - 1 bias_pct = float(para[1]) wr_pct = para[2] df['TYP'] = (df['high'] + df['low'] + df['close']) / 3 df['H'] = np.where(df['high'] - df['TYP'].shift(1) > 0, df['high'] - df['TYP'].shift(1), 0) df['L'] = np.where(df['TYP'].shift(1) - df['low'] > 0, df['TYP'].shift(1) - df['low'], 0) df['max_high'] = df['high'].rolling(wr_pct, min_periods=1).max() df['min_low'] = df['low'].rolling(wr_pct, min_periods=1).min() df['Wr_%s' % str(wr_pct)] = (df['max_high'] - df['close']) / (df['max_high'] - df['min_low']) * 100 # 计算均线 df['Cr_%s' % (para_)] = df['H'].rolling(para_).sum() / df['L'].rolling(para_, min_periods=1).sum() * 100 # ======= 找出做多信号 CR 上穿 200 condition1 = df['Cr_%s' % str(para_)] > 200 # 均线大于0 # condition2 = df['Cr_%s' % str(params)].shift(1) <= 200 # 上一周期的均线小于等于0 condition2 = df['Cr_%s' % str(para_)].shift() <= 200 condition3 = df['Wr_%s' % str(wr_pct)] < 20 df.loc[condition1 & condition2 & condition3, 'signal_long'] = 1 # 1代表做多 condition1 = df['Cr_%s' % str(para_)] < 50 # 均线大于0 # condition2 = df['Cr_%s' % str(params)].shift(1) <= 200 # 上一周期的均线小于等于0 condition2 = df['Cr_%s' % str(para_)].shift() >= 50 condition3 = df['Wr_%s' % str(wr_pct)] < 80 df.loc[condition1 & condition2 & condition3, 'signal_short'] = -1 # 1代表做多 # 合并做多做空信号,去除重复信号 df['signal'] = df[['signal_long', 'signal_short']].sum(axis=1, min_count=1, skipna=True) # 若你的pandas版本是最新的,请使用本行代码代替上面一行 temp = df[df['signal'].notnull()][['signal']] temp = temp[temp['signal'] != temp['signal'].shift(1)] df['signal'] = temp['signal'] # ===根据bias,修改开仓时间 df['temp'] = df['signal'] # 将原始信号做多时,当bias大于阀值,设置为空 condition1 = (df['signal'] == 1) condition2 = (df['bias'] > bias_pct) df.loc[condition1 & condition2, 'temp'] = None # 将原始信号做空时,当bias大于阀值,设置为空 condition1 = (df['signal'] == -1) condition2 = (df['bias'] < -1 * bias_pct) df.loc[condition1 & condition2, 'temp'] = None # 使用之前的信号补全原始信号 df['temp'].fillna(method='ffill', inplace=True) df['signal'] = df['temp'] # ===考察是否需要止盈止损 df = process_stop_loss_close(df, proportion) return df #### 3.2、参数生成代码 def generate_fibonacci_sequence(start, end): """ 生成斐波那契数列 :param start: 数列起始值 :param end: 数列结束值 :return: 从起始值到结束值的斐波那契数列 """ seq = [start, start + 1] while seq[-1] <= end: seq.append(seq[-1] + seq[-2]) return seq[:-1] 优化以上代码
以下是对代码的优化建议:
1. 可以使用 @numba.jit 对函数进行装饰,以提高函数的执行速度。
2. 可以使用 pandas 的 DataFrame.pipe() 方法,将多个操作串联起来,以提高代码的可读性和简洁性。
3. 可以将函数中的一些常量或变量提取出来,作为函数的参数,以增加函数的灵活性。比如,可以将 bias_pct 和 wr_pct 提取出来,作为函数的参数。
4. 可以将一些重复的代码进行封装,以减少代码的重复性。比如,可以将处理做多做空信号的代码封装成一个函数。
5. 可以将函数中的一些不必要的变量删除,以减少内存的占用。比如,可以将 df['temp'] 删除,直接使用 df['signal']。
6. 可以使用 pandas 的 rolling_apply() 方法,代替 rolling().apply() 方法,以提高代码的执行速度。
7. 可以使用 pandas 的 query() 方法,代替 loc[] 方法,以提高代码的执行速度和可读性。
8. 可以使用 numpy 的 vectorize() 方法,对函数进行向量化,以提高函数的执行速度。
定义代码generate_fibonacci_sequence
以下是定义生成斐波那契数列的 Python 代码:
```python
def generate_fibonacci_sequence(n):
"""
生成斐波那契数列前n项,返回一个列表
"""
sequence = [0, 1] # 初始化数列,前两项为0和1
for i in range(2, n):
sequence.append(sequence[i-1] + sequence[i-2]) # 计算下一项,并添加到数列中
return sequence
```
其中,`n` 表示要生成的斐波那契数列的项数。函数返回一个列表,包含前 `n` 项斐波那契数。
阅读全文