以下是Python代码实现ADVOL指标交易策略,使用的是easytrader库:
import easytraderfrom jqdatasdk import *auth(账号, 密码)# 初始化EasyTraderuser = easytrader.use(ht)# 连接海通APIuser.connect(rC:\htzq_client\xiadan.exe)# 选定交易的证券user.switch(证券代码)# 选定交易的交易市场user.set_exchange(交易市场)# 获取历史K线数据df = get_price(证券代码, end_date=今天日期, count=300, frequency=1d, fields=[open, high, low, close, volume])# 定义ADVOL指标计算方法def advol(close, low, high, volume):advol = ((close - low) - (high - close)) * volume / 10000 / (high - low)return advol# 计算ADVOL指标,并添加至数据集中df[advol] = advol(df[close], df[low], df[high], df[volume])# 添加30日平均线和100日平均线df[ma1] = df[advol].rolling(30).mean()df[ma2] = df[ma1].rolling(100).mean()# 生成交易信号列表signals = []for i in range(1, len(df)):# 1.股价一波比一波高,ADVOL一波比一波低,两者产生牛背离时,为卖出讯号if (df[close][i] > df[close][i-1]) and (df[advol][i] < df[advol][i-1]):signals.append(SELL)# 2.股价一波比一波低,ADVOL一波比一波高,两者产生熊背离时,为买进讯号elif (df[close][i] < df[close][i-1]) and (df[advol][i] > df[advol][i-1]):signals.append(BUY)# 3.ADVOL向上交叉其30日平均线时,视为买进讯号elif (df[advol][i] > df[ma1][i]) and (df[advol][i-1] < df[ma1][i-1]):signals.append(BUY)# 4.ADVOL向下交叉其30日平均线时,视为卖出讯号elif (df[advol][i] < df[ma1][i]) and (df[advol][i-1] > df[ma1][i-1]):signals.append(SELL)else:signals.append(HOLD)# 将交易信号列表添加至数据集中df[signals] = signals# 计算实际交易信号,用持仓标记来避免短期内重复交易positions = [HOLD]for i in range(1, len(df)):if (df[signals][i] == BUY) and (positions[-1] != BUY):positions.append(BUY)elif (df[signals][i] == SELL) and (positions[-1] != SELL):positions.append(SELL)else:positions.append(HOLD)# 进行实际交易操作for i in range(1, len(df)):if positions[i] == BUY and user.position[证券代码] == 0:# 买入user.buy(证券代码, price=df[close][i], amount=100)elif positions[i] == SELL and user.position[证券代码] != 0:# 卖出user.sell(证券代码, price=df[close][i], amount=100)以上是一个简单的ADVOL指标交易策略,仅供参考。实际策略需要根据不同的市场情况进行细化和调整。建议在使用该策略前先进行模拟交易,以验证其盈利能力