使用 python 读取 Amibroker 价格交易量数据
Posted
技术标签:
【中文标题】使用 python 读取 Amibroker 价格交易量数据【英文标题】:Read Amibroker price volume data using python 【发布时间】:2016-07-19 22:43:56 【问题描述】:我想使用 python 读取 Amibroker 股票代码的价格交易量数据。我在谷歌上找不到任何有用的东西。有人可以帮忙吗?
【问题讨论】:
这不是一个真正的编码问题。 ***.com/help/mcve。这可能会有所帮助:***.com/questions/527703/… 【参考方案1】:
Cool:
请不要犹豫,把美味的糖果盒完全打开
与其他交易框架一样,AmiBroker 可以提供数据,但它是一个紧凑的 (~ 3.5 MB .EXE
+ .DLL
s)、性能优化的可执行文件,不像 Java 或 .NET 程序那样需要任何内部虚拟机都可以在字节码级别解释用户进程,但在机器码级别上全速运行。
虽然 AB 为数据访问提供了多种集成选项,但我的建议——在过去 12 年从事定量研发之后——将是:去分布式(忘了花时间来实现对某些数据元素( Volume )的特定访问,而不是进一步依赖状态共享——而是开始使用智能进程间通信和智能代理间信令python
-询问,AmiBroker
-临时回复等)。
Python 方面——免费(......无论是在localhost
还是其他大陆上运行)
众所周知,根据扩展和工具/模块的可用性,这非常简单且非常灵活,这让我可以直接跳过它,您先验地知道您在 python 方面需要什么,并且大部分需求已经实现已经或很简单地添加为一些模块扩展。
AmiBroker 方面——更难的部分
Tomasz Janeczko 写了很多关于 AB 集成的特定模式 - 基于 DLL
的模式。为什么? DLL-s 允许在系统间通信架构中实现所需的平滑且完全可控的集成。
(cit.:) "... 将 ... 翻译成 C/C++ 语言并编译为
AFL
插件DLL
。这样做需要一些C/C++ 编程知识、C/C++ 编译器(可以使用免费的 Visual Studio Express 或 GNU 工具)和 AmiBroker 开发工具包 (ADK)。ADK 包含如何编写您自己的AFL
插件的说明以及可以编译的代码示例。不过需要一些 C/C++ 知识。ADK 是免费的可从http://www.amibroker.com/bin/ADK.exe 下载(自解压 exe) 要么 http://www.amibroker.com/bin/ADK.zip(zip 存档)注意:ADK 不适合初学者。它适用于程序员(即那些已经写过一些 C/C++ 代码的人)。”
小心:
当插件
DLL
使用 AmiBroker 开发工具包 (ADK) 编写时,它通常使用 Microsoft C 运行时库进行编译。 “问题”在于,根据使用的编译器,操作系统加载DLL
需要不同版本的 C 运行时。 例如,Visual C++ 6.0 链接到MSVCRT.DLL
,这在从 Windows XP 开始的所有 Windows 中都很常见,因此您可以“忘记”安装运行时。但是,当使用更新的 Visual C++ 2005、2008 或 2010 编译插件时,目标(客户端)计算机上几乎不会出现所需的 C 运行时库。 为了加载使用 VC2005 或更高版本编译的插件,必须在客户端计算机上安装适当的运行库。运行时必须与编译器版本和用于编译DLL
的最终编译器服务包完全匹配,否则操作系统将不会加载DLL
。适当的运行时 (vcredist.exe
) 位于:VCInstallDir\SDK\v2.0\Bootstrapper\Packgages\vcredist_x86
要么VCInstallDir\SDK\v2.0\Bootstrapper\Packgages\vcredist_x64
或类似的目录(取决于所使用的 VC 版本)。然后,必须将此类vcredist.exe
与 DLL 一起提供给所有客户端以进行安装。 或者,可以使用静态运行时库编译DLL
。 有一个名为 Dependency Walker (http://www.dependencywalker.com/) 的免费软件工具,允许检查给定的DLL
需要由操作系统加载。
另外——您绝对需要确保您的插件使用“多线程 DLL”运行时库。天哪,Visual C++ 编译器(2005 和 2010)不再允许选择单线程运行时。
所以 - 将您的 DLL
放入“插件”目录,如果它没有出现在数据源列表中,则意味着它的位数(32 位 / 64 位)与 AmiBroker 不匹配。
准备好使用DLL
-mode,可以为几乎任何类似的智能消息框架实现基于DLL
的包装器ZeroMQ
、nanomsg
等人实现了这一点,您的想象力是与 python
进行进一步系统间通信的唯一限制。
python
-询问,AmiBroker
-回复
AmiBroker
-询问,python
-回复
AmiBroker
-询问,remote-GPU
-回复
AmiBroker
-询问,remote-AI/ML
-预测并发布交易设置/交易管理的目标(以低延迟时间工作 - 数十个 [ms]
- - 适用于即使是低强度的 HFT 策略),
AmiBroker
-发布,remote-ComputingGrid
-处理并向其他任何人发出信号以进行任何后期处理
【讨论】:
【参考方案2】:我不确定您的方案是什么,但您有几个选择。
最终,有关股票的所有信息都存储在 AB 数据库中,您可以从 AFL 访问该数据库。因此,要将值导入 Python,您可以创建一个 Python 代码可以读取的文本文件。
您的下一个选项是直接与 AB COM 对象交互,请参阅指南。我不知道如何在 Python 中做到这一点。
这是 COM 对象指南,在引文下:
报价类代表一根价格数据
https://www.amibroker.com/guide/objects.html
下面的链接是我发布的关于 AB COM 互操作的另一个答案的想法。
Equivalent code of CreateObject in C#
赛斯莫
【讨论】:
基于文件的数据元素移交是可行的,但它是第三个千年,这种自动化可以有一个更好的定制架构,不是吗?基于 COM 的集成模型更好,同时将部署限制为与 AmiBroker 驻留在同一您可以尝试将我修改 Amibroker 示例的这个 javascript 更改为 Python。此 javascript 会将 Amibroker 数据库转储到文件中。该脚本将让您了解如何访问 Amibroker 中的数据库。
function FormatFloat( number )
number = 0.001 * Math.round( number * 1000 );
str = number.toString();
return str.substring( 0, str.indexOf(".") + 4 );
var oAB = new ActiveXObject("Broker.Application");
var fso = new ActiveXObject("Scripting.FileSystemObject");
/* Indicate the location and file name for the database dump. */
file = fso.OpenTextFile( "C:\\Info.txt", 2, true );
/* Indicate the location and name of the database to dump. */
oAB.LoadDatabase("C:\\Program Files (x86)\\AmiBroker\\Data");
var oStocks = oAB.Stocks;
var Qty = oStocks.Count;
for( i = 0; i < Qty; i++ ) /* Loop through all the stocks in the database. */
oStock = oStocks(i);
for (j = 0; j < oStocks(i).Quotations.Count; j++) /* Loop through all the ohlcv in each stock. */
oQuote = oStock.Quotations( j );
var oDate = new Date( oQuote.Date );
file.WriteLine( oStocks(i).Ticker + "," +
(oDate.getMonth()+1) + "/" + oDate.getDate() + "/" + oDate.getFullYear() + "," +
FormatFloat( oQuote.Open ) + "," +
FormatFloat( oQuote.High ) + "," +
FormatFloat( oQuote.Low ) + "," +
FormatFloat( oQuote.Close ) + "," +
Math.round( oQuote.Volume ) );
file.Close();
WScript.Echo("Export finished" );
【讨论】:
以上是关于使用 python 读取 Amibroker 价格交易量数据的主要内容,如果未能解决你的问题,请参考以下文章
请教商品列表保存在json文件中,如何在python中读取文件中并保存到字典中