text: from rqalpha.apis import *
  
  import talib
  
  
  # 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
  def init(context):
  
      # 选择我们感兴趣的股票
      context.s1 = "000001.XSHE"
      context.s2 = "601988.XSHG"
      context.s3 = "000068.XSHE"
      context.stocks = [context.s1, context.s2, context.s3]
  
      context.TIME_PERIOD = 14
      context.HIGH_RSI = 85
      context.LOW_RSI = 30
      context.ORDER_PERCENT = 0.3
  
  
  # 你选择的证券的数据更新将会触发此段逻辑，例如日或分钟历史数据切片或者是实时数据切片更新
  def handle_bar(context, bar_dict):
      # 开始编写你的主要的算法逻辑
  
      # bar_dict[order_book_id] 可以拿到某个证券的bar信息
      # context.portfolio 可以拿到现在的投资组合状态信息
  
      # 使用order_shares(id_or_ins, amount)方法进行落单
  
      # TODO: 开始编写你的算法吧！
  
      # 对我们选中的股票集合进行loop，运算每一只股票的RSI数值
      for stock in context.stocks:
          # 读取历史数据
          prices = history_bars(stock, context.TIME_PERIOD+1, '1d', 'close')
  
          # 用Talib计算RSI值
          rsi_data = talib.RSI(prices, timeperiod=context.TIME_PERIOD)[-1]
  
          cur_position = get_position(stock).quantity
          # 用剩余现金的30%来购买新的股票
          target_available_cash = context.portfolio.cash * context.ORDER_PERCENT
  
          # 当RSI大于设置的上限阀值，清仓该股票
          if rsi_data > context.HIGH_RSI and cur_position > 0:
              order_target_value(stock, 0)
  
          # 当RSI小于设置的下限阀值，用剩余cash的一定比例补仓该股
          if rsi_data < context.LOW_RSI:
              logger.info("target available cash caled: " + str(target_available_cash))
              # 如果剩余的现金不够一手 - 100shares，那么会被ricequant 的order management system reject掉
              order_value(stock, target_available_cash)