Dienstag, 16. April 2024, 06:38 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

dubi

Profi

Registrierungsdatum: 1. September 2002

Beiträge: 331

1

Samstag, 6. September 2014, 10:16

DLL Rückgabewerte mit 0 füllen, aber Formelmaschine umgehen

Hallo nochmal,

In meinem Systemansatz übergebe ich der Formelmaschine (über VB.Net) unterschiedliche Indikatoren zur Berechnung. Das klappt inzwischen prima. Den Indikator-code und die Indikator-Einstellungen entwickle ich jedoch erst zur Laufzeit. Eine der dabei entstehenden Möglichkeiten ist auch, dass der Indikator schlicht "0" ist. Da das recht oft der Fall ist, suche ich eine Möglichkeit, den Rückgabewert für diese Spezialsituation unter Umgehung der Formelmaschine (die kostet Zeit) direkt auf 0 zu setzen.
Im untenstehenden Bild kann also der 1. Pfeil direkt "0" sein. Damit ich auch "0" auf der ganzen Zeitreihe im Indikator erhalte, muss ich den 2. Pfeil durchlaufen.

Soweit ich das verstehe, ist das Ergebnisfeld und die Übergabe ein Array( oder sowas?), welches in der KSEImportExport-dll defniert wurde. Seht ihr hier irgendeine Abkürzung um Rechenzeit zu sparen?

Danke und viele Grüße
-dubi

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

2

Samstag, 6. September 2014, 10:30

Du meinst wenn Formel = "" ist?

In dem Fall könntest Du einfach mit einer For i/Next Schleife von LBound() bis UBound() über das Erbenis loopen und Ergebnis(i)=0 setzen, statt es von der Formelmaschine machen zu lassen.
Gruss
Bernd

dubi

Profi

Registrierungsdatum: 1. September 2002

Beiträge: 331

3

Samstag, 6. September 2014, 10:57

Danke Bernd - ich probier das mal. Vermute, dass das ein Problem wegen dem Datentyp gibt. Ergebnis ist keine Variable sondern ein Objekt (weiss auch nicht was für eins...) und cDaten eine KSE.ImportExport7.DataCollection (was das auch sein mag??). Hier verlassen mich meine Programmierkenntnisse 8| .
Melde mich wieder.

dubi

Profi

Registrierungsdatum: 1. September 2002

Beiträge: 331

4

Samstag, 27. September 2014, 23:53

Hallo,

Das hat leider wie erwartert nicht funktioniert. Vermutlich kann hier nur Herr Knöpfel weiterhelfen bzw. mitteilen, dass das im bestehenden Konstrukt nicht möglich ist. Könnten Sie hierzu etwas posten, Herr Knöpfel?

Danke und viele Grüße
-dubi

Investox

Administrator

Registrierungsdatum: 31. August 2002

Beiträge: 5 680

5

Montag, 29. September 2014, 20:26

Hallo,

es sollte eigentlich so gehen, wie es Bernd beschreibt:

Zitat

For i/Next Schleife von LBound() bis UBound() über das Ergebnis loopen und Ergebnis(i)=0 setzen


Welches Problem genau tritt dabei auf, und mit welchem Code haben Sie es versucht?

Viele Grüße
Andreas Knöpfel

dubi

Profi

Registrierungsdatum: 1. September 2002

Beiträge: 331

6

Dienstag, 30. September 2014, 18:06

Hallo Herr Knöpfel
Danke für die Antwort. Ich hab's mit folgendem Code versucht:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Public Class MyMACD
    <System.Runtime.InteropServices.ComVisible(True)> Public Function Calculate(ByRef cDaten As KSEImportExport7.KSEDataCollection, ByRef Parameter As Object, ByRef Ergebnis As Object) As Integer
        On Error GoTo FehlerAllgemein

        ' Variablen-Deklarationen
        Dim Formel As String
        Dim IndiArt As Long
        Dim ErgID As String
        Dim i As Long

        IndiArt = Parameter(1) ' Übergebener Parameter

        On Error GoTo FehlerAllgemein
        Formel = "MACD(open)"
        ' Die Formel von der Formelmaschine berechnen lassen:
        ErgID = "_@@TempErg" & Format$(Rnd() * 30000, "00000") & "@" & Format$(Rnd() * 30000, "00000") & "@_"
        Dim Formelmaschine As Object
        If IndiArt = 1 Then  ' Berechne den MACD
            Formelmaschine = cDaten("#_InvFormelMaschine#")
            If Formelmaschine.BerechneInvestoxFormel(Formel, ErgID) = True Then
                Ergebnis = cDaten(ErgID)
                cDaten.Remove(ErgID)
                Calculate = True ' Berechnung OK
            Else
                Calculate = Formelmaschine.FehlerNr
            End If
        Else 'IndiArt=0 ->> Gebe eine Zeitreihe mit "0" zurück
            For i = LBound(Ergebnis) To UBound(Ergebnis)
                Ergebnis(i) = 0
            Next i
        End If

Rücksprung:
        Exit Function

FehlerAllgemein:
        Calculate = ErrExternIndiFehler
        Resume Rücksprung

    End Function

End Class


Wenn der Parameter IndiArt 1 ist, soll einfach der MACD berechnet werden, wenn 0, dann anstelle der MACD-Werte soll direkt eine Zeitreihe mit "0" zurückgegeben werden. Wie muss das untere Konstrukt genau aussehen. So wie von mir geschrieben geht's leider nicht (Kompilieren ok, aber Fehlermeldung in Investox).

Danke und viele Grüße
-dubi

Bernd

Experte

Registrierungsdatum: 5. Juni 2005

Beiträge: 4 070

Wohnort: Iringsweg

7

Dienstag, 30. September 2014, 20:34

aber Fehlermeldung in Investox

Ich weiss jetzt nicht, ob Herr Knöpfel sich die Fehlermeldung in Investox aufgrund Deines Codes denken kann. Ich kann es nicht; generell scheint es mir sachdienlich wenn man Support erhalten möchte, selbst wenn er nicht gratis wäre, proaktiv soviel wie möglich Informationen zu liefern. Um so schneller würdest Du Dein Ziel erreichen.

(Ich versuche, es einmal weniger professionell zu formulieren, obwohl ich damit hier oft schon schlechte Erfahrungen gemacht habe: Du willst Hilfe, aber man muss Dir alles, was Dir helfen könnte, erst aus der Nase ziehen.)
Gruss
Bernd

dubi

Profi

Registrierungsdatum: 1. September 2002

Beiträge: 331

8

Dienstag, 30. September 2014, 21:08

Fair enough.... Danke Bernd.

Sorry - sehe gerade im Post, dass das mit dem Einfügen der Bilder nicht so gut geklappt hat. Aber so wie's dargestellt ist, sollte es trotzdem verständlich sein - hoffe ich.

Der Indikator ist definiert wie unten dargestellt.

[img]http://investoxforum.de/index.php?page=Attachment&attachmentID=7059&h=0f29a34395c0d582e85ee9edd2dfd88f48f8dedf[/img]
[img]http://investoxforum.de/index.php?page=Attachment&attachmentID=7060&h=fb7a0d0b47d2af0adb826b6a572d10ca148e748a[/img]

Wenn ich den Indikator mit dem Parameter 1 übergebe, wird der MACD gezeichnet.
[img]http://investoxforum.de/index.php?page=Attachment&attachmentID=7061&h=5a19f7f579d04af3c88182277690eedeb65d703b[/img]

Bei Parameter 0 gibts diesen Fehler (leider nicht sehr aussagekräftig).
[img]http://investoxforum.de/index.php?page=Attachment&attachmentID=7062&h=e791379e5afd2f23ef1d2acb5d6470430c3be9dd[/img]
»dubi« hat folgende Bilder angehängt:
  • 30-09-_2014_20-57-20.png
  • 30-09-_2014_20-58-03.png
  • 30-09-_2014_20-58-44.png
  • 30-09-_2014_20-53-47.png

Trader

Fortgeschrittener

Registrierungsdatum: 2. März 2012

Beiträge: 110

9

Dienstag, 30. September 2014, 21:22

Ich denke es fehlt ein "Calcualate=True" nach der Schleife

dubi

Profi

Registrierungsdatum: 1. September 2002

Beiträge: 331

10

Dienstag, 30. September 2014, 21:27

Klasse!!!! Das war es wirklich. Vielen Dank Trader!!!