Einloggen Suche | Aktive Themen
IWacthListe2.Remove Optionen
Stephan Oelze
Geschrieben: Wednesday, June 21, 2017 5:44:44 PM
Gruppen: Kunde

Beiträge: 16

Hallo!

Ich habe Probleme auf das IWatchliste2 Objekt zuzugreifen. Ich habe nun den ganzen tag damit verbracht Smile).
Aus der Dokumentation geht hervor das unter folgender Hirarchie IWacthListe2 abrufbar wäre:

DataBase.Watch(1) - in dem Fall für Watchliste 1.

Zum test habe ich eine Watchliste erstellt mit namen test. Es enthält 4 Elemente.

database.Watch(10).Name

gibt den korrekten Namen aus ergo habe ich IWatchliste ergattert und nicht iWatchListe2. Wie entlocke ich der com Schnittstelle das IWatchliste2 Objekt. Denn in der Dokumentation steht:

"Ermöglicht den Zugriff auf eine Watchliste. Das zurückgegebene Objekt ist vom Typ IWatchListe oder IWatchListe2. Welches Objekt zurückgegeben wird, ist von der Implementierung abhängig."

Das mag für den Ersteller eine plausible Aussage sein. Ich für meinen Teil verstehe es nicht. Smile
Warum nicht einfach, wenn es denn schon zwei Listen braucht, database.Watch2(num)?

Bitte um Ratschlag.

Danke und Grüße


Daniel Beyersdorf
Geschrieben: Thursday, June 22, 2017 10:00:44 AM

Gruppen: Mitarbeiter

Beiträge: 54

Tai-Pan RealtimeTai-Pan End-of-Daymarket makerbis. Realtime-Terminal
Hallo Herr Oelze,

Ganz spontan ist mir das Objekt IWatchliste2 nur aus TAI-PAN Realtime bekannt - daher antworte hier mit bezug auf TAI-PAN Realtime-Schnittstelle.

Um auf die eigenschaften einer Watchliste zuzugreifen benötigen sie das Objekt IWatchliste.

C#Beispiel:

Zitat:
IWatchListe TPRTWatchListe = (IWatchListe)db.get_Watch(42);
foreach(IWatchEintrag Eintrag in TPRTWatchListe)
{
//Eintrag.Aktuell
//Eintrag.AktuellZeit
//Eintrag.BezahltVolume
//Eintrag.Boerse
//Eintrag.Brief
//Eintrag.BriefVolume
//Eintrag.BriefZeit
//Eintrag.EDV
//Eintrag.FirstTickDate
//Eintrag.FullSymbol
//Eintrag.Geld
//Eintrag.GeldVolume
//Eintrag.GeldZeit
//Eintrag.Handel
//Eintrag.High
//Eintrag.ISIN
//Eintrag.Low
//Eintrag.Marktkapitalisierung
//Eintrag.Name
//Eintrag.Open
//Eintrag.OpenInterest
//Eintrag.PrevClose
//Eintrag.Stop
//Eintrag.Symbol
//Eintrag.SymbolNr
//Eintrag.Volume
//Eintrag.Waehrung
//Eintrag.WPArt
//Eintrag.Ziel
}


Um Änderungen an der Liste durchzuführen, können Sie IWatchliste2 nutzen:
Zitat:
IWatchListe2 TPRTWatchListe = (IWatchListe2)db.get_Watch(42);
//TPRTWatchListe.Add(object SymbolNr)
//TPRTWatchListe.Remove(int EintragNr)
//TPRTWatchListe.RemoveAll()


Entwicklung | Lenz+Partner GmbH | vwd group
Phone: +49 231 9153-300 | Fax: +49 231 9153-399
entwicklung@lp-software.de | www.LP-software.de | www.vwd.com
Stephan Oelze
Geschrieben: Thursday, June 22, 2017 11:02:31 AM
Gruppen: Kunde

Beiträge: 16

Hallo Herr Bayersdorf.

Ich nutze in der Tat TaiPan Realtime. Für meinen Anwendungsfall nutze ich python um an der comschnittstelle zu arbeiten. Datastream funktioniert ganz hervorragend, auch mit der Kurssuche ist alles erreicht, wie ich es mir vorgestellt habe.

Jedoch ist das mit den Watchlists noch etwas "komisch"

In meinem Fall liefert com.DataBase das DataBase Objekt zurück. Dies entspricht Ihrem
Code:
TPRTDataBase = (DataBase)TPRTObjekt.DataBase;


Wenn ich nun wie von Ihnen vorgeschlagen versuche
Code:
IWatchListe2 TPRTWatchListe = (IWatchListe2)db.get_Watch(42);

für mich zu übersetzen führt dies nicht zum Erfolg.( ??db ist com.DataBase - das DataBase Objekt?? )

Code:
com.DataBase.get_Watch(1)


führt zu : object has no attribute 'get_Watch'

Ich kann dies auch so nachvollziehen. Mit einer selbstgekneteten funktion kann ich mir alle methoden/attribute der com objekte ausgeben lassen. Das DataBase Objekt weise folgende methoden/attribute auf:

Code:
{
    'Boersen': (1, 2, (9, 0), (), 'Boersen', None),
    'DepotListen': (9, 2, (9, 0), (), 'DepotListen', None),
    'KatalogListe': (10, 2, (9, 0), (), 'KatalogListe', None),
    'Optionsscheinlisten': (12, 2, (9, 0), (), 'Optionsscheinlisten', None),
    'Serverdatum': (18, 2, (7, 0), (), 'Serverdatum', None),
    'WatchListen': (7, 2, (9, 0), (), 'WatchListen', None),
    'WertpapierArten': (2, 2, (9, 0), (), 'WertpapierArten', None),
    'Zertifikatelisten': (15, 2, (9, 0), (), 'Zertifikatelisten', None)
}


Code:
{
    <bound method IDataBase.Depot
    <bound method IDataBase.IntradayChart
    <bound method IDataBase.Katalog
    <bound method IDataBase.KursSuche
    <bound method IDataBase.Markttiefe
    <bound method IDataBase.Optionsscheinliste
    <bound method IDataBase.Suchen
    <bound method IDataBase.Watch
    <bound method IDataBase.Zertifikateliste
    <bound method DispatchBaseClass._ApplyTypes_
}


Ich habe das gefühl, ich "klopfe" an der falschen Tür?

Vielen Dank für Ihre Hilfe.

Mit freundlichen Grüßen
Stephan Oelze
Daniel Beyersdorf
Geschrieben: Thursday, June 22, 2017 11:33:57 AM

Gruppen: Mitarbeiter

Beiträge: 54

Tai-Pan RealtimeTai-Pan End-of-Daymarket makerbis. Realtime-Terminal
Stephan Oelze schrieb:

Code:
IWatchListe2 TPRTWatchListe = (IWatchListe2)db.get_Watch(42);

für mich zu übersetzen führt dies nicht zum Erfolg.( ??db ist com.DataBase - das DataBase Objekt?? )

Code:
com.DataBase.get_Watch(1)



In der Tat ist in meinem Fall 'db' das Database-Objekt.

Die Methode get_Watch ist meines Wissens nur die Methode des Database-Interfaces (IDatabase) und müsste nichts anderes sein als

Code:
IWatchListe2 TPRTWatchListe2 = (IWatchListe2)TPRTDataBase.Watch[42];


was wenn ich die Python Notation richtig verstehe nichts anderes ist als

Code:
com.DataBase.Watch[42]


der Rückgabewert müsste dann auf IWatchListe2 gecastet werden um in den Genuss der Methoden Add, Remove und RemoveAll zu kommen.

Code:
IWatchListe2(com.DataBase.Watch[42])


^^ggf so?


Entwicklung | Lenz+Partner GmbH | vwd group
Phone: +49 231 9153-300 | Fax: +49 231 9153-399
entwicklung@lp-software.de | www.LP-software.de | www.vwd.com
Stephan Oelze
Geschrieben: Thursday, June 22, 2017 12:24:24 PM
Gruppen: Kunde

Beiträge: 16

Ne, so nicht ;)

variablename = some_object_returning_thing

Ich habe versucht mit:

IWatchListe2 = com.DataBase.Watch(1)

returnt dennoch das IWatchListe statt IWatchListe2.

Im vba geht es auf diesem Weg:

Code:

Dim TPRApplication As TaiPanRealtime
Set TPRApplication = New TaiPanRealtime

Dim TPRDataBase As Database
Set TPRDataBase = TPRApplication.Database

Dim wl_1 As IWatchListe
Dim wl_2 As IWatchListe2

Set wl_1 = TPRDataBase.Watch(10)
Set wl_2 = TPRDataBase.Watch(10)


Nur im Python gibt es kein Dim.

Vielleicht so implementieren?:

wl_1 = com.DataBase.Watch(42 , 1)
wl_2 = com.DataBase.Watch(42 , 2)

dann wenn arg[1] empty arg[1] = 1 und bestehende programme blieben unberührt. consider that?

Wie erkennt denn heute Watch "am anderend ende" wer ihn gecastet hat?



Daniel Beyersdorf
Geschrieben: Thursday, June 22, 2017 12:33:53 PM

Gruppen: Mitarbeiter

Beiträge: 54

Tai-Pan RealtimeTai-Pan End-of-Daymarket makerbis. Realtime-Terminal
Ich meinte eher so:
Code:

wl_1 = IWatchListe(com.DataBase.Watch[42])
wl_2 = IWatchListe2(com.DataBase.Watch[42])


das wäre ja bei wl_2 ein Expliziter cast des Rückgabewerts auf IWatchListe2

in C# sähe das so aus:
Code:

IWatchListe w1 =  m_TPRDataBase.Watch[42];
//w1.Name
//w1.Nr
//w1.Count

IWatchListe2 w2 =  (IWatchListe2)m_TPRDataBase.Watch[42]; //mit cast auf IWatchListe2
//w2.Add
//w2.Remove
//w2.RemoveAll


Entwicklung | Lenz+Partner GmbH | vwd group
Phone: +49 231 9153-300 | Fax: +49 231 9153-399
entwicklung@lp-software.de | www.LP-software.de | www.vwd.com
Stephan Oelze
Geschrieben: Thursday, June 22, 2017 1:56:37 PM
Gruppen: Kunde

Beiträge: 16

Daniel Beyersdorf schrieb:
Ich meinte eher so:
Code:

wl_1 = IWatchListe(com.DataBase.Watch[42])
wl_2 = IWatchListe2(com.DataBase.Watch[42])



Das ist in python so nicht machbar. (IWatchListe not defined)
dort funktioniert es eher so:

some_var = some_object(arg1,arg2)

oder

some_var = some_object(arg1=15,arg2=20)

oder

some_var = some_object.some_method(some_args)

Ich komme hier irgendwie nicht weiter. Da fehlt mir anscheinend das Verständnis, wie DIM im VBA funktioniert.
Im python gibt es in Klassendefinitionen auf das "self" dies repräsentiert immer das aufrufende Objekt der Klasse.

Vielleicht fällt Ihnen dazu was ein?
Stephan Oelze
Geschrieben: Tuesday, July 25, 2017 7:33:59 PM
Gruppen: Kunde

Beiträge: 16

Da ich nun in einem anderen Zusammenhang auf eine Lösung gestoßen bin, möchte ich diese hier hinterlassen.
Es gibt in win32com modul für python ein CastTo MEthode, die einem ermöglicht das hier beschriebene Problem zu lösen.

Code:

import win32com.client
from win32com.client import CastTo
import pythoncom

tpr = win32com.client.Dispatch("TaiPanRealtime.Application")

#  liefert das Watchlist1 objekt: (verfügbar = Count | Item | Name | Nr )
wl1 = CastTo( tpr.DataBase.Watchlisten , "IWatchListe")

#  liefert das Watchlist2 objekt: (verfügbar = Add | Remove | RemoveAll)
wl2 = CastTo( tpr.DataBase.Watchlisten , "IWatchListe2")


Mit CastTo() lassen sich die Beispiel aus C# in Python übernehmen.

Grüße
Benutzer die diese Diskussion aktuell lesen
Guest

Powered by Yet Another Forum.net version 1.9.1.8 (NET v4.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.

Durch die Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zum Datenschutz finden Sie hier