2010-05-30 5 views
1

J'ai eu du mal à obtenir et répondre à cela et je voudrais vraiment, vraiment apprécier de l'aide à ce sujet.ajouter des données de stock à amibroker en utilisant C#

J'ai été sur cela pendant plus de 2 semaines sans progrès. Je veux utiliser C# pour ajouter une ligne de données de stock à amibroker mais je ne peux pas trouver une réponse CLEAR sur la façon de l'instancier en C#.

En VB, je le ferais quelque chose comme;

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)) 

Le problème est que CreateObject ne fonctionnera pas en C# dans ce cas.

J'ai trouvé le code ci-dessous quelque part en ligne, mais je ne peux pas sembler comprendre comment réaliser ce qui précède.

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

Quelqu'un peut-il m'aider ici?

Merci

Répondre

0

Le code VB utilise ce qu'on appelle la liaison tardive contre un composant compatible "COM IDispatch". La liaison tardive n'est pas supportée par C# (jusqu'à C# version 3). Le compilateur C# ne compile que du code, il sait comment lier à (appelé early bind).

Pour faire ce que vous voulez faire, il serait plus facile de générer un dll proxy via Visual Studio - sélectionnez ajouter une référence sur un projet, puis sélectionnez l'onglet COM, puis recherchez ce composant courtier ami dans la liste. Cela va générer une DLL proxy que vous pouvez programmer en utilisant un code similaire à celui que vous avez montré pour VB. En C# 3.0, vous découvrirez que vous devez parfois utiliser Type.Missing et que vous devez faire un casting explicite supplémentaire, même si vous pensez que cela ne semble pas logique.

C# 4.0 a quelque chose appelé dynamic, qui vous permet d'écrire du code beaucoup plus propre lors de l'accès aux composants COM.

0

Voir ma réponse ici pour le code:

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

J'utilise actuellement cette méthode maintenant. Je sauvegarde les fichiers texte de MetaTrader puis je les importe en temps réel dans AmiBroker. Le faire de cette façon est essentiellement comme importer des citations en utilisant l'importation ASCII, donc vous devrez vous assurer que vous préparez votre fichier de format d'importation. Pour moi, une ligne de données d'échantillons ressemble à ceci:

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

J'utilise le fichier default.format, qui ressemble à ceci:

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

Trouver le guide et quelques exemples ici sur l'importation et formats :

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

EDIT: cela pourrait aussi aider à importer

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

Questions connexes