第一步 python获取实时股票数据

这一步在网上查资料查来查去,三个小时才完成。

python之前没有安yfinance工具包,虽然应该是超级简单的pip install,但是莫名报错

一下是panda库的问题,一下是numpy版本不兼容,panda库的报错内容在csdn查了一下,

这篇文章基本解决了第一个问题:

http://t.csdn.cn/XhDe2http://t.csdn.cn/XhDe2反复尝试fix_yahoo_finance 无果,又查来查去发现是yfinance
这个是系统自动提示的好像,有Anacoda,在命令窗口输入这个就好

conda install -c ranaroussi yfinance

之后用这个代码就可以在python使用yfinance 并且获得股票数据了

import pandas as pd
import pandas_datareader.data as web
import datetime
import yfinance as fix
import numpy
fix.pdr_override()start=datetime.datetime(2020, 10, 1)
end=datetime.datetime(2023, 1, 1)
web.get_data_yahoo('AAPL',start,end)
data=fix.download('AAPL','2020-08-31','2023-4-1')

python可以正常使用之后去matlab尝试 发现报错

py.importlib.import_module('pandas');

ModuleNotFoundError: No module named 'yfinance'

这里又是因为matlab调用python的路径在C盘,而这里的找不到yfinance包(之前下载的python在C盘,anaconda版在D盘)

于是设定路径 (这里是GPT教的)

pyversion('E:\Anaconda\envs\myenv\python.exe')

matlab又报错numpy找不到 又回馈给GPT

事情越来越复杂 最后没有办法,直接从python导出数据到matlab算了

data.to_csv("AAPL_stock.csv")

这里的csv文件直接存储在当前文件夹下,在matlab中可以直接按键式导入 自动生成脚本:

%% 设置导入选项并导入数据
opts = delimitedTextImportOptions("NumVariables", 7);% 指定范围和分隔符
opts.DataLines = [2, Inf];
opts.Delimiter = ",";% 指定列名称和类型
opts.VariableNames = ["Date", "Open", "High", "Low", "Close", "AdjClose", "Volume"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double"];% 指定文件级属性
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";% 指定变量属性
opts = setvaropts(opts, "Date", "TrimNonNumeric", true);
opts = setvaropts(opts, "Date", "ThousandsSeparator", ",");% 导入数据
AAPLstock = readtable("C:\Users\lenovo\AAPL_stock.csv", opts);%% 转换为输出类型
AAPLstock = table2array(AAPLstock);%% 清除临时变量
clear opts

第二步 在MATLAB 中发出多空头指令

第一列时间导进来换成日历型数据,之后可能要找日期

%先导入数据
% 第一列时间数据类型
AAPLstock(:,1)=x2mdate(AAPLstock(:,1));
calendar=datestr(AAPLstock(:,1));

第一步 多空头指令(这段代码完全是曹志广老师在他的教材《金融编程与计算》里留下的课后作业答案,稍作改动找到金叉死叉)

function [s,ma,tdeadcross1,tgoldcross1]=truly_ma(p,N)
% INPUT
%    p: T*K,股票时间序列矩阵
%    N:integer, 均线期数
% OUTPUT
%    s: T*K,每期多空指令
%    ma:T*K, 每期均线[m,k]=size(p);
s=zeros(m,k);
ma=s;
ma(1:N-1,:)=p(1:N-1,:);
for i=N:mA=p(i:-1:i-N+1,:);ma(i,:)=mean(A);
end
s(p>ma)=1;
t=diff(s);
%tgoldcross1: 股票A出现金叉的当天
%tdeadcross1: 股票A出现死叉的当天
tgoldcross1=find(t(:,1)>0)+1;
tdeadcross1=find(t(:,1)<0)+1;

设置7天为一期,创造均线并画图

%多空头和金死叉my_ma 期数选7天
%    s: T*K,每期多空指令
%    ma:T*K, 每期均线
p=AAPLstock(:,6);
N=7;
[s,ma,tdeadcross1,tgoldcross1]=truly_ma(p,N);
figure(1);
subplot(2,1,1);
plot([AAPLstock(:,6),ma(:,1)]);
hold on;

又是曹老师的课后题答案 这里依据之前的多空头方案具体进行操作

为了简化,我把交易成本删掉了

function [num,ret_trade,prob_win]=my_performance_evaluation(p,s)
% INPUT
% p: N*1, price vector
% s: N*1, position vector% OUTPUT
% num: integer, trading times
% ret_trade: N*1, profit/share
% prob_win: scalar, probability of winningN=length(p);
s(N)=0; % clear at the end 最后结算清仓
A=[s(1);diff(s)]; % A:仓位变化 (留住第一期 之后做差分)
B=A.*s;  % A:仓位变化, s:当前仓位, B~=0说明仓位有变化(不在空仓0)且当前没有平仓
open_id=(A~=0&B~=0);  % 仓位有变化且当前仓位不是0,说明已开仓 1是开仓点
close_id=((A~=0&B==0)|abs(A)==2);  % 要么仓位有变化且当前仓位归0,要么仓位变化是+2或-2,说明已在单方向先平仓
% 对于仓位变化绝对值为2的情况(103:105),104期既平仓掉空头头寸,又开仓多头头寸ret_bh=[0;diff(p)]; %%return
gross_ret=[0;ret_bh(2:end).*s(1:N-1)];  % 仓位s在每天交易日开始或头一天晚上就订好  %%交易成本 A表示有交易 有可能为2
ret=gross_ret;
cum_ret=cumsum(ret);
ret_trade=cum_ret(close_id)-cum_ret(open_id); %321次交易的收益
final=cumsum(ret_trade(:,1));
num=length(ret_trade);
prob_win=sum(ret_trade>0)/num;
[num,ret_trade,prob_win]=my_performance_evaluation(p,s);

完工 虽然胜率不高,到头也只赚了4.13

有更好的策略可以分享给我哦~

MATLAB调用python获得股票数据并构建交易策略相关推荐

  1. matlab python 股票,股票行情数据获取-Python获取股票数据?

    Python获取股票数据? 这里推荐一个包―tushare,tushare是一个免费.开源的python财经数据接口包.主要实现了从数据采集.清洗加工到数据存储过程,能够为金融分析人员提供快速.整洁的 ...

  2. matlab调用python自定义函数模块进行数据分析总结

    出发点:团队其它成员写好的python函数功能,可以进行数据的导入,但利用python开发环境绘图分析没有用matlab分析的效果好,因此萌发了发挥matlab的绘图优势+原先python写好的功能组 ...

  3. 用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)...

    本人最近在尝试着发表"以股票案例入门Python编程语言"系列的文章,在这些文章里,将用Python工具绘制各种股票指标,在讲述各股票指标的含义以及计算方式的同时,验证基于各种指标 ...

  4. MATLAB调用Python自定义函数(类、函数等) Python调用MATLAB

    一.MATLAB调用Python函数 参考链接:https://blog.csdn.net/qq_27280237/article/details/84644900 知乎链接:https://zhua ...

  5. 使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示

    使用Python对股票数据进行数据分析(一)-计算日线行情.5日均线.10日均线行情并显示 各种炒股软件上可以显示各种技术指标,可以帮助投资者进行技术分析.这些股市中的这些指标都是怎么计算出来的呢?这 ...

  6. 使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情、5日均线、10日均线行情并显示

    使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情.5日均线.10日均线行情并显示 这个文章其实和我的上一篇文章,https://blog.csdn.net/lost0910 ...

  7. python分析股票数据 彤_Python数据分析:股票数据

    最近股市比较火,我7月初上车了,现在已经下了.中间虽然吃了点肉,但下车的时候都亏进去了,最后连点汤都没喝着. 这篇文章我们就用它python 对股票数据做个简单的分析.数据集是从1999年到2016年 ...

  8. 如何去使用Python分析股票数据?学到就是赚到

    对于炒股的同学来说,必须会看懂数据才能避免入坑.今天小千就来教大家如何去使用Python分析股票数据,学到就是赚到.(小千提醒,股市有风险,请谨慎投资) 这次的美股例子就选择了美国显卡制造商英伟达,其 ...

  9. MATLAB爬虫爬取股票数据

    近年来,大数据盛行,有关爬虫的教程层次不穷.那么,爬虫到底是什么呢? 什么是爬虫? 百度百科是这样定义的: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种 ...

最新文章

  1. Java--类的成员
  2. 钉钉小程序封装请求地址
  3. 职场人必备的几个PPT进阶小技巧
  4. php cdi_通过MicroProfile上下文传播增强了CDI上下文和隔板
  5. Dubbo -- 系统学习 笔记 -- 目录
  6. 【Spring第二篇】IOC:控制反转
  7. scala 排序接口Ordering
  8. Linux嵌入式开发_主设备号与次设备号详解
  9. Shader入门精要-1-渲染流水线数学基础
  10. 拼途网: 从线上到线下的拼途旅行社区
  11. maxscale mysql 主从_MariaDB主从配置与MaxScale实现MySQL读写分离
  12. 20135202闫佳歆——信息安全系统设计基础第九周学习总结
  13. Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理
  14. Ubuntu下vim设置tab键为4个空格
  15. 使用ScanCode扫描开源项目的license
  16. CISP学习资料整理归纳
  17. 桥梁在线计算机监测系统,桥梁安全在线监测系统
  18. 每个人的青春都有一条弯路,你要自己走
  19. 矩阵分析之 实矩阵分解(2)LU,PLU分解
  20. 22. Vue keycodes按键修饰符

热门文章

  1. ORB_SLAM2逐行解析(3)
  2. 这是一个神奇(神器)的网站
  3. Goolg Maps android API V2版详解(二)新地图get~
  4. 今年大火的元宇宙,到底是什么?
  5. Discuz论坛系统
  6. 开源应用中心 | 无需开发,如何快速搭建一款轻量级CRM系统?
  7. 【1024】写给最好的你-程序员
  8. 8.前端JavaScript之数据类型
  9. Elasticsearch学习2 SpringBoot整合 测试复杂检索
  10. 完全替代ALTERA EP4CE10, 国产AGM FPGA 的AG10K系列与之pin to pin 兼容