EMV指标是一种用于技术分析的指标,可以帮助交易者判断市场的买卖压力。在这篇文章中,我们将编写一个使用EMV指标的交易策略,并使用Python中的easytrader库实现自动交易。
首先,我们需要安装easytrader库。在命令行中输入以下命令来安装:
pip install easytrader
接下来,我们需要下载并加载历史股票数据。可以使用tushare库来获取历史数据。在命令行中输入以下命令来安装tushare:
pip install tushare
在代码中,我们将导入tushare库并使用它来获取某个股票的历史数据:
import tushare as ts
df = ts.get_k_data('600519', start='2020-01-01', end='2023-01-01')
df = df.set_index('date')
接下来,我们将编写计算EMV指标的代码。EMV指标基于成交量和价格变动的比率来计算。它可以帮助我们确定市场中的买卖压力。在这个策略中,我们将使用EMV指标的30日移动平均线作为信号线。
def EMV(df: pd.DataFrame, signal_period: int = 30):
mid_price = (df['high'] + df['low']) / 2.0
emv = ((mid_price - mid_price.shift(1)) * (df['volume'] / ((df['high'] - df['low'])))).sum() / df['volume'].rolling(window=14).sum().shift(1)
emv_ma = emv.rolling(window=signal_period).mean()
return emv, emv_ma
最后,我们将编写自动交易代码。这个策略将在每个交易日的开盘时买入,并在信号线上穿过价格线的时候卖出。
from easytrader import *
import pandas as pd
USER = 'xxxxxxxx' # 券商账户
PASSWORD = 'xxxxxxxx' # 券商密码
MONITOR_CODES = ['600519'] # 监控股票
def main():
# 登录券商
user = use('ths')
user.prepare(user='xxxxxx', moni=True)
user.connect()
print(user)
while True:
# 获取当前时间
now = datetime.now()
# 判断当前时间是否为交易日
if is_trade_day(now):
# 获取当天交易数据
df = ts.get_k_data('600519', start=now.strftime('%Y-%m-%d'), end=now.strftime('%Y-%m-%d'))
# 计算EMV指标
emv, emv_ma = EMV(df)
# 获取当前价格
current_price = df.iloc[-1]['close']
# 判断是否需要买入
if emv_ma[-1] > current_price:
user.buy('600519', price=current_price, amount=100)
# 判断是否需要卖出
elif emv_ma[-1] < current_price:
user.sell('600519', price=current_price, amount=100)
# 每分钟检查一次
time.sleep(60)
if __name__ == '__main__':
main()
说明: