炒股模拟软件 linux及炒股模拟软件开源
有一份隐性收入通常很不错,特别是当你可以轻松的协调业余和全职工作。如果你的日常工作使用了联网的电脑,交易股票就是一个获取额外收入的很流行的选项。
但是目前只有很少的股票监视软件可以运行在 linux 上,其中大多数还是基于图形界面的。如果你是一个 Linux 专家,并且大量的工作时间是在没有图形界面的电脑上呢?你是不是就没办法了?不,还是有一些命令行下的股票追踪工具,包括Mop,也就是本文要聊一聊的工具。
Mop
Mop,如上所述,是一个命令行下连续显示和更新美股和独立股票信息的工具。使用 GO 语言实现的,是 Michael Dvorkin 的智慧结晶。
下载安装
因为这个项目使用 GO 实现的,所以你要做的第一步是在你的计算机上安装这种编程语言,下面就是在 Debian 系的系统,比如 Ubuntu 上安装 GO 的步骤:
sudo apt-get install golang mkdir ~/workspace echo 'export GOPATH="$HOME/workspace"' >> ~/.bashrc source ~/.bashrc
GO 安装好后的下一步是安装 Mop 工具和配置环境,你要做的是运行下面的命令:
sudo apt-get install git go get github.com/michaeldv/mop cd $GOPATH/src/github.com/michaeldv/mop make install export PATH="$PATH:$GOPATH/bin"
完成之后就可以运行下面的命令执行 Mop:
cmd
特性
当你第一次运行 Mop 时,你会看到类似下面的输出信息:
如你所见,这些输出信息—— 周期性自动刷新 ——包含了主要几个交易所和个股的信息。
添加删除股票
Mop 允许你轻松的从输出列表上添加/删除个股信息。要添加,你全部要做的是按“+”和输入股票名称。举个例子,下图就是添加 Facebook (FB) 到列表里。
我按下了“+”键,就出现了包含文本“Add tickers:”的一列,提示我添加股票名称—— 我添加了 FB 然后按下回车。输出列表更新了,我添加的新股票也出现在列表了:
类似的,你可以使用“-”键和提供股票名称删除一个股票。
根据价格分组
还有一个把股票分组的办法:依据他们的股价升跌,你所要做的就是按下“g”键。接下来,股票会分组显示:升的在一起使用绿色字体显示,而下跌的股票会黑色字体显示。
如下所示:
列排序
Mop 同时也允许你根据不同的列类型改变排序规则。这种用法需要你按下“o”(这个命令默认使用第一列的值来排序),然后使用左右键来选择你要排序的列。完成之后按下回车对内容重新排序。
举个例子,下面的截图就是根据输出内容的第一列、按照字母表排序之后的结果。
注意: 为了更好的理解,和前面的截屏对比一下。
其他选项
其它的可用选项包括“p”:暂停市场和股票信息更新,“q”或者“esc” 来退出命令行程序,“?”显示帮助页。
结论
Mop 是一个基础的股票监控工具,并没有提供太多的特性,只提供了它所声称的功能。很明显,这个工具并不是为专业股票交易者提供的,而仅仅为你在只有命令行的机器上得体的提供了一个跟踪股票信息的选择。
作者:Himanshu Arora译者:oska874校对:wxy
本文由 LCTT原创编译,Linux中国荣誉推出
译者: oska874
机器之心报道
项目作者:wangshub
机器之心编辑部
2020 年的股票市场常人难以预测,那么人工智能可以做到吗?
受新冠疫情和油价下跌的影响,近期的全球股市就像过山车一样刺激。
3 月上旬,美国道琼斯指数出现了下跌熔断。伯克希尔哈撒韦 CEO 巴菲特的言论让世人惊恐。
「如果你坚持足够长的时间,你将在市场中目睹所有可能的情况,」3 月 8 日,沃伦·巴菲特在接受采访时说道。「但这可能是我 89 年人生以来第一次经历这样的事。但如果一个市场是即时运行的,它就会对新闻产生很大反应。」
在当时,巴菲特认为市场还没有出现 2008 年或是 1987 年那样的恐慌,但今年的三月对于所有投资者来说注定是一段前所未有的经历——很快,美股又经历了多次下跌熔断。
前所未有的情况或许也意味着绝无仅有的机会,对于想要致富的我们来说,大胆抄底成为了一种选择。
但剧情发展到这里一般是这样:一番错误操作后,结果惨不忍睹,第一次买股票就被股市一段暴打。
痛定思痛,我们应该换一个思路:既然都是机器学习开发者,为什么不用深度强化学习来自动模拟炒股?实验验证一下能否获得收益。
已有人对此进行了尝试。该项目的作者是一名来自哈尔滨工业大学的在读博士,同时也是一家创业公司的合伙人。
作者之前还做过很多有趣的项目,比如「微信跳一跳 Python 辅助」,以及 Python 抖音机器人,用它在抖音上找到漂亮的小姐姐(就真的还挺实用的)。
作者主页:
https://github.com/wangshub
效果展示
以 1990 年年初到去年 11 月底的股票数据作为训练集,去年 12 月股票数据作为测试集。作者先用单只股票试验了一下,初始本金为 10000 元人民币(股票代码 sh.600036,招商银行),进行了为期 20 天的模拟操作,经历了一番起伏,最终盈利 400 元。
在进行单只股票试验之后,作者选取 1002 只股票进行训练,结果显示盈利率为 44.5%,不亏不赚率为 46.5%,亏损率为 9.0%。仅从盈亏率来看,效果还是不错的。
当然,作者也说了,「数据和方法皆来源于网络,无法保证有效性」,只能说是辅助决策的方法吧,Just For Fun,如果产生了什么后果,还是得自己默默承受……机器之心友情提示,股市有风险,投资需谨慎。盲目乱投资,亲人两行泪。
项目实测
所以说如何使用深度强化学习自动炒股呢?首先我们将本项目克隆到本地,并安装相关依赖环境:
!git clone https://github.com/wangshub/RL-Stock import os os.chdir('RL-Stock') !pip install -r requirements.txt
项目作者使用证券宝来获取股票证券交易数据。证券宝是一个免费、开源的证券数据平台,里面包含大量准确、完整的证券历史行情数据、上市公司财务数据,用户可通过通过 python API 获取其数据信息。安装方式如下:
!pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn (http://pypi.tuna.tsinghua.edu.cn/)
之后使用作者提供的数据获取代码来获取股票数据:
!python get_stock_data.py
由于数据集相对较大,涵盖了过去将近 30 年的股票证券交易数据,所以这一过程相对比较耗时。
最后,运行项目中的 main.py 即可对该股票交易环境进行训练或测试。测试效果如下:
以下为本项目核心代码:
import pandas as pd from stable_baselines.common.policies import MlpPolicy from stable_baselines.common.vec_env import DummyVecEnv from stable_baselines import PPO2 from rlenv.StockTradingEnv0 import StockTradingEnv def stock_trade(stock_file): day_profits = [] df = pd.read_csv(stock_file) df = df.sort_values('date') # The algorithms require a vectorized environment to run env = DummyVecEnv([lambda: StockTradingEnv(df)]) model = PPO2(MlpPolicy, env, verbose=0, tensorboard_log='./log') model.learn(total_timesteps=int(1e4)) df_test = pd.read_csv(stock_file.replace('train', 'test')) env = DummyVecEnv([lambda: StockTradingEnv(df_test)]) obs = env.reset() for i in range(len(df_test) - 1): action, _states = model.predict(obs) obs, rewards, done, info = env.step(action) profit = env.render() day_profits.append(profit) if done: break return day_profits
从以上代码可以看到,作者首先使用 pandas 读取股票证券交易数据,之后将其输入 RL 环境中。这里使用的股票交易的 Gym 环境参考了 Stock-Trading-Environment 这一开源实现,我们仅需将获取到的数据输入该环境中,即能得到可直接用于 RL 进行训练的标准 Gym 环境 API。
项目使用的 RL 策略调用了 stable-baselines 中的 PPO 实现。stable-baselines 使用 TensorFlow 作为后端,提供了一系列优质的 RL 算法实现。使用时仅需将 RL 环境传入其中,再调用 model.learn() 即可开始对 agent 进行训练。无论是科研还是工程用途都不失为一个不错的选择。
stable-baselines 官方主页:
https://stable-baselines.readthedocs.io/en/master/index.html
PPO 简介
PPO 算法的全称是 Proximal Policy Optimization(近端策略优化),是 OpenAI 在 2017 年发布的一种强化学习算法。该算法的实现和调参十分简单,在强化学习中的表现优于当时所有顶尖算法的水平,因此被 OpenAI 作为强化学习研究中的首选算法。
PPO 是策略梯度的一种改进算法,可以让我们在复杂和具有挑战性的环境中训练 AI 策略。策略梯度算法对步长十分敏感,但是又难以选择合适的步长,在训练过程中新旧策略的的变化差异如果过大则不利于学习。
PPO 提出了新的目标函数,可以在多个训练步骤中实现小批量的更新,解决了策略梯度算法中步长难以确定的问题。其实 TRPO 也是为了解决这个问题,但是相比之下,PPO 算法更容易求解。
PPO 的目标函数如下:
PPO 算法在强化学习中有着广泛的应用,如 OpenAI 的 Dota2 智能体、腾讯王者荣耀智能体绝悟等都使用了这项技术。
可以看到,本项目并不涉及很深奥的数学知识,使用的训练环境与 RL 算法也均为其他开源实现,核心代码不超过 10 行,却有着不错的效果。在工程实现上,有的时候一个好的创意或许要比复杂的代码实现重要。