使用python读取Amibroker价格数据

时间:2016-03-31 12:53:16

标签: python stocks trading amibroker

我想使用python阅读Amibroker股票代码的价格数据。我在谷歌上找不到任何有用的东西。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

Cool:只是不要犹豫要完全打开一盒美味的糖果

AmiBroker,正如其他交易框架所做的那样,可以提供数据,但它是一个紧凑的(~3.5 MB .EXE + .DLL s)性能优化的可执行文件,与Java或Java不同。 NET程序,要求任何内部VM在字节码级别上解释用户进程,但在机器代码级别上运行。

虽然AB为数据访问提供了多种集成选项,但我的建议 - 在过去12年中用于量化R& D之后 - 将是: go distributed (忘记花时间实现对某些数据元素(卷)的特定访问,而不是进一步依赖状态共享 - 而是开始使用智能进程间通信和智能代理间信令 { {1}} -asks, python -replies ad-hoc等。)。

Python方面 - 免费(...可以在AmiBroker或其他大陆上运行)

根据扩展和工具/模块可用性,这已经非常简单且非常灵活,这让我可以直接跳过它,你可以更好地了解python方面你需要的东西,并且已经实现了大部分需求已经或者很简单地添加为几个模块扩展。

AmiBroker方面 - 更难的部分

Tomasz Janeczko写了很多关于AB集成的特定模式 - 基于 localhost 的模式。为什么? DLL-s允许在系统到系统通信体系结构中进行平滑且完全可控的集成。

  

(引用:)" ...翻译...转换为C / C ++语言并编译为DLL插件 AFL 。这样做需要一些C / C ++编程知识,C / C ++编译器(可以使用免费的Visual Studio Express或GNU工具)和AmiBroker开发工具包( ADK )。

ADK 包含如何编写自己的DLL插件以及可以编译的代码示例的说明。但是需要一些C / C ++知识。

   ADK 可从中免费下载   http://www.amibroker.com/bin/ADK.exe(自我提升exe)   要么   http://www.amibroker.com/bin/ADK.zip(zip档案)

  注意:ADK 不适合初学者。它适用于程序员(即那些已经在他们的生活中编写过一些C / C ++代码的人)。"

小心:

  

当使用AmiBroker开发工具包( ADK )编写插件AFL时,它通常使用Microsoft C运行时库进行编译。 “问题”在于,根据所使用的编译器,操作系统要加载DLL需要不同版本的C运行时。

  例如,Visual C ++ 6.0链接DLL,这是从Windows XP开始在所有Windows中常见的,因此您可以“忘记”安装运行时。但是当使用更新的Visual C ++ 2005,2008或2010编译插件时,目标(客户端)计算机上几乎不存在所需的C运行时库。   

  要加载使用VC2005或更高版本编译的插件,必须在客户端计算机上安装正确的运行时库。运行时必须与用于编译MSVCRT.DLL的编译器版本和最终编译器Service Pack完全匹配,否则操作系统将不会加载DLL。适当的运行时间(DLL)位于:
vcredist.exe   要么   
VCInstallDir\SDK\v2.0\Bootstrapper\Packgages\vcredist_x86   

  或类似的目录(取决于使用的VC版本)。然后,此类VCInstallDir\SDK\v2.0\Bootstrapper\Packgages\vcredist_x64必须随DLL一起提供给所有客户端以进行安装。   

  或者可以使用静态运行时库编译vcredist.exe。   

  有一个名为Dependency Walker(http://www.dependencywalker.com/)的免费工具,可以检查操作系统需要加载的DLL

Plus - 您绝对需要确保您的插件使用“多线程DLL”运行时库。 Godd的新闻是,Visual C ++编译器(2005年和2010年)不再允许选择单线程运行时。

所以 - 将你的DLL放入“插件”目录中,如果它没有显示在数据源列表中,则意味着它的位数(32位/ 64位)与AmiBroker目录不匹配。

准备好DLL - 模式后,可以为几乎所有智能消息传递框架实现基于DLL的包装器 DLL ,< strong> ZeroMQ 等已经实现了这一点,您的想象力是与 nanomsg 进一步进行系统间通信的唯一限制。

  • python -asks, python -replies
  • AmiBroker -asks, AmiBroker -replies
  • python -asks, AmiBroker -replies
  • remote-GPU -asks, AmiBroker -predicts并发布交易设置/交易管理的目标(适用于低延迟时间 - - 数十remote-AI/ML - 适用于甚至低强度的HFT策略),
  • [ms] - 发布, AmiBroker - 处理并向任何其他任何后处理人员发出信号

答案 1 :(得分:1)

我不确定你的情况是什么,但你有几个选择。

最终,存储在库存中的所有信息都在AB数据库中,您可以从AFL访问该数据库。因此,要将值传递给Python,您可以创建一个Python代码可以读取的文本文件。

您的下一个选项是直接与AB COM对象进行交互,请参阅指南。我不知道如何在Python中完成。

这是COM对象指南,在Quotation:

  

报价类代表一栏价格数据

https://www.amibroker.com/guide/objects.html

以下链接是我发布的关于AB COM互操作的另一个答案的想法。

Equivalent code of CreateObject in C#

Sethmo

答案 2 :(得分:1)

您可以尝试将我修改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" ); ​