【backtrader保姆级教学】趋势选股策略

import pandas as pd
import talib
import backtrader as bt
from insight_python.com.insight import common
from insight_python.com.insight.query import *
from insight_python.com.insight.market_service import market_service
from datetime import datetime
import calendar
import numpy as np
# ************************************用户登录************************************
# 登陆
# user 用户名
# password 密码
def login():
    # 登陆前 初始化,没有密码可以访问进行自动化注册
    #https://findata-insight.htsc.com:9151/terminalWeb/#/signup
    user = "自己的账号"
    password = "自己的密码"
    common.login(market_service, user, password)

def data_loader():
    login()
    stock_list = get_all_stocks_info(listing_state="上市交易")['htsc_code']

    time_start_date = "2019-05-02 15:10:11"
    time_end_date = "2020-07-29 11:20:50"
    time_start_date = datetime.strptime(time_start_date, '%Y-%m-%d %H:%M:%S')
    time_end_date = datetime.strptime(time_end_date, '%Y-%m-%d %H:%M:%S')

    result = get_kline(htsc_code=stock_list.values.tolist(), time=[time_start_date, time_end_date],
                       frequency="daily", fq="pre")
    result.to_csv("all_stock_daily_kline_long.csv")

    # 获取沪深300的一年收益率
    benchmark = get_kline(htsc_code="399300.SZ", time=[time_start_date, time_end_date],
                       frequency="daily", fq="pre")
    benchmark.to_csv("benchmark.csv")

def trend_analyzer(close_all, high_all, low_all, volume_all, benchmark_ann_ret):
    """实现MM选股模型的逻辑,评估单只股票是否满足筛选条件
    Args:
        close(pd.Series): 股票收盘价,默认时间序列索引
        high_all:最高价
        low_all:最低价
        volume_all:成交量
        benchmark_ann_ret(float): 基准指数1年收益率,用于计算相对强弱
    """

    out_list = []
    for close_index, high_index, low_index, volume_index in zip(close_all.columns, high_all.columns, low_all.columns, volume_all.columns):
        close = close_all[close_index]
        high = high_all[high_index]
        low = low_all[low_index]
        volume = volume_all[volume_index]

        # 计算50,150,200日均线
        ema_50 = talib.EMA(close, 50).iloc[-1]
        ema_150 = talib.EMA(close, 150).iloc[-1]
        ema_200 = talib.EMA(close, 200).iloc[-1]

        # 收盘价的52周高点和52周低点
        high_52week = close.rolling(52 * 5).max().iloc[-1]
        low_52week = close.rolling(52 * 5).min().iloc[-1]

        # 短期指标,ROC 价格震荡百分比指数,小于0适合建仓
        roc = talib.ROC(close, 10).iloc[-1]

        # RSI - Relative Strength Index 相对强弱指数,50-80为推荐买入
        rsi 
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化NPC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值