使用 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 + .DLLs)、性能优化的可执行文件,不像 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的包装器ZeroMQnanomsg 等人实现了这一点,您的想象力是与 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 驻留在同一 上的 python,这限制了处理性能(+引入了对拥有整个自上而下的基于 COM 的集成路径的最终依赖在不久的将来总是可用 = (Microsoft O/S+API +AmiBroker +(python)win32com.client) 如此激动人心的未来(发生在 Vista64 中未实现的 DDE)【参考方案3】:

您可以尝试将我修改 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 价格交易量数据的主要内容,如果未能解决你的问题,请参考以下文章

Uniswap:如何使用 API 读取代币价格

请教商品列表保存在json文件中,如何在python中读取文件中并保存到字典中

用python爬虫爬取携程网国内租车怎么获取所在地址的车辆信息、价格还有评分并安型号分类提取出来?

AWS - dynamoDB 价格和使用情况

阅读价格受苦的价值观

Python读取excel表格时,意外的深入理解info字典问题