2010-05-30 5 views
1

Мне было трудно получить и ответить на это, и я действительно очень благодарен за помощь.Добавление данных запаса в amibroker с использованием C#

Я был на этом более 2 недель без прохода.

Я хочу использовать C# для добавления строки данных запаса в amibroker, но я просто не могу найти ответ CLEAR о том, как создать экземпляр в C#.

В VB я сделал бы это что-то вроде;

Dim AmiBroker = CreateObject("Broker.Application")     
sSymbol = ArrayRow(0).ToUpper 
Stock = AmiBroker.Stocks.Add(sSymbol) 
iDate = ArrayRow(1).ToLower 
quote = Stock.Quotations.Add(iDate) 
quote.Open = CSng(ArrayRow(2)) 
quote.High = CSng(ArrayRow(3)) 
quote.Low = CSng(ArrayRow(4)) 
quote.Close = CSng(ArrayRow(5)) 
quote.Volume = CLng(ArrayRow(6)) 

Проблема в том, что CreateObject не будет работать на C# в этом экземпляре.

Я нашел код ниже где-то в сети, но я не могу понять, как достичь вышеуказанного.

Type objClassType; 
objClassType = Type.GetTypeFromProgID("Broker.Application"); 
// Instantiate AmiBroker 
objApp = Activator.CreateInstance(objClassType); 
objStocks = objApp.GetType().InvokeMember("Stocks", BindingFlags.GetProperty,null, objApp, null); 

Может ли кто-нибудь помочь мне здесь?

Благодаря

ответ

0

В.Б. код использует нечто, называемое позднее связывание против совместимого компонента «COM IDispatch». Позднее привязка не поддерживается C# (до версии C# 3). Компилятор C# только компилирует код, который он знает, как привязывается к (называемому ранним связыванием).

Чтобы сделать то, что вы хотите сделать, это было бы легче сгенерировать прокси-DLL с помощью Visual Studio - выбрать добавить ссылку на проект, а затем выберите вкладку COM, а затем искать для этого Ами брокера компонента в списке. Это создаст прокси dll, которую вы можете запрограммировать против использования аналогичного кода, как тот, который вы показали для VB.

В C# 3.0 вы обнаружите, что вам иногда приходится использовать Type.Missing и что вам нужно сделать какое-то дополнительное явное кастинг, даже если вы думаете, что это не кажется логичным.

В C# 4.0 есть что-то по имени dynamic, что позволяет писать намного более чистый код при доступе к COM-компонентам.

0

Смотрите мой ответ здесь код:

https://stackoverflow.com/a/20101274/1581495

Я использую этот метод в настоящее время. Я сохраняю текстовые файлы из MetaTrader, а затем импортирую их в реальном времени в AmiBroker. Выполнение этого способа по существу похоже на импорт котировок с использованием импорта ASCII, поэтому вам нужно убедиться, что вы подготовили файл формата импорта. Для меня, линия выборки данных выглядит следующим образом:

EURAUD,20170607,00:00:00.4885,1.50174,1.50231,1 //Symbol, Date, Time (HH:MM:SS.tttt), Bid, Ask, Volume 

Я использую файл default.format, который выглядит следующим образом:

$FORMAT TICKER,DATE_YMD,TIME,CLOSE,AUX1,VOLUME 
$SEPARATOR , 
$AUTOADD 0 
$BREAKONERR 0 
$SKIPLINES 0 

Найти руководство и некоторые примеры здесь на импорте и форматов :

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

EDIT: это также может помочь с импортом

http://www.amibroker.com/kb/2016/01/23/how-to-create-custom-import-definition-for-ascii-importer/