使用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的包装器,几乎可以用于任何类似ZeroMQnanomsg等的智能消息框架,并且已经实现了这一点,您的想象力是进一步系统间通信的唯一限制。 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

    上一篇: Read Amibroker price volume data using python

    下一篇: Converting formdata NameValueCollection to object