1

我很难得到并回答这个问题,我真的非常感谢一些帮助。

我已经在这方面工作了两个多星期,没有取得任何进展。

我想使用 c# 向 amibroker 添加一行股票数据,但我找不到关于如何在 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); 

有人能帮我一下吗?

谢谢

4

2 回答 2

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 组件时编写更简洁的代码。

于 2010-05-31T02:58:18.873 回答
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/

于 2017-06-16T16:19:49.797 回答