Читайте данные об объеме цен 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 -replies
  • AmiBroker -asks, python -replies
  • AmiBroker -asks, remote-GPU -replies
  • AmiBroker -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)
Другие вопросы по тегам