# 添加一个计算过去K线波动率的函数,并在主函数中增加相关逻辑。 # 计算过去K线波动率 def calculate_kline_volatility(close_prices, period): """ 计算K线波动率 :param close_prices: 收盘价序列 :param period: 计算波动率所用的时间窗口大小 :return: 价格波动率 """ try: # 计算每个周期内价格变化率 price_returns = np.abs(np.diff(close_prices)) / close_prices[:-1] # 计算波动率 volatility = np.sqrt(np.sum(price_returns ** 2) / (period - 1)) * np.sqrt(period) except Exception as e: # 发生错误时返回0 print(f'计算波动率时发生错误: {e}') volatility = 0.0 # 返回波动率 return volatility # 实例化OKXTrader类 trader = OKXTrader(api_key, secret_key, passphrase) # 获取历史K线数据 times, high_prices, low_prices, close_prices = trader.get_historical_klines(symbol, interval, limit=200) # 计算过去K线波动率 kline_volatility = calculate_kline_volatility(close_prices, period=20) # 如果波动率小于0.2%,则不开仓交易,直到波动率大于这一水平再进行接下来的开仓操作 if kline_volatility > 0.002: # 计算超级趋势指标 upper_bound, lower_bound, buy_signal, sell_signal = trader.calculate_super_trend(close_prices, period=10, multiplier=3) # 执行交易策略 if buy_signal or sell_signal: # 获取最新成交价作为下单价格 price = float(trader.future_api.get_last_trade(symbol)['price']) # 计算下单数量 account_data = trader.account_api.get_account_info() available_balance = float(account_data['data'][0]['details']['available_balance']) quantity = min(quantity, int(available_balance / price)) # 执行交易策略并打印订单结果 order_result = trader.execute_trade_strategy(symbol, quantity, price, buy_signal, sell_signal, stop_loss_pct, take_profit_pct) print(f'执行交易策略,订单结果: {order_result}') else: print('没有发出买入或卖出信号') else: print('过去K线波动率小于0.2%,不开仓交易')