ADL指标全称为Accumulation/Distribution Line,它是区间累计/分布线,用于判断某个期间内价格的趋势与变化。它的计算方法是通过成交量和价格的比较来确定资金的流入流出情况,用于分析供需关系,判定买卖时机。

下面是基于easytrader库的ADL指标交易策略:
1.引入必要的模块和变量
import easytrader
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
user = easytrader.use('ht')
user.prepare('ht.json')
code = '600519'
start_date = '20180101'
end_date = '20210523'
2.获取历史股票数据

df = user.get_history_transaction_data(code, start=start_date, end=end_date)
df.index = pd.to_datetime(df['成交时间'])
df = df.sort_index()
close_prices = df['成交价格']
volume = df['成交数量']
3.定义ADL指标计算函数

def ADL(close_prices, volume):
scaler = MinMaxScaler(feature_range=(-1, 1))
scaled_prices = scaler.fit_transform(np.array(close_prices).reshape(-1, 1)).flatten()
scaled_volume = scaler.fit_transform(np.array(volume).reshape(-1, 1)).flatten()
mfVolume = scaled_volume * ((scaled_prices[:-1] - scaled_prices[1:]) / scaled_prices[1:])
adl = np.zeros_like(scaled_prices)
adl[0] = mfVolume[0]
for i in range(1, len(adl)):
adl[i] = adl[i-1] + mfVolume[i]
return scaler.inverse_transform(np.array(scaled_prices).reshape(-1, 1)).flatten(), adl
4.计算ADL指标及买卖信号

close, adl = ADL(close_prices, volume)
signal = (adl - np.min(adl)) / (np.max(adl) - np.min(adl)) > 0.5
5.根据买卖信号进行交易

hold = False
for i in range(len(signal)):
price = close[i]
if signal[i] and not hold:
user.buy(code, price, 100)
hold = True
elif not signal[i] and hold:
user.sell(code, price, 100)
hold = False
以上代码为一个简单的ADL指标交易策略,其核心思想是根据ADL指标的信号进行交易,该指标通过成交量和价格的比较来确定资金的流入流出情况,对于本次开发不足或者存在问题,欢迎补充和完善。