Читайте данные об объеме цен Amibroker, используя python
Я хотел бы прочитать данные об объеме цен на биржевые символы Amibroker, используя python. Я не могу найти ничего полезного в Google для этого. Кто-нибудь может помочь?
4 ответа
Cool:
Только не стесняйтесь, чтобы полностью открыть коробку вкусных конфет
AmiBroker, как и другие торговые системы, может предоставлять данные, но это компактно ( ~ 3,5 МБ .EXE
+ .DLL
s) исполняемый файл с оптимизированной производительностью, который, в отличие от программ на Java или.NET, не требует какой-либо внутренней виртуальной машины для интерпретации пользовательских процессов на уровне байт-кода, но работает на полную мощность на уровне машинного кода.
Несмотря на то, что AB предоставляет несколько вариантов интеграции для доступа к данным, мой совет - после того, как мы потратили около 12 лет на количественные исследования и разработки, - будет следующим: распределитесь (не тратьте свое время на реализацию только определенного доступа к некоторому элементу данных (том) и больше не полагаться на совместное использование состояний - скорее начните использовать интеллектуальные межпроцессные коммуникации и интеллектуальную межагентскую сигнализацию python
-asks, AmiBroker
-отвечает ad-hoc и т. д.).
Сторона 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
быть загруженным операционной системой.
Например 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
-asks,AmiBroker
-repliesAmiBroker
-asks,python
-repliesAmiBroker
-asks,remote-GPU
-repliesAmiBroker
-asks,remote-AI/ML
-прогнозирует и публикует целевые показатели для настройки торговли / управления торговлей (работает с малым временем ожидания - десятки[ms]
- подходит даже для стратегий HFT низкой интенсивности),AmiBroker
-publishes,remote-ComputingGrid
-процессы и сигналы кому-либо еще для любой последующей обработки
Вы можете попробовать изменить этот 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" );
Я не уверен, какой у вас сценарий, но у вас есть несколько вариантов.
В конечном итоге вся информация, хранящаяся об акции, находится в базе данных AB, к которой вы можете получить доступ из своего AFL. Таким образом, чтобы получить значение в Python, вы можете создать текстовый файл, который может прочитать ваш код Python.
Следующим вариантом будет непосредственное взаимодействие с объектом COM COM, см. Руководство. Я не знаю, как это можно сделать в Python.
Вот руководство по объектам COM под цитатой:
Класс предложения представляет один столбец данных о ценах
https://www.amibroker.com/guide/objects.html
Ссылка ниже - идея из другого ответа, который я разместил относительно взаимодействия AB COM.
Эквивалентный код CreateObject в C#
Sethmo
//Price Volume of the ticker (Formula: Close x Volume)
Price_Volume = C*V
//Price Volume of specific ticker (eg. SPY) (Formula: Close x Volume)
Price_Volume_SPY = foreign("SPY","C")*foreign("SPY","V")
//Yesterday Price Volume of specific ticker (eg. SPY) (Formula: Close x Volume)
Yesterday_Price_Volume_SPY = Ref(foreign("SPY","C"),-1)*Ref(foreign("SPY","V"),-1)