打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于DMA指标的股票交易策略实现及Easytrader库的应用
userphoto

2023.05.23 湖北

关注

DMA指标是一种趋势跟踪指标,它可以帮助我们判断股价的趋势以及股票的买卖时机。本文将使用Easytrader库,为大家介绍一种基于DMA指标的股票交易策略。

首先,我们需要导入所需的库:

import easytraderimport pandas as pdimport talibimport time

接下来,我们需要连接到我们的券商账户。这里以同花顺为例:

user = easytrader.use('ths')user.prepare('ths.json')

接下来,我们需要定义我们的交易策略:

code = '600519' # 股票代码ma_period = 20 # 均线周期dm_period = 14 # DMA指标周期buy_threshold = 0.3 # DMA指标买入阈值sell_threshold = -0.3 # DMA指标卖出阈值unit = 100 # 买入/卖出单位

然后,我们定义一个函数来获取股票历史数据:

def get_stock_data(code, ktype='D', start=None, end=None):    df = pd.DataFrame(user.get_history_transaction_data(code, start_date=start, end_date=end))    df['datetime'] = pd.to_datetime(df['成交时间'])    df.set_index('datetime', inplace=True)    df.drop('成交时间', axis=1, inplace=True)    df = df[['成交数量', '成交均价']]    df.rename(columns={'成交数量': 'volume', '成交均价': 'close'}, inplace=True)    df['open'] = df['close']    df['high'] = df['close']    df['low'] = df['close']    df = df.resample(ktype).apply({'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last', 'volume': 'sum'})    df.dropna(inplace=True)    return df

接着,我们定义一个函数来计算DMA指标并产生交易信号:

def generate_signals(df, ma_period, dm_period, buy_threshold, sell_threshold): df['high_ma'] = talib.SMA(df['high'], ma_period) df['low_ma'] = talib.SMA(df['low'], ma_period) df['dm_plus'] = talib.PLUS_DI(df['high'], df['low'], df['close'], dm_period) df['dm_minus'] = talib.MINUS_DI(df['high'], df['low'], df['close'], dm_period) df.dropna(inplace=True) df['signal'] = 0 for i in range(1, len(df)): if df['dm_plus'][i] > df['dm_minus'][i] and df['dm_plus'][i-1] <= df['dm_minus'][i-1]: df['signal'][i] = 1 elif df['dm_plus'][i] < df['dm_minus'][i] and df['dm_plus'][i-1] >= df['dm_minus'][i-1]: df['signal'][i] = -1 df['signal'] *= ((df['close'] - df['low_ma']) / df['close']) # 加入离均差因素 df['signal'].ffill(inplace=True) df['signal'].iloc[:ma_period] = 0 df['buy'] = (df['signal'] >= buy_threshold) df['sell'] = (df['signal'] <= sell_threshold) return df[['buy', 'sell', 'close']]

最后,我们定义主函数,用于实现交易逻辑:

def run(code, ma_period, dm_period, buy_threshold, sell_threshold, unit):    while True:        df = get_stock_data(code)        signals = generate_signals(df, ma_period, dm_period, buy_threshold, sell_threshold)        if signals['buy'][-1]:            user.buy(code, price=df['close'][-1], amount=unit)            print('买入', code, unit, '股')        elif signals['sell'][-1]:            user.sell(code, price=df['close'][-1], amount=unit)            print('卖出', code, unit, '股')        time.sleep(60)if __name__ == '__main__':    run
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
使用TRIX指标的交易策略:长期买进和卖出信号的秘密
粘合突破主图之突破选股指标公式源码编程思路破译及成功率回测数据
通达信妖股起爆主图指标公式
通达信 强者恒强 副图选股指标源码
通达信主力操盘线设置步骤
通达信买卖天王抄底指标公式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服