我很难得到并回答这个问题,我真的非常感谢你们的帮助。
我已经有两个多星期没有进展了。
我想使用c#向amibroker添加一行库存数据,但我无法找到关于如何在C#中实例化它的CLEAR响应。
在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 :(得分:0)
VB代码使用称为“COM IDispatch”兼容组件的后期绑定。 C#不支持延迟绑定(直到C#版本3)。 C#编译器只编译它知道如何绑定的代码(称为早期绑定)。
要做你想做的事情,通过Visual Studio生成代理dll会更容易 - 在项目上选择添加引用,然后选择标签 COM ,然后在列表中搜索该ami代理组件。这将生成一个代理dll,您可以使用与您为VB显示的代码类似的代码进行编程。
在C#3.0中,你会发现你有时必须使用Type.Missing
并且你必须做一些额外的显式转换,即使你认为它看起来不合逻辑。
C#4.0有一个名为dynamic
的东西,它允许你在访问COM组件时编写更清晰的代码。
答案 1 :(得分: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
编辑:这也可能有助于导入
http://www.amibroker.com/kb/2016/01/23/how-to-create-custom-import-definition-for-ascii-importer/