×

Raspberry Pi和你的仓鼠进行股市交易

消耗积分:0 | 格式:zip | 大小:0.06 MB | 2023-02-10

李娜

分享资料个

描述

 

pYYBAGNfMWmAeO4_AAV_QIKiGcQ563.jpg
Oled 屏幕中的股票和股票代码
 

几个月前,BBC 发布了一篇关于 Goxx 先生的故事,这是一只加密交易仓鼠击败人类投资者。看完文章后,我看着我的仓鼠,我告诉他“我们住在阿根廷,我的朋友……假期结束了”

好吧,我们俩的假期都结束了,因为我不得不使用 3D 建模创建自定义零件,我研究了投资 API,我设计了电路并使用 Python 对系统进行了编码。

我的仓鼠被命名为 Milstein——以阿根廷生物化学家 César Milstein 命名——而 Milstein 只投资于在美国市场交易的阿根廷股票,如 MercadoLibre(MELI 股票代码)和 Globant(GLOB 股票代码),但代码准备好使用任何股票或 EFT 指数。

到目前为止,米尔斯坦损失了大约 350 美元,但我不会放弃他。毕竟,什么是朋友?(谁告诉米尔斯坦只投资阿根廷股票?)

它是如何工作的

BBC 的文章没有提供太多技术信息(“办公室是完全自动化的,使用了广泛的技术,包括软件脚本、微控制器、单板计算机、计算机辅助设计、3D 打印、激光切割和更多。”)所以我只是将主要思想用作参考,并且我决定使项目变得非常简单明了,以便其他人可以复制经验。

仓鼠将使用以旋转编码器为轴的轮子选择要交易的股票。选择股票后,只要在买卖柜台检测到存在,就会触发买入或卖出信号。

poYBAGNfMZiAX_ErAAYI4XWJmpA142.jpg
覆盆子、PIR 和旋转
 

旋转编码器和 PIR 传感器通过 Alpaca 交易 API 连接到 Raspberry Pi。可以从 SSH 连接到 Raspberry Pi 以及从 Oled 屏幕监控所有操作。

要求

pYYBAGOJZwSAfe8VAADQtKDeXF4121.jpg
带旋转编码器轴的仓鼠轮
 

软件

使用 Raspberry Pi OS 设置 Raspberry Pi

连接键盘和 HDMI 屏幕以设置 Raspberry。

使用跨接电缆连接 PIR、Oled 和 Rotary。

poYBAGOJZwiAEOkXAAZ1KpIKGeU934.jpg
米尔斯坦刚刚出售了 MELI 股票
 

>> OLED屏

  • SDA,白色到 GPIO2
  • SCL 转 GPIO3
  • + 至 5V
  • - 接地

>> PIR运动传感器

  • + - 5v
  • 接地 - 接地(引脚 6)
  • GPIO14,转PIR信号

>> 旋转编码器

  • CLK - GPIO17 (pin11)
  • DT - GPIO18 (pin12)
  • + - 3v3 (pin1)
  • 接地 - 接地(引脚 6)

启动树莓派。安装羊驼交易库

$ sudo pip3 install alpaca-trade-api
$ sudo apt-get install libatlas-base-dev

注册羊驼交易

pYYBAGOJZwqAdxVTAADLqeotlKA442.jpg
羊驼交易
 

使用重新生成密钥按钮登录并获取您的 API 密钥(公共和秘密)。

在树莓派上启用 SSH

$ sudo raspi-config

使用键盘上的箭头选择接口选项。

在列表中选择 P2 SSH 选项。

在“您希望启用 SSH 服务器吗?”中选择 <是> 迅速的。

现在转到网络选项、Wifi 并指定您的 WiFi 凭据。

出口。现在,您可以断开键盘和屏幕的连接,并使用 Putty 或任何其他终端远程连接到您的 Raspberry。

将所有项目文件上传到 root/alpaca 文件夹。您可以使用任何具有相同 SSH 凭据的 FTP 客户端。

$ nano hamsterInvestor.py

编辑 Alpaca api 凭据。

api_key = 'AAAAAAAAAAAAAAA'

api_secret = 'AAAAAAAAAAAAAAAAAAAAAAAA'

base_url = ' https://paper-api.alpaca.markets'

下载并打印 3d 零件。

将车轮连接到旋转编码器,将 PIR 连接到支撑底座。将 PIR 连接到 Buy/Sell 房屋。

启动系统:

$ cd alpaca
$ sudo python3 hamsterInvestor.py

一切准备就绪,让您的仓鼠成为股市百万富翁。

poYBAGOJZwyASNO7AABpdbEMA-A243.jpg
通过 SSH 到 Raspberry Pi 的系统日志
 

注意:您可以在每次打开 Raspberry 时使用 cronjob 自动执行 Python 脚本。该脚本将检查市场是否开放,因此在数小时后,仓鼠将无法发布交易。

如果您从 Raspberry 开始,我推荐这本书Fun Projects with Raspberry

poYBAGOJZxOACTljAAfU8NPaVdc454.jpg
米尔斯坦在办公室
 

 

 

 


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

评论(0)
发评论

下载排行榜

全部0条评论

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

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Raspberry Pi和你的仓鼠进行股市交易',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);