怎样将树莓派转换为股票交易所监控机器人

电子说

1.3w人已加入

描述

步骤1:准备Raspberry Pi

我的特殊设置是Raspberry pi 3,带有外部WD Pi Drive 314Gb磁盘。不需要外部磁盘。 SD卡应该足够了,除非您有数千只库存要监视。..

我将不介绍如何设置raspberry pi使其正常运行。

我假设您已经运行了树莓派,并且可以访问互联网。

该项目的文件可以在github的github上找到。将文件克隆到您的树莓派中,发出在下面的命令中,请在raspberry pi命令行上进行操作:

git clone https://github.com/kal001/stocks.git

您应该在树莓派pi中安装git才能起作用。如果不是这种情况,请先安装它:

sudo apt-get install git-core

您现在应该拥有一个包含所有文件的 “ stocks” 文件夹在上面。用 ls -la 列出它们,以查看是否一切正常。

步骤2:创建数据库

安装sqlite3:

sudo apt-get install sqlite3

运行sqlite3创建数据库文件( stockdata.sqlite ):

sqlite3 stockdata.sqlite

在sqlite提示符下,通过阅读 sql文件stocks_db_structure.sql 中的命令来创建表结构:

sqlite》 .read stocks_db_structure.sql

检查表是否正确创建并退出:

sqlite》 .tables

currencies exchanges movements portfolio stocks

dividends hollidays options quotes strategies

sqlite》 .exit

您现在应该在数据库中拥有一个stockdata.sqlite文件。

所有表都应该为空。您可以根据需要填充它们。为此,请检查文件 database.html ,该文件列出了数据库中的所有表以及每个字段的含义。

如果需要用我使用的一些 样本数据 填充表,再次运行sqlite,这次从 stocks_db_data.sql :

sqlite3 stockdata.sqlite

sqlite》 .read stocks_db_data.sql

要测试一切是否正常,请列出 库存 表中的行,例如:

sqlite》 select * from stocks;

1|Millenium BCP|ELI:BCP|BCP.LS|1|False|15|||1|stock

2|The Navigator Company|ELI:NVG|NVG.LS|1|True|15|2.88|2016-06-10T17:35:00+02:00|1|stock

3|EURO Dollar exchange ratio|EURUSD|EURUSD=X|3|True|60|1.1253|2016-06-12T14:41:38.815735+00:00||currency

4|Jeronimo Martins|ELI:JMT|JMT.LS|1|True|15|13.77|2016-06-10T17:36:00+02:00|1|stock

5|Galp Energia|ELI:GALP|GALP.LS|1|False|15|||1|stock

6|EDP Energias de Portugal|ELI:EDP|EDP.LS|1|False|15|||1|stock

7|REN Redes Energeticas Nacionais|ELI:RENE|RENE.LS|1|False|15|||1|stock

8|CTT Correios de Portugal SA|ELI:CTT|CTT.LS|1|False|15|||1|stock

9|Qlik Technologies, Inc.|NASDAQ:QLIK|QLIK|4|True|15|30.0|2016-06-10T16:00:00-04:00|2|stock

并退出:

sqlite》 .exit

您可以在文件 database.html 中找到每个数据库表的描述。

最重要的表格是: 库存 ,用于描述您感兴趣的库存; 交易所 ,您可以在其中定义将要交易的证券交易所(例如,定义交易所的开放和关闭时间)

第3步:安装要求

从安装pip开始。

pip是python的软件包安装程序。安装pip后,安装python包非常容易。

要安装pip,请在命令行中输入:

sudo apt-get install python-pip

现在安装所有必需的软件包:

sudo pip install -r requirements.txt

现在您是准备开始使用其中包含的几个python脚本。

这些是:

monitor.py -用于监视持续不断的股市

stock_telegrambot.py -这是一种Telegram机器人,它将发送和接收电报消息以与您的脚本/股票

ggetquote.py -该脚本可打印 stocks 中所有股票的最新报价表,其字段为Tracked = True

backtest.py -用于测试表中保存的某些投资策略的脚本策略,根据历史数据,并根据该策略返回股票的价值。

每个脚本均在后续步骤中进行了详细说明。

步骤4:配置电报/创建Bot

如果您尚未在所有设备(电话,计算机,平板电脑等)中安装Telegram,并创建了一个帐户。

Telegram是一种非常快速,安全的方法,灵活的Messenger应用程序。它可以在iOS,Android,Windows,Mac,Linux等系统中运行。

它允许您创建一个“机器人”,该机器人是处理消息的程序。在这种情况下,我们将使用python编写一个与用户交互的脚本,并且该脚本在树莓派中运行。

A)创建一个机器人

您必须与两个父亲“交谈”才能创建机器人。在此处查看说明。

打开电报并与Botfather聊天时,写/newbot 创建一个新的Bot。

Telegram会要求您输入名称到机器人。随意命名,例如 stockserver 。

Telegram会要求输入一个以bot结尾的用户名。例如 stockserver_bot 。

Botfather然后创建了该bot,并应为您提供将来访问它的密钥。像这样的

完成!祝贺您的新机器人。您可以在telegram.me/stockserver_bot中找到它。现在,您可以添加有关机器人的部分和个人资料图片的描述,请参阅/help以获取命令列表。顺便说一句,当您完成酷机器人的创建后,如果您想要一个更好的用户名,请ping我们的Bot支持。只需确保该机器人已完全正常运行,即可。

使用此令牌访问HTTP API:

234126601:T7SO2lNWJbChPB2hfKwQxDe3PGI

有关Bot API的描述,请参见以下页面:https://core.telegram.org/bots/api

关键是带粗体的 2341 。.. 上方。您需要将该密钥插入文件 stocks.ini 中:

[Telegram]

token = 2341.。.

我建议您复制粘贴此消息并将其插入到名为的文件中》 stockserver_bot.txt ,并将其保存以备将来使用。

现在,您可以告诉您的机器人它将接受哪些命令。此步骤是可选。但是,如果这样做,将会简化在Telegram客户端中发出命令的过程。

在两个父亲之间编写/setcommands ,然后选择您的漫游器。现在,编写您的漫游器应理解的命令:

buy - Buy shares

sell - Sell shares

dividend - Set new dividend

status - Check bot status

portfolio - Get current portfolio

returns - Get current portfolio returns

movements - Get movements for a stock

B)查找您的电报用户ID

您的漫游器需要知道您的用户ID

转到电报,然后将带有 /start 的消息发送到您的机器人。

p》

由于树莓派尚未运行该机器人,您将无法回答。

现在运行脚本 gettelegramuid.py 。它会在Telegram中打印您的用户ID编号,该编号是从您发送给他的消息/start中获得的。

将此数字(类似123456789)复制到文件stocks.ini中:

[Telegram]

token = 。..

uid = 123456789

您还可以仅检查 gettelegramuid.py 了解其工作原理。仅有几行。

步骤5:Monitorstock.py

monitor.py 是一个python脚本,可以:

根据不同的策略查看是时候购买还是出售了。

在表 策略 中具有 Active = True 的所有策略都将被检查为看看是否:

A)是时候买入-当股票连续连续下跌几天后又跌开

B)是时候卖出-如果指定了最低限度达到回报

将发送电报消息,以提醒用户该是购买/出售股票的时候了。

获取跟踪的股票报价,并将其存储在数据库中。

表 stocks 中具有 Tracked = True 的所有股票都是通过定义的 间隔 采样时间。报价存储在 quotes 表中。

scipt检查交易所是否开放(考虑每个证券交易所的开放时间,周末和节假日) ),然后再执行任何先例操作。

步骤6:使Monitorstock.py定期运行并启动Stock_telegrambot.py

A )将monitorstock.py设置为定期运行

您应安装monitostock.py使其定期运行。为此,请在树莓派中编写 crontab -e 。您应该看到预定义的编辑器(在我的情况下为“ nano”)显示树莓派pi定期运行的任务列表。

在此文件末尾添加:

MAILTO=“”

*/1 * * * * cd ~/bolsa && python monitorstock.py

0 12 * * * /home/fernando/bolsa/restartbot.sh

按Ctrl + X退出。回答Y保存更改,然后按Enter。您将在提示符后回来。

第一行告诉crontab不要发送包含执行结果的电子邮件。否则,您将每分钟收到一封电子邮件!!

第二行更改为安装脚本的文件夹,然后告诉crontab运行 python monitorstock.py 每分钟(*/1)。例如,如果要将周期更改为5分钟,请将*/1更改为*/5。

第三行每天在12:00运行bash脚本。脚本为 restartbot.sh 。如果运行,该脚本将停止stock_telegrambot.py,然后立即再次启动它。

我发现运行几天后,由于某种无法解释的原因,脚本stock_telegrambot.py停止了响应,甚至

每天停止并重新启动一次,以避免这种现象。

B)启动 stock_telegrambot.py

编写 。/startbot.sh 。您的机器人应该启动,并且您会收到这样的消息,并在电报中进行确认:

Start stock_telegrambot.py

v0.0.2-5-gf75a193

2016-06-12 21:33:57.458815

该机器人将是一个正在运行的任务,在后台运行。它将永远运行。

如果要查找任务,请写 ps aux 。这将打印在树莓派中运行的所有任务的列表。找到说“ python stock_telegrambot.py” 的行。

如果要停止bot,请写 。/killbot.sh 。确认任务没有执行,再次编写 ps aux 。

C)将树莓派启动时放置stock_telegrambot.py

如果您希望机器人在树莓派启动时每次启动,请发出 sudo nano/etc/rc.local

该文件中的命令行 /home/fernando/bolsa/startbot.sh ,位于最后一个退出0的行之前。按ctrl + x退出,并回答Y保存

第7步:播放

现在已经安装了所有内容,您可以使用电报来

/购买-告诉电报向您的投资组合中添加一些股票

以每只股票15欧元的价格购买50股ELI:JMT的示例:

/buy 50 eli:jmt 15

Success. Bought 50.00 ELI:JMT @ 15.000. New quantity on hand 400.00. New average price 11.875

/出售-卖出您投资组合中的一些股票

以16欧元出售50股ELI:JMT的示例每只股票:

/sell 50 eli:jmt 16

Success. Sold 50.00. New quantity on hand 350.00.

/投资组合-返回您当前的投资组合

示例:

/portfolio

QTY STOCK PRICE

350.00 Jeronimo Martins (ELI:JMT) 11.875

30.00 Qlik Technologies, Inc. (NASDAQ:QLIK) 30.000

/回报-打印投资组合中每个资产的当前回报

示例:

/returns

QTY STOCK RETURN %

350.00 Jeronimo Martins 12.8

30.00 Qlik Technologies, Inc. -0.1

/状态-检查正在运行的机器人的状态

示例:

/status

Ok. Running

v0.0.2-5-gf75a193

/股利-告诉机器人该股票的新股利

将ELI:JMT的每股股利设置为0.7欧元的除息示例日期2020年1月1日:

/dividend eli:jmt 0.7 2020-01-01

Ok. Dividend set for ELI:JMT

就是这样!

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分