Чтение данных об объеме цен Amibroker с помощью python

Я хотел бы прочитать данные об объеме цен на символы акций Amibroker с помощью python. Я не могу найти в Google ничего полезного для этого. Кто-нибудь может помочь?


person user781486    schedule 31.03.2016    source источник
comment
На самом деле это не вопрос кодирования. stackoverflow.com/help/mcve. Это может помочь: stackoverflow.com/questions/527703/   -  person joel goldstick    schedule 31.03.2016


Ответы (3)


Cool: Только не постесняйтесь полностью открыть коробку вкусных конфет

AmiBroker, как и другие торговые платформы, может предоставлять данные, но это компактный (~ 3,5 МБ .EXE + .DLLs) исполняемый файл с оптимизированной производительностью, который, в отличие от программ Java или .NET, не требует, чтобы какая-либо внутренняя виртуальная машина интерпретировала пользовательские данные. обрабатывает на уровне байт-кода, но работает на полную мощность на уровне машинного кода.

Хотя AB предлагает несколько вариантов интеграции для доступа к данным, мой совет - после того, как я провел последние 12 лет в количественных исследованиях и разработках - был бы: распространяйте (забудьте потратить свои время реализовать только конкретный доступ к некоторому элементу данных (том) и больше не полагаться на совместное использование состояний - лучше начать использовать интеллектуальную межпроцессную связь и интеллектуальную межагентную сигнализацию python -задач , AmiBroker - специальные ответы и т. д.).

Сторона Python - бесплатно (... будь он запущен на localhost или другом континенте)

Это, как известно, довольно просто и оооочень гибко как с точки зрения расширения, так и с точки зрения доступности инструментов / модулей, что позволяет мне сразу пропустить его здесь, вы априори лучше знаете, что вам нужно на стороне Python, и большинство потребностей уже реализованы или уже реализованы. довольно просто добавлено как несколько расширений модуля.

Сторона AmiBroker - самое сложное

Томаш Янечко много писал об особом способе интеграции AB - на основе DLL. Почему? DLL обеспечивают плавную и полностью управляемую интеграцию, необходимую в архитектуре межсистемного взаимодействия.

(cit. :) "... перевести ... на язык C / C ++ и скомпилировать как AFL плагин DLL. Для этого требуются некоторые знания программирования C / C ++, Компилятор C / C ++ (можно использовать бесплатные инструменты Visual Studio Express или GNU) и AmiBroker Development Kit (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 Development Kit (ADK), он обычно компилируется с библиотекой времени выполнения Microsoft C. «Проблема» заключается в том, что в зависимости от используемого компилятора для загрузки DLL операционной системой требуются разные версии среды выполнения C.

Например, Visual C ++ 6.0 ссылается на MSVCRT.DLL, который обычно встречается во всех Windows начиная с Windows XP, чтобы можно было «забыть» об установке среды выполнения. Но когда плагин скомпилирован с более поздней версией 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 в каталог «Plugins», и если он не отображается в списке источников данных, это означает, что его разрядность (32 бит / 64 бит) не соответствует разрядности AmiBroker.

Имея DLL-режим, готовый к использованию, можно реализовать оболочку на основе DLL практически для любой инфраструктуры интеллектуального обмена сообщениями, например ZeroMQ, nanomsg и др., И, достигнув этого, ваш воображение - единственное ограничение в дальнейшем межсистемном взаимодействии с python.

  • python -запросы, AmiBroker -ответы
  • AmiBroker -запросы, python -ответы
  • AmiBroker -запросы, remote-GPU -ответы
  • AmiBroker -asks, remote-AI/ML -прогнозирует и публикует цели для настройки / управления торговлей (работает с малым временем задержки - десятки [ms] - подходит даже для малых интенсивность HFT-стратегий),
  • AmiBroker -публикует, remote-ComputingGrid -процессы и сигнализирует кому-либо еще о любой постобработке
person user3666197    schedule 31.08.2016

Я не уверен, каков ваш сценарий, но у вас есть несколько вариантов.

В конечном итоге вся информация, хранящаяся об акциях, находится в базе данных AB, к которой вы можете получить доступ из вашего AFL. Итак, чтобы получить значение в Python, вы можете создать текстовый файл, который может читать ваш код Python.

Ваш следующий вариант - напрямую взаимодействовать с объектом AB COM, см. Руководство. Я не знаю, как это можно сделать в Python.

Вот руководство по COM-объекту в разделе "Цитата":

Класс котировок представляет собой один бар ценовых данных.

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

Ссылка ниже - это идея из другого ответа, который я опубликовал относительно взаимодействия AB COM.

Эквивалентный код CreateObject в C #

Сетмо

person Sethmo011    schedule 04.04.2016
comment
Передача элементов данных на основе файлов возможна, но это 3-е тысячелетие, и такая автоматизация могла бы иметь более адаптированную архитектуру, не так ли? Модель интеграции на основе COM является на шаг лучше, в то время как развертывание ограничивается python, находящимся на том же ‹localhost›, что и AmiBroker, что ограничивает производительность обработки (+ вводит окончательную зависимость от наличия всего пути интеграции на основе COM сверху вниз всегда доступен как в ближайшем, так и в будущем = (Microsoft O / S + API + AmiBroker + (python) win32com.client), так что захватывающее будущее (случилось с DDE, не реализованным в Vista64)) - person user3666197; 07.09.2016

Вы можете попробовать изменить этот 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)\\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" ); ​

person Peter    schedule 18.10.2017