max_hold_day = 20 # 最大持股周期 min_profit_rate = 0.12 # 设置未来20天最小盈利点 loss_limit = -0.07 + 0.01 # 设置未来20天的止损点,如果我们止损点是7个点,标数据的时候超过6个点就标记为0for i in range(max_hold_day): print('begin shift %d days' % (i + 1)) tmp_df = stock_info[['ts_date_id', 'high', 'low']] tmp_df = tmp_df.rename(columns={'high': 'high_shift_{}'.format(i + 1), 'low': 'low_shift_{}'.format(i + 1)}) use_col.append('high_shift_{}'.format(i + 1)) use_col.append('low_shift_{}'.format(i + 1)) tmp_df['ts_date_id'] = tmp_df['ts_date_id'] + i + 1 stock_info = stock_info.merge(tmp_df, how='left', on='ts_date_id') # 假设以当天开盘价买入 for i in range(max_hold_day): stock_info['high_shift_{}'.format(i + 1)] = (stock_info['high_shift_{}'.format(i + 1)] - stock_info['open']) / \ stock_info['open'] stock_info['low_shift_{}'.format(i + 1)] = (stock_info['low_shift_{}'.format(i + 1)] - stock_info['open']) / \ stock_info['open'] tmp_array = stock_info[use_col].values stock_info['label_max'] = 0 stock_info['label_min'] = 0 stock_info['label_final'] = 0 for i in range(max_hold_day): # 先判断是否到止损 tmp_col = 'low_shift_' + str(i + 1) idx = stock_info[tmp_col] <= loss_limit stock_info.loc[idx, 'label_min'] = 1 # 再判断是否到最小利润点 tmp_col = 'high_shift_' + str(i + 1) idx = stock_info[tmp_col] >= min_profit_rate stock_info.loc[idx, 'label_max'] = 1 # 如果不到止损点并且 到了最小利润点, 标签为1 idx = (stock_info['label_min'] == 0) & (stock_info['label_max'] == 1) & (stock_info['label_final'] == 0) stock_info.loc[idx, 'label_final'] = 1这里为什么不直接用未来每天的最高价和最低价与止盈点止损点比较而是要先将最高价和最低价与开盘价进行变化率计算?
时间: 2024-04-28 21:21:07 浏览: 10
这段代码是针对股票数据进行的,其中涉及到了股票的买入和卖出操作。假设我们以当天开盘价买入一只股票,那么未来每一天的最高价和最低价相对于我们买入价的变化率可以反映出股票的涨跌情况。通过计算每天的变化率,我们可以得到未来20天内股票价格的变化情况。然后,我们可以将这些变化率与设定的止盈点和止损点进行比较,以确定是否需要卖出股票,从而判断标签。因此,我们需要将每天的最高价和最低价与开盘价进行变化率计算。
相关问题
已知初始值的范围为Min_pump_zcjj = 26 Max_pump_zcjj = 51 # Y坐标约束条件 Min_pump_bdljd = 26 Max_pump_bdljd = 51 # 靶点位置约束条件 Min_pump_bdwz = 0 Max_pump_bdwz = 1 # 射孔厚度约束条件 Min_pump_skhd = 1 Max_pump_skhd = 5 bounds = np.array([[Min_pump_zcjj, Max_pump_zcjj], [Min_pump_bdljd, Max_pump_bdljd],[Min_pump_bdwz, Max_pump_bdwz],[Min_pump_skhd, Max_pump_skhd]])
好的,那么您可以按照如下方式修改代码:
```python
import cma
import numpy as np
def optimize():
# 目标函数
def objective_function(params):
bd_X, bd_Y, x3, x4 = params
# 这里用随机生成的值代替目标函数的输出
return np.random.random()
# 设置初始值和范围
x0 = [38.5, 38.5, 0.5, 3.0]
sigma0 = 0.2
Min_pump_zcjj = 26
Max_pump_zcjj = 51
Min_pump_bdljd = 26
Max_pump_bdljd = 51
Min_pump_bdwz = 0
Max_pump_bdwz = 1
Min_pump_skhd = 1
Max_pump_skhd = 5
bounds = np.array([[Min_pump_zcjj, Max_pump_zcjj], [Min_pump_bdljd, Max_pump_bdljd],[Min_pump_bdwz, Max_pump_bdwz],[Min_pump_skhd, Max_pump_skhd]])
# 运行优化算法
res = cma.fminbound(objective_function, x0, sigma0, bounds)
# 输出最优值和最优解
print(f"最优解:{res[0]}")
print(f"最优值:{res[1]}")
if __name__ == "__main__":
optimize()
```
在这个示例代码中,我们使用了 `cma.fminbound()` 函数进行优化,其中 `objective_function` 函数是我们要优化的目标函数,输入为一组参数 `params`,输出为目标函数的值。`x0` 是优化的初始值,`sigma0` 是初始步长,`bounds` 是参数范围。最终输出最优解和最优值。请根据实际情况将 `objective_function` 函数替换为您的目标函数,然后设置相应的参数范围。
def main(): # X坐标束条件 Min_pump_zcjj = 26 Max_pump_zcjj = 51 # Y坐标约束条件 Min_pump_bdljd = 26 Max_pump_bdljd = 51 # 靶点位置约束条件 Min_pump_bdwz = 0 Max_pump_bdwz = 1 # 射孔厚度约束条件 Min_pump_skhd = 1 Max_pump_skhd = 5 bounds = np.array([[Min_pump_zcjj, Max_pump_zcjj], [Min_pump_bdljd, Max_pump_bdljd],[Min_pump_bdwz, Max_pump_bdwz],[Min_pump_skhd, Max_pump_skhd]]) # 定义你的优化时间限制,输入是一个数值,表示你想要优化的最长时间(秒) timeout = 30 x0 = np.mean(bounds, axis=1) # 初始向量 sigma0 = 1.0 # 初始标准差 es = cma.CMAEvolutionStrategy(x0, sigma0)
这段代码缺少了一些结束括号和换行符,我补充一下:
```python
def main():
# X坐标束条件
Min_pump_zcjj = 26
Max_pump_zcjj = 51
# Y坐标约束条件
Min_pump_bdljd = 26
Max_pump_bdljd = 51
# 靶点位置约束条件
Min_pump_bdwz = 0
Max_pump_bdwz = 1
# 射孔厚度约束条件
Min_pump_skhd = 1
Max_pump_skhd = 5
bounds = np.array([[Min_pump_zcjj, Max_pump_zcjj], [Min_pump_bdljd, Max_pump_bdljd],
[Min_pump_bdwz, Max_pump_bdwz], [Min_pump_skhd, Max_pump_skhd]])
# 定义你的优化时间限制,输入是一个数值,表示你想要优化的最长时间(秒)
timeout = 30
x0 = np.mean(bounds, axis=1) # 初始向量
sigma0 = 1.0 # 初始标准差
es = cma.CMAEvolutionStrategy(x0, sigma0)
```
在上述代码中,我们定义了四个变量`Min_pump_zcjj`、`Max_pump_zcjj`、`Min_pump_bdljd`、`Max_pump_bdljd`、`Min_pump_bdwz`、`Max_pump_bdwz`、`Min_pump_skhd`、`Max_pump_skhd`,用于表示X坐标、Y坐标、靶点位置和射孔厚度的约束条件。然后,我们使用`np.array`函数将这些约束条件合并成一个数组`bounds`,用于表示优化变量的范围。
接着,我们定义了一个变量`timeout`,用于表示优化的最长时间。最后,我们使用`np.mean`函数计算初始向量`x0`,并使用`cma.CMAEvolutionStrategy`函数创建一个优化器对象`es`。