python判断神奇九转-akshare

in 笔记 with 1 comment

最近一段时间开始想试着了解一下量化交易方面的策略,近期会做一些相关的记录
AKShare 一个开源财经数据接口,我们可以通过他来获取一些需要的股票数据

import akshare as ak
import sys
import requests
import datetime


def stock_is_trade_date(query_date):
    """
    是否为 交易日
    :param query_date: 日期,如 2020-10-01
    :return: 1:是,0:不是
    """
    weekday = query_date.isoweekday()
    hour = query_date.hour
    print('时间:={0} 星期:={1} 小时:={2}'.format(query_date, weekday, hour))
    if weekday <= 5 and hour >= 9 and hour < 15:
        return 1
    else:
        print('非交易时间')
        return 0


def main(stock_code):
    if stock_code is not None:
        stock_zh_a_minute_df = ak.stock_zh_a_minute(symbol=stock_code, period='5', adjust="qfq")

        # 排序 取最近20个分时的记录 来判断是否满足 神奇九转的规则
        data = stock_zh_a_minute_df.sort_values(by='day', ascending=False).iloc[:20]

        data_list = data.values.tolist()

        is_up = True
        is_down = True

        for index, item in enumerate(data_list[:9]):
            # print('时间:{0} ,收盘价:{1},对应前第四个分时的收盘价:{2}'.format(item[0],item[4],data_list[index+4][4]))
            # 是否连续九个交易分时都比前面第4交易的收盘价低 
            if float(item[4]) < float(data_list[index + 4][4]):
                is_up = False
            # 是否连续九个交易分时都比前面第4交易的收盘价高
            if float(item[4]) > float(data_list[index + 4][4]):
                is_down = False

        # 输出结果
        # 假如触底或触顶
        if is_up or is_down:
            print('分时{0}满足神奇九转条件 {1} 价格:{2}<br/>'.format(item[0], '触顶' if is_up else '触底', item[4]))
            # 在这里你可以通过一些第三方手段来通知自己 比如server酱之类的


def is_demark_dequential(stock_data, date):
    # 判断当前时间节点是否满足神奇九转
    is_up = True
    is_down = True
    stock_data = stock_data[stock_data['day'] < date].sort_values(by='day', ascending=False).iloc[:13].values.tolist()

    if (len(stock_data) < 13):
        return False, False

    for index, item in enumerate(stock_data[:9]):
        # print('时间:{0} ,收盘价:{1},对应前第四个分时的收盘价:{2}'.format(item[0],item[4],stock_data[index+4][4]))
        # 是否连续九个交易分时都比前面第4交易的收盘价低 
        if float(item[4]) - 0.001 < float(stock_data[index + 4][4]):
            is_up = False
        # 是否连续九个交易分时都比前面第4交易的收盘价高
        if float(item[4]) + 0.001 > float(stock_data[index + 4][4]):
            is_down = False
    return is_up, is_down


if __name__ == "__main__":
    # 从命令行获取股票代码 如 python akshare01.py SH513050
    print('订阅代码' + sys.argv[1:][0])
    if stock_is_trade_date(datetime.datetime.now()):
        main(sys.argv[1:][0])
Responses
  1. 写的很好,还有更多关于股票的研究吗

    Reply