Bedingungsrealisierung mit If und Datasets

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Rattenfänger.

    Bedingungsrealisierung mit If und Datasets

    Hallo,

    habe ein kleines Problem mit Bedingungsrealisierungen. Damit eine aktion ausgelöst wird müssen einige Bedingungen erfüllt sein(Logisch).
    Jedoch möchte ich die Bedingungen nicht fix programmieren, sondern etwas flexibler gestallten. Damit ich immer wieder neue bedingungen in einer Liste hinzufügen kann.
    wie jedoch geht sowas. Hier ein kleiner Programmausschnitt, damit Ihr seht was ich meine:

    VB.NET-Quellcode

    1. If ema32schluss > ema10tief And ema32schluss > ema28schluss And (ema32schluss - ema28schluss) * umrechnung > 0.25 Then
    2. If ema10hoch > ema32schluss And ema5diff = "Hoch" And bid < ema10hoch Then
    3. If RSIEMA >= 33 And RSIEMA < 33.99 Or RSIEMA >= 46 And RSIEMA < 46.99 Or RSIEMA >= 53 And RSIEMA < 53.99 _
    4. Or RSIEMA >= 56 And RSIEMA < 56.99 Or RSIEMA >= 67 And RSIEMA < 67.99 Then
    5. LLS = True
    6. buysell = "B"
    7. anzeige = "SS-LLS1_BA"
    8. makeorder = True
    9. End If
    10. End If
    11. End if


    RSIEMA; ema32schluss,ema28schluss etc. sind die variablen.

    Vorgestellt habe ich mir ein Dataset, jede Formation (als bsp. hier "SS-LLS1_BA") bekommt eine eigene Tabelle, mit den Bedingungen die erfüllt sein müssen(siehe oben).
    Geht das überhaupt?

    Gruß
    Toll !

    Hab grad gestern sowas programmiert :D

    VB.NET-Quellcode

    1. Public Sub ExportBestellung(best As ProduktBestellungRow)
    2. 'bestimmte Rows verschiedener übergeordneter Tabellen holen, auf die ggfs. zu matchen ist
    3. Dim sperrHolz = HolzArt.First(Function(rw) rw.Name Like "S*")
    4. Dim kistenAbt = Fertigung.First(Function(rw) rw.Kuerzel = "K")
    5. Dim palettenAbt = Fertigung.First(Function(rw) rw.Kuerzel = "P")
    6. 'KomponentRow-Filter mit der Signatur Func(Of KomponentRow, Boolean) formulieren
    7. Dim fGagge = Function(k As KomponenteRow) Not k.Hundegger AndAlso Not k.Lager AndAlso k.ProduktRow.IsFertigungIDNull 'Gagge-Schnitt
    8. Dim fDCW = Function(k As KomponenteRow) Not k.Hundegger AndAlso Not k.Lager AndAlso Not k.ProduktRow.IsFertigungIDNull 'DCW-Schnitt
    9. Dim fSperr = Function(k As KomponenteRow) k.HolzArtRow Is sperrHolz
    10. Dim fPaletten = Function(k As KomponenteRow) k.ProduktRow.FertigungRow Is palettenAbt
    11. Dim fKisten = Function(k As KomponenteRow) k.ProduktRow.FertigungRow Is kistenAbt
    12. 'Bestellungen durchloopen und der Export-Funktion per ParamArray ggfs. auch **mehrere** Filter übergeben
    13. For Each pst In best.GetProdBestellPostenRows
    14. Dim prod = pst.ProduktRow
    15. ExportProdSCHNITT(pst.Stueck, prod, STK_SCHNITT_1, fDCW)
    16. ExportProdSCHNITT(pst.Stueck, prod, STK_SCHNITT_2, fGagge)
    17. ExportProdSCHNITT(pst.Stueck, prod, STK_SPERR_P1, fDCW, fSperr, fPaletten)
    18. ExportProdSCHNITT(pst.Stueck, prod, STK_SPERR_P2, fGagge, fSperr, fPaletten)
    19. ExportProdSCHNITT(pst.Stueck, prod, STK_SPERR_K1, fDCW, fSperr, fKisten)
    20. ExportProdSCHNITT(pst.Stueck, prod, STK_SPERR_K2, fGagge, fSperr, fKisten)
    21. Next
    22. SaveBerichtTables()
    23. End Sub
    24. Private Sub ExportProdSCHNITT(bestellt As Integer, prod As ProduktRow, target As DataTable, ParamArray filters() As Func(Of KomponenteRow, Boolean))
    25. Dim schnitt As New STK_SCHNITT_1DataTable
    26. Dim dcw = Not prod.IsFertigungIDNull
    27. Dim filter As Func(Of KomponenteRow, Boolean) = Function(k) filters.All(Function(f) f(k)) 'viele Filter ver-undet vereinen
    28. For Each komp In prod.GetKomponenteRows.Where(filter)
    29. Dim rwS = schnitt.NewSTK_SCHNITT_1Row
    30. rwS.Stueck = CShort(bestellt * komp.ProduktStueck * komp.Stueck)
    31. rwS.Laenge = komp.Laenge
    32. rwS.Breite = komp.Breite
    33. rwS.Staerke = komp.Staerke
    34. rwS.FIndex = komp.Index
    35. rwS.Fertigung = If(dcw, prod.FertigungRow.Kuerzel, " ")
    36. rwS.Sachnummer = komp.Key
    37. rwS.GehoertZu = If(dcw, "W " & prod.Index, " ")
    38. rwS.cbm = rwS.Stueck * rwS.Laenge / 1000 * rwS.Breite / 1000 * rwS.Staerke / 1000
    39. rwS.Zukaufteil = Convert.ToInt16(komp.Zukauf)
    40. schnitt.AddSTK_SCHNITT_1Row(rwS)
    41. Next
    42. ExportToTarget(schnitt, target)
    43. End Sub
    Die Crux ist in zeile#32, wo aus vielen Filtern einer gemacht wird.

    jede Formation (als bsp. hier "SS-LLS1_BA") bekommt eine eigene Tabelle
    Das ist aber nix gutt. Das sollte man höchstwahrscheinlich besser modellieren.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    gewissermaßen reflexhaft auf deine Formulierung:
    jede Formation (als bsp. hier "SS-LLS1_BA") bekommt eine eigene Tabelle
    Offensichtlich gibt es eine Entität "Formation", und "SS-LLS1_BA" scheint eine Eigenschaft eines Datensatzes davon zu sein.
    Also sollte es eine Tabelle Formation geben, die "SS-LLS1_BA" und was sonst noch dazu gehört aufnehmen kann. Mehrere davon, aufnehmen, und also nicht mehrere Tabellen.

    Was "SS-LLS1_BA" inhaltlich für dich bedeutet hab ich keinerlei Vorstellung.
    Ahh, ok.

    Die Formation möchte ich mit Eigenschaften bestimmen.

    Als bsp. wie bestimme ich ein Quadrat.

    eigenschaft1: alle winkel sind 90°
    eigenschaft2: es hat 4 seiten
    eigenschaft3: alle 4 seiten sind gleich lang

    So ungefähr verhält es sich mit meinen Formationen. Hier werden sich sicherlich einige Eigenschaften überschneiden. Aber vom grundlegenden, sind Sie Unterschiedlich.
    hmm - was du eigenschaft nennst, sind keine - es sind Bedingungen
    Also nicht alle Winkel 90°, oder 4 Seiten sind Eigenschaften, sondern Winkel, Seite.
    Wobei Winkel und Seite sogar Entitäten sind, eine Formation kann vlt. mehrere Winkel, und mehrere Seiten haben, und Seite hat eine Länge, und so Sachen.

    Aber ich glaub ich modelliere grad was ganz anderes als du wirklich am Wickel hast, das ist nicht sehr ergiebig.
    Also lassen wir lieber theoretische Beispiele, wenn es doch welche aus der (aus deiner) Praxis gibt.
    Habe schon eine Lösung. Nachdem du mir das erste mal geantwortet hast, kam mir die zündendende Idee.

    Aber vielleicht hast du eine bessere Lösung. Anbei die hälfte des Codes um den es geht. Die andere hälfte ist für Longpositionen, von daher ähnlich aufgebaut und Uninteressant.

    Also "SS-LLS1" ist eine Formation von vielen. Anbei ein Bild.

    Damit mein System Automatisch ein Trade eingeht, sollen bestimmte Bedingungen erfüllt sein, die ich ausgearbeitet habe und noch verbessern muss.
    Jetzt habe ich mir überlegt, bestimmte Bedingungen in einer Eigenschaften Liste abzulegen.
    Die Liste soll vorerst den RSIEMA beinhalten. Später kommen Zeiten und andere Oszilatoren - ,Indikatoren - Eigenschaften (Helfem dem Trader zu erkennen, wann es sinnvoll ist, eine short oder Long Position einzugehen) hinzu.

    Jetzt habe ich mir überlegt jede Formation eine Tabelle in einem Dataset zu geben. Die mit den werten des RSIEMA gefüllt sind.
    Also ist die Bedingung des RSIEMA erfüllt, erstellt das Tool einen Trade und macht hoffentlich gute Gewinne ;-)!!
    Bilder
    • Chart-SS-LLS1.JPG

      35,29 kB, 440×702, 86 mal angesehen
    Dateien
    Hallo nochmal,

    hier der aktuelle Code meines Problems. Dies ist meine Lösung.
    Vorteil die einzelnen Formationen können nun auf einfache weise, mit weiteren Bedingungen gefüttert werden.
    Hier kann als bsp. weitere Funktionen programmiert werden, ob es weiter Bedingungen gibt und wie die Erfüllung der Bedingung ist(Wert <>= etc.)
    Dateien
    • Shortdirection neu.txt

      (6,02 kB, 90 mal heruntergeladen, zuletzt: )
    • SS-LLS1.txt

      (3,64 kB, 89 mal heruntergeladen, zuletzt: )