使用python阅读Amibroker价格数据
我想用python读取Amibroker股票代码的价格数据。 我无法在Google上找到任何有用的信息。 任何人都可以帮忙
Cool:
只是不要犹豫,完全打开美味的糖果盒
与其他交易框架一样,AmiBroker可以提供数据,但它是一个紧凑的(〜3.5 MB .EXE
+ .DLL
),性能优化的可执行文件,与Java或.NET程序不同,它不需要任何内部VM来解释在字节码级别的用户进程,但是在机器代码级别上运行。
尽管AB为数据访问提供了多种集成选项,但我的建议 - 在花费大约12年的时间进行定量研发之后 - 将会是: 去分布式 (忘记花时间去实现对某些数据元素的特定访问) ),而不是进一步依赖状态共享 - 而是开始使用智能进程间通信和智能代理间信令python
-asks, AmiBroker
-replies ad-hoc等)。
Python方面 - 免费(不管它在localhost
或其他大陆上运行)
据了解,这非常简单并且非常灵活,无论是扩展还是工具/模块可用性,都可以让我在这里直接跳过它,您更清楚地知道在Python端需要什么,并且大部分需求已经被实现或者是相当简单地添加为几个模块扩展。
AmiBroker方面 - 更难的部分
Tomasz Janeczko写了很多关于AB集成的特定模式 - 基于DLL
的模式。 为什么? DLL-s允许在系统到系统通信体系结构中实现平滑和完全可控的集成。
(引用:)“......将...翻译为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(self-extracing exe)或http://www.amibroker.com/bin/ADK.zip(zip档案)
注意:ADK不适合初学者。 它适用于程序员(即对于已经在其生活中编写了一些C / C ++代码的人)。“
小心:
当使用AmiBroker开发工具包( ADK )编写插件DLL
,它通常使用Microsoft C运行时库进行编译。 “问题”在于,根据所使用的编译器,操作系统要加载的DLL
需要不同版本的C运行DLL
。
例如Visual C ++ 6.0链接针对MSVCRT.DLL
,这是Windows XP中所有Windows中常见的,因此您可以“忘记”安装运行时。 但是,当使用更新的Visual C ++ 2005,2008或2010编译插件时,所需的C运行时库几乎不会出现在目标(客户端)计算机上。
为了加载使用VC2005或更高版本编译的插件,必须在客户端计算机上安装适当的运行时库。 运行时必须与用于编译DLL
的编译器版本和最终编译器服务包完全匹配,否则操作系统将不会加载DLL
。 适当的运行时( vcredist.exe
)在:
VCInstallDirSDKv2.0BootstrapperPackgagesvcredist_x86
或
VCInstallDirSDKv2.0BootstrapperPackgagesvcredist_x64
或类似的目录(取决于正在使用的VC版本)。 然后,这样的vcredist.exe
必须随DLL一起提供给所有客户端进行安装。
或者可以使用静态运行时库来编译DLL
。
有一个称为Dependency Walker(http://www.dependencywalker.com/)的免费工具,它允许检查操作系统需要加载的DLL
。
另外 - 你绝对需要确保你的插件使用“Multithreaded DLL”运行时库。 Godd的消息是,Visual C ++编译器(2005和2010)不允许再选择单线程运行时。
所以 - 把你的DLL
放到“Plugins”目录下,如果它没有出现在数据源列表中,这意味着它的位(32位/ 64位)与AmiBroker不匹配。
让DLL
模式准备好使用,可以实现基于DLL
的包装器,几乎可以用于任何类似ZeroMQ
, nanomsg
等的智能消息框架,并且已经实现了这一点,您的想象力是进一步系统间通信的唯一限制。 python
。
python
-asks, AmiBroker
-replies AmiBroker
-asks, python
-replies AmiBroker
-asks, remote-GPU
-replies AmiBroker
-asks, remote-AI/ML
预测并发布贸易设置/贸易管理目标(低延迟时间 - 数十[ms]
- 适用于低强度HFT策略), AmiBroker
发布remote-ComputingGrid
AmiBroker
进程和信号给任何人进行任何后期处理 我不确定你的场景是什么,但你有几个选择。
最终,存储在股票上的所有信息都在AB数据库中,您可以从AFL访问该数据库。 因此,为了将价值转化为Python,您可以创建一个文本文件,以便您的Python代码可以读取。
您的下一个选择是直接与AB COM对象交互,请参阅指南。 我不知道如何在Python中完成。
以下是Quotation下的COM对象指南:
报价类表示一个价格数据柱
https://www.amibroker.com/guide/objects.html
下面的链接是我发布的关于AB COM互操作的另一个答案的一个想法。
C#中CreateObject的等效代码
Sethmo
你可以尝试改变这个JavaScript,我修改Amibroker的例子到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)AmiBrokerData");
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" );
链接地址: http://www.djcxy.com/p/32991.html