创建代码策略

策略说明

代码策略允许您使用Python代码实现更复杂的交易逻辑。您需要实现以下方法:

  • 必须实现的方法:
  • should_buy - 判断是否应该买入
  • should_sell - 判断是否应该卖出
  • max_positions - 定义最大持仓数量
  • is_sell_before_buy - 定义在同一个交易日是否应该先卖出后买入
  • 可选方法:
  • calculate_buy_amount - 计算买入数量
  • calculate_sell_amount - 计算卖出数量
  • needed_factors - 声明所需的因子列表
  • buy_price - 策略买入价格
  • sell_price - 策略卖出价格
关于因子数据

如果需要使用因子数据,请实现needed_factors方法,系统会加载这些因子,使它们在stock_data中可用。

下列基础列不需要在needed_factors中声明即可使用,包括: ['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close', 'vol', 'amount', 'pct_chg', 'up_limit', 'down_limit', 'turnover_rate', 'float_share', 'circ_mv', 'name']

策略代码
取消

以下是一个简单的策略代码示例,您可以参考或直接修改:

#买入价格 def buy_price(self, stock_data): return stock_data['close'][-1] #卖出价格 def sell_price(self, stock_data): return stock_data['close'][-1] #最大的持仓数量 def max_positions(self): return 3 #是否先卖出后买入 def is_sell_before_buy(self): return True # 返回策略所需的因子指标ID列表 def needed_factors(self) -> List[str]: # 如果不需要使用预先计算的因子,可以返回空列表 return ['close_sma_5d', 'close_sma_10d'] #判断是否应该买入 def should_buy(self, stock_data, position): """ Args: stock_data: 股票历史数据,pandas.DataFrame position: 当前持仓信息,字典 Returns: bool: 是否应该买入 """ # 至少需要2个交易日数据 if len(stock_data['close']) < 2: return False # 当5日均线上穿10日均线时买入 sma5_current = stock_data['close_sma_5d'][-1] sma5_previous = stock_data['close_sma_5d'][-2] sma10_current = stock_data['close_sma_10d'][-1] sma10_previous = stock_data['close_sma_10d'][-2] # 判断是否上穿 return sma5_previous < sma10_previous and sma5_current > sma10_current #判断是否应该卖出 def should_sell(self, stock_data, position): """ Args: stock_data: 股票历史数据,pandas.DataFrame position: 当前持仓信息,字典 Returns: bool: 是否应该卖出 """ # 至少需要2个交易日数据 if len(stock_data['close']) < 2: return False # 当5日均线下穿10日均线时卖出 sma5_current = stock_data['close_sma_5d'][-1] sma5_previous = stock_data['close_sma_5d'][-2] sma10_current = stock_data['close_sma_10d'][-1] sma10_previous = stock_data['close_sma_10d'][-2] # 判断是否下穿 cross_below = sma5_previous > sma10_previous and sma5_current < sma10_current # 判断是否盈利超过15% current_price = stock_data['close'][-1] buy_price = position['buy_price'] profit_pct = (current_price / buy_price - 1) * 100 profit_target = profit_pct > 15 #持股天数 holding_days = self.get_holding_days(stock_data, position) holding_days_target = holding_days > 10 # 满足任一条件则卖出 return cross_below or profit_target or holding_days_target # 可选:自定义买入数量计算方法 def calculate_buy_amount(self, cash, initial_cash, price, positions): # 按照剩余仓位,平均分配资金,并向下取整到100股的整数倍 return self.split_cash_by_positions(cash, price, positions) # 可选:自定义卖出数量计算方法 def calculate_sell_amount(self, position): # 默认全部卖出 return position.get('shares', 0)

注意:系统会自动导入必要的库,numpy 和 typing,您无需在代码中导入这些库。

请实现上述方法,系统会自动创建一个继承自BaseStrategy的类。