我想使用python阅读Amibroker股票代码的价格数据。我在谷歌上找不到任何有用的东西。有人可以帮忙吗?
答案 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等。)。
AmiBroker
或其他大陆上运行) 根据扩展和工具/模块可用性,这已经非常简单且非常灵活,这让我可以直接跳过它,你可以更好地了解python方面你需要的东西,并且已经实现了大部分需求已经或者很简单地添加为几个模块扩展。
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" );