取4个列表值,hongda,lvxiao,hongxiao,lvda。
有两条线,a绿线MA20,b红线MA60。
当线在a>b金叉到a< b死叉(绿色云)区间时,取a的最大值添加到(lvda)里,b的最小值添加到( hongxiao)里。
当线在a< b死叉到a
当a[-1]>lvda[-1] and b[-1]>hongda[-1]:
print(有个提醒)
当a[-1]
print(有个提醒)

# -*- coding: UTF-8 -*-
"""
@项目名称:python选股策略.py
@作   者:陆地起飞全靠浪
@创建日期:2022-08-04-15:42
"""

import akshare as ak
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from itertools import groupby

# plt.rcParams["font.sans-serif"] = ["/sdb1/数据/知识/字体/fzztk/4091_方正楷体_GBK.TTF"]  # 设置字体
# plt.rcParams["axes.unicode_minus"] = False  # 该语句解决图像中的“-”负号的乱码问题


def begin(kyg):
    resp_json = ak.stock_zh_a_hist(symbol=kyg, period="daily", start_date="20190301", end_date='20220729', adjust="")
    df = pd.DataFrame(resp_json)
    ma = df['收盘']
    a = ma.rolling(window=20).mean()
    b = ma.rolling(window=60).mean()

    a = list(a)
    b = list(b)
    # 画图并保存
    w = np.linspace(1, len(a), len(a))
    plt.plot(w, a, color='green')
    plt.plot(w, b, color='red')

    # 获取a大于等于b的区间
    index_lst = np.where(np.array(a) - np.array(b) >= 0)[0]
    continue_list_a大于b = []
    fun = lambda x: x[1] - x[0]
    for k, g in groupby(enumerate(index_lst), fun):
        continue_index = [v for i, v in g]
        continue_list_a大于b.append(continue_index)
    # 获取a小于等于b的区间
    index_lst = np.where(np.array(a) - np.array(b) <= 0)[0]
    continue_list_a小于b = []
    fun = lambda x: x[1] - x[0]
    for k, g in groupby(enumerate(index_lst), fun):
        continue_index = [v for i, v in g]
        continue_list_a小于b.append(continue_index)
    # 当线在a>b金叉到a< b死叉(绿色云)区间时,
    # 取a的最大值添加到(lvda)里,b的最小值添加到( hongxiao)里。
    lvda = []
    hongxiao = []
    for ab in continue_list_a大于b:
        s, e = ab[0], ab[-1] + 1  # 区间起止点
        # 取a的最大值添加到(lvda)里
        tmp_a = a[s:e]  # 区间值
        a_max = max(tmp_a)
        sw_a = s + np.argmax(tmp_a)  # a最大位置横轴
        lvda.append(a_max)
        plt.plot(sw_a, a_max + 0.15, 'v', color='b')
        plt.text(sw_a, a_max + 0.2, f"{a_max:.2f}", fontsize=12, color="b")
        # b的最小值添加到( hongxiao)里
        tmp_b = b[s:e]
        b_min = min(tmp_b)
        sw_b = s + np.argmin(tmp_b)  # b最小位置横轴
        hongxiao.append(b_min)
        plt.plot(sw_b, b_min - 0.15, '^', color='y')
        plt.text(sw_b, b_min - 0.2, f"{b_min:.2f}", fontsize=12, color="y")

    # 当线在a< b死叉到a<b金叉(红色云)区间时,
    # 取b的最大值添加到(hongda)里,a的最小值添加到(lvxiao)里。
    hongda = []
    lvxiao = []
    for ab in continue_list_a小于b:
        s, e = ab[0], ab[-1] + 1  # 区间起止点
        # a的最小值添加到(lvxiao)里
        tmp_a = a[s:e]  # 区间值
        a_min = min(tmp_a)
        sw_a = s + np.argmin(tmp_a)  # a最小位置横轴
        lvxiao.append(a_min)
        plt.plot(sw_a, a_min - 0.15, '^', color='g')
        plt.text(sw_a, a_min - 0.2, f"{a_min:.2f}", fontsize=12, color="g")
        # 取b的最大值添加到(hongda)里
        tmp_b = b[s:e]
        b_max = max(tmp_b)
        sw_b = s + np.argmax(tmp_b)  # b最小位置横轴
        hongda.append(b_max)
        plt.plot(sw_b, b_max + 0.15, 'v', color='r')
        plt.text(sw_b, b_max + 0.2, f"{b_max:.2f}", fontsize=12, color="r")


    plt.show()
    if a[-1] > b[-1]:
        """
        当a[-1]>lvda[-1] and b[-1]>hongda[-1]:
        print(有个提醒)
        当a[-1]
        print(有个提醒)
        """

        return True


gpc = []
gp = ['000001', '000002', '000004', '000005', '000006', '000007', '000008', '000009', '000010', '000011', '000012',
      '000014', '000016', '000017', '000019']
for bb in gp:
    try:
        if begin(bb):
            gpc.append(bb)
            print(bb)
    except:
        print("cuowu" + bb)
print(gpc)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐