使用Yahoo Finance的数据在pythonanywhere.com上为投资者开发在线服务

本文的目的是分享为python的投资者开发在线分析服务的经验。重点更多是概念问题,而不是任何特定技术的详细描述。我希望读者可以通过一点点谷歌搜索就能轻松找到任何细节。为了清楚起见,我在演示文稿的开头www.emarkoff.com给出了指向该服务的链接



图片



关于投资的一点



早在2019年夏天,我就开始对投资话题产生兴趣,并立即陷入各种出版物和视频博客作者的海洋,他们不同意地就如何以及在何处进行投资提出了建议。很明显,在投资领域,有两种主要的决策方法,这些方法基于基本面和技术分析。第一种方法更适合于长期投资,第二种方法适合于投机。



一段时间后,人们对玩各种历史情景无疑产生了好处,例如“如果我在某年,某年,某年和那个时期内投资,将会发生什么”。通过这种分析,您可以感觉到适合投资和投机的证券之间的区别,并且可以使新手投资者了解哪些金融工具以及在什么时间框架内值得投资。



概念成熟度,主机和Web服务体系结构的选择



随着时间的流逝,产生了以网站形式创建服务的想法,这将允许播放投资各种金融工具的历史场景。



下一步是确定三个关键点:



  • 主机选择;
  • 选择技术栈和服务架构;
  • 搜索开放数据源,可以从中获取有关市场报价的信息。


立刻清楚的是,希望在服务器端播放脚本(即执行所有计算)。并且有三个原因。首先是不愿向用户打开所有代码。第二个原因是寻求一种解决方案,其中根本不需要通过网络传输所有数据,第三个原因是与用户端的计算能力无关。如果未来的数据量突然变得如此之大,以至于有必要在诸如Amazon Web Services或Microsoft Azure之类的专门平台上部署后端,那么选择是为了将来。通常,如果有足够的野心,则最初选择解决方案是可伸缩的。



至于编程语言,最初毫无疑问是前端。一切都很标准:html + css + javascript。决定使用python编写后端,因为它是当今快速开发和原型开发中最受欢迎和受支持的语言之一。所有后续决定在某种程度上都是上述选择的结果。



选择Pythonanywhere.com作为主机,其显着特点是它面向python编程,并且每月提供相对便宜的$ 5费用。网站的后续开发是使用Django框架进行的。尽管该框架不是最简单的框架,但它以视图,模板和插件现成的应用程序的形式为开发人员提供了广泛的工具,这些工具使您可以构建一个完整的网站。

在选择数据源方面,Yahoo Finance这样的服务几乎吸引了我的注意力,因此,yfinance库为python提供了便捷的API。



pythonanywhere.com的一些功能



Pythonanywhere托管允许您以多种模式工作:



  • 在控制台中启动python解释器;
  • 在Jupyter笔记本电脑中工作;
  • 启动成熟的Web应用程序。


如果需要,托管允许您安装和使用任何python Web框架。它不一定是Django,但是例如,相同的Flask,被认为更容易学习。实际上,只需单击几下就可以设置和发布Web应用程序,因此您可以专注于基本要素。



方便的仪表板使您可以快速访问文件和文件夹,控制台以及所有设置。内置支持https,连接的域名以及网站内容的密码保护。通过仪表板中的链接,可以进行流量监控以及服务器日志。



我还想为开发人员带来另一个无疑的便利。除了服务器日志之外,当后端发生错误时,在调用相应的函数和方法时,变量的跟踪和局部值通常会显示在当前浏览器窗口中。此外,即使在智能手机的浏览器窗口中也可以看到轨迹。

这种调试模式对我个人有很大帮助,使我可以即时纠正代码中的错误。



无疑值得您注意的另一个重要点是使用版本控制系统。Bash嵌入式控制台中提供了Git,svn和hg / mercurial。



处理数据



我之所以选择金融信息提供商Yahoo Finance和yfinance库,是因为缺乏订阅费,并且无法获取股票信息的每日更新。通过yfinance API,在线服务可从三个美国证券交易所NASDAQ,NYSE和AMEX即时获取信息。但是,您应该立即注意以下事实:在开发者的网站上,yfinance上有关于禁止商业使用的警告。



对于Web服务器交互技术,带有html标记的模板最初会加载到浏览器中。下一步是运行javascript,它使用get-requests方法从服务器检索所有必需的数据。使用jQuery库的接口,使用Ajax技术执行页面内容的更新。



所有在线服务数据均以两种格式存储:csv和SQLite。这种选择使我能够快速开始实施核心逻辑,而不必安装和配置数据库服务器。



关于Django的一些知识



我还想分别介绍使用现成的块构建在站点体系结构中的三个软件组件,这些组件可以显着加快开发速度。我的意思是Django管理面板,django.contrib.sessions会话管理模块和excontrib / django_comments框架。



Django允许您从称为应用程序的单独软件组件构建项目。编写后,可以在不同项目中重用应用程序。为了将上述组件嵌入到项目中,必须在settings.py文件中明确指定它们



INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.sessions',
    'django_comments',
]


此外,应适当配置URL模式以从浏览器端发出请求:



urlpatterns = [
    url(r'^admin/', admin.site.urls)
    url(r'^comments/', include('django_comments.urls')),
]


从上面的代码片段中可以看到,嵌入现成的组件并不难,因此,它们为项目添加了功能的重要部分。



部署django框架之后,启动管理面板需要执行一些简单的步骤:检查您的settings.py文件设置,迁移内置数据模型以及创建超级用户。为管理员分配了他的个人登录名,密码和邮箱。默认情况下,通过将标准路径/ admin /添加到域URL来访问管理面板。

面板内部有一个方便的界面,用于管理内置数据库。默认情况下,此数据库存储有关用户和用户组的信息。这非常方便,因为很容易在站点上实现用户授权。如果网站的启动速度至关重要,那么您可以节省时间,而无需创建单独的页面来吸引新用户并授予他们权限。转到管理面板并通过UI向数据库添加新条目就足够了。但是,此解决方案仅适合少数用户,因为它不能使用户自己注册和重置密码。



管理面板的另一个功能是,它不仅可以访问用户数据,而且原则上可以访问在Django控制下存储在数据库中的任何数据。例如,除了有关授权用户的数据外,数据库还部分存储了站点内容和访问者留下的评论。



我将告诉您有关我曾在“关于我自己”页面上添加反馈表的一个生活黑客。为了不为浏览器或服务器上的数据编写单独的代码(而不是反馈表单),在相应的html模板中内置了标准注释块,但查看历史记录的功能被删除。通过这种方法,处理反馈表单数据并将其存储在与站点访问者的评论相同的表中。



会话管理已使用内置的django.contrib.sessions模块实现。会话对象存储有关用户访问站点时选择的设置的信息。特别是,会话存储所选的投资期,执行分析的历史期,站点的语言。



我将详细介绍如何使该网站使用多种语言。对于我而言,找到一个简单而快速的解决方案非常重要,在该解决方案中,我只需单击两次即可转到托管面板并编辑任何文章的文本。因此,为了存储文章的文本,我选择了独立文本文件的格式,而不将其加载到数据库中。考虑到文章数量很少(大致来说,最多10篇),并且只有两种语言选择选项(俄语和英语),我认为这种解决方案是可以接受的。同样,这一切都取决于规模。

最后我要介绍的是Django模板的使用。除其他事项外,模板还允许您直接从python代码将变量值导入到html页面中,以及从几个独立的块中收集html页面。作为说明,我将直接从代码中给出一个示例。



将几个具有动态内容的块嵌入到html页面的一般框架中:



html:
        {% include article_file_name %}
        {% include online_service_file_name %}
        {% include comments_file_name %}

Pyhton/backend:

def view_article(request, selected_url_path = 'expected_return'):

    context = {
        'article_file_name':article_file_name,
        'online_service_file_name':online_service_file_name,
        'comments_file_name':comments_file_name,
    }
    return render(request, 'articles/base_blog_page.html', context=context)


这里的article_file_name,online_service_file_name和comments_file_name实际上是变量的名称,带有添加内容的html文件的路径通过这些变量传递。



结论。自助开发Web服务的有用经验



您可以通过单击链接www.emarkoff.com来查看我对该项目的工作结果



pythonanywhere平台通常是开发基于Django的Web应用程序的理想解决方案。而且,如果您有自己的想法,那么即使您不是专业的Web开发人员,两三个月也足以让您理解基础知识并实现一些简单的Web应用程序。



这种经验对于经理,分析师和任何必须负责Web开发和Web服务的人员都非常有用,尤其是在Beta测试阶段。您将能够更好地理解服务器错误消息的含义,并与技术支持和开发代表进行更有效率的沟通。



All Articles