我很难得到这个问题的答案,我真的,真的很感谢在这方面的一些帮助。
我已经在这上面两个多星期了,没有任何进展。
我想使用C#向c#中添加一行股票数据,但我就是找不到一个明确的响应来说明如何在add中实例化它。
在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); 有人能帮我吗?
谢谢
发布于 2010-05-31 10:58:19
VB代码对与"COM IDispatch“兼容的组件使用称为后期绑定的东西。C# (直到C#版本3)不支持后期绑定。C#编译器只编译它知道如何绑定的代码(称为早期绑定)。
要执行您想要执行的操作,通过Visual Studio生成代理dll会更容易-在项目上选择add reference,然后选择选项卡COM,然后在列表中搜索该ami broker组件。这将生成一个代理dll,您可以使用与您为VB显示的代码类似的代码对其进行编程。
在C# 3.0中,您会发现有时必须使用Type.Missing,并且必须进行一些额外的显式强制转换,即使您认为这似乎不符合逻辑。
C# 4.0有一个叫做dynamic的东西,它允许您在访问COM组件时编写更干净的代码。
发布于 2017-06-17 00:19:50
代码请看我的答案:
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/
https://stackoverflow.com/questions/2940375
复制相似问题