金融量化项目案例 -- 双均线策略制定

金融,量化,项目,案例,均线,策略,制定 · 浏览次数 : 3

小编点评

**如何进行股票市场分析并获取历史行情数据?** **步骤 1:安装必要的库** * 安装 pandas 库:`pip install pandas` * 安装 matplotlib 库:`pip install matplotlib` **步骤 2:获取股票历史数据** * 从免费数据网站(例如 Yahoo Finance 或 Google Finance)中下载股票数据。 * 使用 pandas 库读取数据并将其存储在 DataFrame 中。 **步骤 3:创建均线图** * 创建一个 DataFrame 并添加一个日期列。 * 计算 5日均线和 60日均线。 * 使用 matplotlib 库绘制均线图。 **步骤 4:分析金叉和死叉** * 找出两根线,一根为短期指标线,另一根为长期指标线。 * 金叉:当短期指标线方向拐头向上,且穿过了长期指标线时。 * 死叉:当短期指标线方向拐头向下,且穿过了长期指标线时。 **步骤 5:计算收益率** * 估算剩余股票的价值。 * 计算最终一天的收益率。 **示例代码** ```python import pandas as pd import matplotlib.pyplot as plt # 加载股票数据 data = pd.read_csv('maotai.csv') # 计算 5日和 60日均线 df['date'] = pd.to_datetime(data['date']) ma5 = df['close'].rolling(5).mean() ma30 = df['close'].rolling(30).mean() # 创建均线图 plt.plot(df['date'], ma5, label='5日均线') plt.plot(df['date'], ma30, label='60日均线') plt.legend() plt.show() ``` **注意:** * 该代码假设您从 2010 年 1 月 1 日开始炒股。 * 您可以根据自己的风险承受能力调整持股票的数量。 * 股票市场具有风险,投资前请进行充分的研究。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

开发环境

  • anaconda
    • 集成环境:集成好了数据分析和机器学习中所需要的全部环境
    • 安装目录不可以有中文和特殊符号
  • jupyter
    • anaconda提供的一个基于浏览器的可视化开发工具

使用tushare包获取某股票的历史行情数据

!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tushare
import tushare as ts
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
df = pd.read_csv('./maotai.csv').drop(labels='Unnamed: 0',axis=1)
df

# 将date列转为时间序列且将其作为源数据的行索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date',inplace=True)
df.head()

计算该股票历史数据的5日均线和60日均线

  • 什么是均线?
    • 对于每一个交易日,都可以计算出前N天的移动平均值,然后把这些移动平均值连起来,成为一条线,就叫做N日移动平均线。移动平均线常用线有5天、10天、30天、60天、120天和240天的指标。
      • 5天和10天的是短线操作的参照指标,称做日均线指标;
      • 30天和60天的是中期均线指标,称做季均线指标;
      • 120天和240天的是长期均线指标,称做年均线指标。
    • 均线计算方法:MA=(C1+C2+C3+...+Cn)/N C:某日收盘价 N:移动平均周期(天数)
# df['close'].rolling(5)  依次取出第一个“前五天”、第二个“前五天”...
# df['close'].rolling(5).mean()  计算均值
ma5 = df['close'].rolling(5).mean()
ma30 = df['close'].rolling(30).mean()
ma5
date
2001-08-27         NaN
2001-08-28         NaN
2001-08-29         NaN
2001-08-30         NaN
2001-08-31    -162.504
                ...   
2023-09-22    1825.506
2023-09-25    1826.142
2023-09-26    1823.954
2023-09-27    1821.954
2023-09-28    1821.986
Name: close, Length: 5289, dtype: float64

可视化历史数据的收盘价和两条均线

import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(ma5[50:180])
plt.plot(ma30[50:180])

[<matplotlib.lines.Line2D at 0x1f3c9adc610>]

分析输出所有金叉日期和死叉日期

  • 股票分析技术中的金叉和死叉,可以简单解释为:
    • 分析指标中的两根线,一根为短时间内的指标线,另一根为较长时间的指标线。
    • 如果短时间的指标线方向拐头向上,并且穿过了较长时间的指标线,这种状态叫“金叉”;
    • 如果短时间的指标线方向拐头向下,并且穿过了较长时间的指标线,这种状态叫“死叉”;
    • 一般情况下,出现金叉后,操作趋向买入;死叉则趋向卖出。当然,金叉和死叉只是分析指标之一,要和其他很多指标配合使用,才能增加操作的准确性。
# 过滤NaN值
ma5 = ma5[30:]
ma30 = ma30[30:]
s1 = ma5 < ma30
s2 = ma5 > ma30
df = df[30:]
death_ex = s1 & s2.shift(1)  # 判定死叉的条件 F -> T
df.loc[death_ex]  # 死叉对应的行数据
death_date = df.loc[death_ex].index
golden_ex = ~(s1 | s2.shift(1))  # 判定金叉的条件 T -> F
golden_date = df.loc[golden_ex].index  # 金叉的时间

需求

​============================================
如果我从假如我从2010年1月1日开始,初始资金为100000元,金叉尽量买入,死叉全部卖出,则到今天为止,我的炒股收益率如何?
============================================
  • 分析:
    • 买卖股票的单价使用开盘价
    • 买卖股票的时机
    • 最终手里会有剩余的股票没有卖出去
      • 会有。如果最后一天为金叉,则买入股票。估量剩余股票的价值计算到总收益。
        • 剩余股票的单价就是用最后一天的收盘价。
s1 = Series(data=1,index=golden_date)  # 1作为金叉的标识
s2 = Series(data=0,index=death_date)  # 0作为死叉的标识

s = s1.append(s2)
s = s.sort_index()  # 存储的是金叉和死叉对应的时间
s = s['2010':'2020']  # 存储的是金叉和死叉对应的时间
first_money = 100000  # 本金,不变
money = first_money  # 可变的,买股票花的钱和卖股票收入的钱都从该变量中进行操作
hold = 0  # 持有股票的数量(股数:100股=1手)

for i in range(0,len(s)):  # i表示的s这个Series中的隐式索引
    # s[i] = 0 (死叉:卖) 
    # s[i] = 1(金叉:买)
    if s[i] == 1:  # 金叉的时间
        # 基于100000的本金尽可能多的去买入股票
        # 获取股票的单价(金叉时间对应的行数据中的开盘价)
        time = s.index[i]  # 金叉的时间
        p = df.loc[time]['open']  # 股票的单价
        hand_count = money // (p*100)  # 使用100000最多买入多少手股票
        hold = hand_count * 100  # 买股票的支数
        money -= (hold * p)  # 将买股票花的钱从money中减去
    else:
        # 将买入的股票卖出去        
        # 找出卖出股票的单价
        death_time = s.index[i]
        p_death = df.loc[death_time]['open']  # 卖股票的单价
        money += (p_death * hold)  # 卖出的股票收入加入到money
        hold = 0

# 如何判定最后一天为金叉还是死叉
last_money = hold * df['close'][-1] #剩余股票的价值

# 总收益
# >0  赚钱
# <0  亏损
money + last_money - first_money
-22684925.799999997

与金融量化项目案例 -- 双均线策略制定相似的内容:

金融量化项目案例 -- 双均线策略制定

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 使用tushare包获取某股票的历史

金融量化项目案例 -- 股票分析

博客地址:https://www.cnblogs.com/zylyehuo/ 股票分析 使用tushare包获取某股票的历史行情数据。 输出该股票所有收盘比开盘上涨3%以上的日期。 输出该股票所有开盘比前日收盘跌幅超过2%的日期。 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所

如何使用Tushare+ Backtrader进行股票量化策略回测

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 典型股票量化回测流程 典型的股票量化策略回测流程包括以下几个步骤: 数据获取:首先需要获取所需的股票市场数据,包括股票价格、交易量、财务数据等。这些数据可以从金融数据供应商、交易所、财经网站或者专门的数据

算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 不要轻易使用 For 循环 For 循环,老铁们在编程中经常用到的一个基本结构,特别是在处理列表、字典这类数据结构时。但是,这东西真的是个双刃剑。虽然看起来挺直白,一用就上手,但是,有时

金融科技 DevOps 的最佳实践

随着软件技术的发展,越来越多的企业已经开始意识到 DevOps 文化的重要价值。DevOps 能够消除改变公司业务开展方式,并以更快的速度实现交付,同时创建迭代反馈循环以实现持续改进。而对于金融科技(FinTech)行业来说,拥有一套企业量身定制的 DevOps 流程变得至关重要。因为 FinTec

互动玩法任务平台介绍

任务平台是科技内各业务方开展互动玩法的中心化平台,支撑科技内拉新、促活、交易等业务场景,包含基础任务、基于任务的通用活动玩法和业务投放能力。提供了任务玩法的创建、投放、曝光、完成等全生命周期的精细化管理,打造了基于任务的裂变、时间轴等通用活动玩法的规则化运营,致力于提升在多场景、多玩法、多频次的业务投放能力。任务中心主要战场是金融APP,目前日均500W的完成量,月UV100W,大促期间日完成量达

【转帖】ChatGPT重塑Windows!微软王炸更新:操作系统全面接入,Bing也能用插件了

https://cloud.tencent.com/developer/article/2291078?areaSource=&traceId= 金磊 丰色 西风 发自 凹非寺 量子位 | 公众号 QbitAI 一夜之间,微软彻底重新定义了PC交互。 因为这一次,它把Bing和ChatGPT插件的能

金融大模型落地新挑战

文章学习:外滩大会 | 金智塔科技首席科学家郑小林教授出席大会探讨金融大模型落地新挑战 大模型的构建非常依赖算料、算力,对高校而言,从模型合规性、隐私保护的角度去做研究是很好的切入点。依托浙大科研团队,金智塔科技在大模型的研究中发现绝大多数的数据都分布在客户手中,比如金融机构场景建设需要用到政务数据

如何实现千万级优惠文章的优惠信息同步

金融社区优惠文章是基于京东商城优惠商品批量化自动生成的,每日通过不同的渠道获取到待生成的SKU列表,并根据条件生成优惠文章。 但是,生成优惠文章之后续衍生问题:该商品无优惠了,对应文章需要做取消推荐或下架处理,怎样能更快的知道该商品无优惠了呢?

支付对接常用的加密方式介绍以及java代码实现

金融场景里如何让收银和支付更安全?背后的基础原件是加密方式的设计架构。本文重点讲解在京东金融中,我们如何用Java来实现支付加密。