Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Eddy

Addict
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Eddy

  1. Hallo zentrader, wollte mal in die zip-Datei zen_c.zip reinschauen abermein Virenscanner meldet folgendes:
  2. Hallo askerix, ich entwickle ein Handelssystem, das nach markttechnischen Prinzipien arbeitet. Die Komplexität des Projektes ist rasant gewachsen. Ich kam mit den UserDefinedMethods.cs sehr schnell an Grenzen. Aus diesem Grund habe ich die gesamte Logik aus den Ninja Scripten ausgelagert. Ich entwickle jetzt unter Visual Studio Pro und benutzte C#. Es wird eine DLL erzeugt, die in einen NinjaTrader Strategy-Script eingebunden wird. Ich habe das gesamte Orderhandling ebenfalls ausgelagert. Leider ist es mir nicht gelungen, die NT Klassen IOrder, ... I*, in das externe Projekt einzubinden. ich muss deshalb die I*Objekte in eigene (bei mir MtI*) Objekte konvertieren. Die OnOrderUpdate-Methode in NT sieht (z.Z.) bei mir folgendermaßen aus: protected override void OnOrderUpdate(NinjaTrader.Cbi.IOrder order) { // Order uns Mt-Format konvertieren MtIOrder mtIOrder = fillMtIOrder(order, null); // Entry-Order verarbeiten if (order.Name.Substring(0, 1) == "E") { workbenchController.WorkbenchModel.OnOrderUpdateEntryOrder(mtIOrder, order); return; } // Exit-Order verarbeiten if (order.Name.Substring(0, 1) == "X") { workbenchController.WorkbenchModel.OnOrderUpdateStopLossOrder(mtIOrder, order); return; } } Z.Z. logge ich in Textfiles. Ich hatte zwar mal mit MySQL experimentiert. Habe das aber erstmal auf Eis gelegt.
  3. Holla, die Waldfee. Da bist du aber ein glücklicher Glückspilz.
  4. Kann ich jetzt auch bestätigen. Im Log und in der Performance-Übersicht sieht man dann schön, wie Partfill abgearbeitet wird. Das hilft in der Tat. Leider habe ich auch noch keine Möglichkeit gefunden, Overfill-Situationen zu erzeugen.
  5. Mache ich. Kann man eigentlich gleichzeitig Long und Short in einem Instrument aktiv sein. Z.B. möchte ich den Trend Long handeln, in der Korrektur im kleineren Timeframe aber einen Short-Ausbruch handeln? Oder gibt es hier grundsätzliche Probleme?
  6. Eddy antwortete auf Eddy's Thema in Programmierung (NT)
    Ich denke, umsetztbar ist das. Ich reagiere "ja nur" auf den Orderstatus in diversen Methoden. Ob es dann aber auch funktioniert? Noch keine Ahnung. Wie kann ich den einen Overfill sonst handhaben? Habe mir gerade die Replay-Funktion angeschaut. Das Teil hilft mit Sicherheit weiter. Danke nochmal für diesen Tipp.
  7. Für mich als Future-Anfänger (noch mit 0 Erfahrung), sind diese beiden Beitrage schon Gold wert. Danke.
  8. Eddy erstellte Thema in Programmierung (NT)
    Ich bin gerade dabei, mir zu überlegen, wie man auf die Statusänderungen von Buy-/Sell-Orders sinnvoll reagiert. Das Ergebnis habe ich unten aufgeführt. Habe ich dabei etwas vergessen oder ist etwas unsinnig / überflüssig? Als Beispiel sollen 10 Einheiten gekauft und über einen StopLoss abgesichert werden.
  9. Du meinst wahrscheinlich diese Abfrage: if (execution.Order.OrderState == OrderState.Filled || execution.Order.OrderState == OrderState.PartFilled || (execution.Order.OrderState == OrderState.Cancelled && execution.Order.Filled > 0)) Ich habe die Abfrage entzerrt, um sie erstmal besser zu verstehen. Die erste Abfrage soll den StopLoss für den Fall erstellen, das die Order vollständig ausgeführt wird. (Da ich nicht unbedingt ein Fan von geschachtelten IF's bin, habe ich die zweite Abfrage ohne ELSE geschrieben. Dafür der RETURN im ersten Block. Muss man nicht mögen, aber ist halt mein Programmierstil.) // Order vollständig ausgeführt if (stopOrder == null && execution.Order.OrderState == OrderState.Filled) { stopOrder = SubmitOrder(0, OrderAction.Sell, OrderType.Stop, execution.Order.Filled, 0, stopLevel, "ocoName", "exitName"); entryOrder = null; return; } Die zweiteAbfrage soll den StopLoss für den Fall erstellen, das für die Order die erste Teilausführung stattgefunden hat. // Order teilweise ausgeführt if (stopOrder == null && execution.Order.OrderState == OrderState.PartFilled) { stopOrder = SubmitOrder(0, OrderAction.Sell, OrderType.Stop, execution.Order.Filled, 0, stopLevel, "ocoName", "exitName"); return; } Die dritte Abfrage soll für alle weiteren Teilausführungen (2 .. n) die zu verkaufende Menge in der bestehenden Stop-Order erhöhen. Was meinst du mit "die restlichen Kontakte". Wenn die Teilausführung noch nicht dazu geführt hat, das die Order vollständig gefilled wurde, muss ich dann nicht die teilausgeführte Anzahl verwenden um die Anzahl im Stop zu erhöhen? Kannst du das bitte etwas genauer beschreiben? Muss ich im Code die MarketPosition im Auge behalten? Danke für den Tipp zum MarketReplay. Lade mir mal ein paar Videos dazu runter. Eddy
  10. Ich benötige nochmal Hilfe. Ist diese Vorgehensweise zum Erstellen / Vervollständigen eines StopLoss so richtig? protected override void OnExecution(IExecution execution) { if (entryOrder != null && entryOrder.Token == execution.Order.Token) { // Order vollständig oder teilweise ausgeführt if (execution.Order.OrderState == OrderState.Filled || execution.Order.OrderState == OrderState.PartFilled) { // Order vollständig ausgeführt if (stopOrder == null && execution.Order.OrderState == OrderState.Filled) { stopOrder = SubmitOrder(0, OrderAction.Sell, OrderType.Stop, execution.Order.Filled, 0, stopLevel, "ocoName", "exitName"); entryOrder = null; return; } // Order teilweise ausgeführt if (stopOrder == null && execution.Order.OrderState == OrderState.PartFilled) { stopOrder = SubmitOrder(0, OrderAction.Sell, OrderType.Stop, execution.Order.Filled, 0, stopLevel, "ocoName", "exitName"); return; } // Nächste Teilausführung if (stopOrder != null) { ChangeOrder(stopOrder, stopOrder.Filled + execution.Order.Filled, 0, stopLevel); return; } } } } Muss bei der ChangeOrder die Gesamtemenge oder die teilausgeführte Menge angegeben werden? In welche Situation macht diese Abfrage Sinn? execution.Order.OrderState == OrderState.Cancelled && execution.Order.Filled > 0)
  11. So. Ernüchterung ist eingekehrt. Ich hatte gehofft, mit der Enhanced Mini Data Box könnte man die Restriktion umgehen, nur einen Chart in einer Strategie anzeigen zu können. Das ist aber leider nur eine tabellarische Darstellung. Nix mit Chart.
  12. Hallo DarthTrader, danke für die Ausführungen. Ich denke auch, das der Unmanaged Approach der richtige Weg ist. Dann werde ich mich jetzt mal mit dem Orderhandling in meinem HS beschäftigen.
  13. Danke für den Link mtbf40. Dieser thread ist sehr interessant. Mal schauen, was ich als "Markttechniker" davon verwenden kann.
  14. Bin gerade dabei, die Stoppsetzung im Bewegungshandel aus der Korrektur heraus zu implementieren. Voigt empfiehlt in Band 4 als Strategie gegen "ungerechtfertigtes Ausstoppen", die Stoppsetzung mit dem Parabolic SAR vorzunehmen. Im Bild sieht man mal meine ersten Ergebnisse dazu. Die 5*-Marktphase habe ich am um 14.30 Uhr erkannt. Als StopBuy-Preis wurde das Low des Bars um 14.25 genommen. Eingestoppt wurde die Order um 14.40. Die Stoppsetzung erfolgt hier noch vollständig mit dem PSAR. Lt. Voigt sollte die Stoppsetzung, je näher man dem Punkt 2 kommt (hier 12.3.2), wieder nach den Standardregeln erfolgen. Das werde ich jetzt mal implementieren. Seht ihr hier noch andere Stopptechniken, die hier angewendet werden könnten? Eddy
  15. Ich stehe jetzt an einer Stelle, wo ich mich für einen Weg entscheiden sollte: managed vs. unmanaged approach. Mich würde interesieren, welchen Weg ihr gegangen seid und warum. Auslöser ist folgende Anforderung: Ich möchte den Bewegungshandel aus der Korrektur heraus handeln und dafür gestaffelte Orders absetzten. Im managed approach muss ich die Orders mit jedem neuen Bar neu absetzten. Im unmanaged approch bleiben sie stehen. Im managed approach nimmt mir aber NinjaTrader eine Menge Arbeit ab. Speziell was die Vermeidung von 'nichtgewollten' Orders angeht. Das ist mit Sicherheit eine riesige Vereinfachung in der Programmierung. Noch zwei Zusatzfragen: 1. Kann man eine StopBuy- und eine LimitBuy-Order als OCO Order sowohl im managed wie im unmanaged approach erzeugen? 2. Kann man im unmanaged approach eine "StopLoss"-Order erzeugen (macht man doch mit SellStop für Long-Orders, oder?) OHNE das die entsprechene Buy-Order vorhanden ist und was hätte das für folgen? Eddy
  16. Ja. Ich habe nicht den Anspruch ein Super-Truper-Sonst-Was-Verkaufbares-System zu schreiben. Mir geht es allein um die Entwicklung einer auf Markttechnik basierenden Handelslogik. Com, Interop, Server, ... sind alles interessante Dinge (hätte ich Spass dran, das zu lehrnen). Für mein Vorhaben reicht aber eine DLL, die in NT eingebunden wird, vollständig aus.
  17. Da kann ich wingman und DarthTrader nur zustimmen. Eine NT-Äquivalent zu Entwickeln halte ich auch für ein schwer zu realisierendes Unterfangen. Aus diesem Grund habe ich auch "nur" die Logik ausgelagert. Die Darstellung der Timeframes mit den 1-2-3's, Insidebars, etc. hilft allerdings enorm beim Testen der Strategie. Deshalb habe ich eine einfache GUI entwickelt. Wenn meine Strategie "fertig" ist, binde ich sie ohne GUI in NT als DLL ein. Die Backtests erfolgen dann ebenfalls in NT. Nachteil meiner Vorgehensweise: die strategierelevanten Eigenschaften (z.B. 1-2-3's) sehe ich in NT nicht mehr, da ich nur noch einen Chart habe. Wenn ich da alles reinzeichne, sieht man wahrscheinlich nichts mehr (da es der M1 oder Tickchart ist). (Deshalb auch meine Frage nach der 'Enhanced Mini Data Box' ).
  18. Hat jemand schon mal die "Enhanced Mini Data Box" verwendet? Ich weis nicht wie man daran kommt. Kann man damit die einzelnen Serien einer Multi-Timeframe-Strategy anzeige?
  19. @wh Der Weg den du beschreibt, ist ok. Dazu passt vielleicht noch dieser Hinweis: Mein Link. ABER: Ich glaube, mein Wissen reicht dafür nicht aus. Ich programmiere zwar in C#, aber aus dem aktiven Programmierleben bin ich schon sehr lange raus. Vor ca. 10 Jahren habe ich meine IT-Firma verkauft, in der ich die letzten Jahre für Vertrieb und Projektcontrolling verantwortlich war. Vielleicht gibt es hier im Forum ja noch andere Entwickler, die ein ähnliches Problem haben bzw. Interesse an einer Lösung haben. Man könnte dann versuchen ein Framework zu entwickeln, mit dem man deinen Vorschlag umsetzten kann. Eddy
  20. Vielleicht eine Möglichkeit. Gefühlsmäßig habe ich aber erstmal ein Unbehagen. Ich benötige dann eine zentrale Stelle (eine DLL?), die die einzelnen Strategien synchronisiert. Ich grüble gerade darüber nach, wie ich folgende Anforderungen lösen kann: Strategie 1 prüft die Marktphase und erzeugt einen Entry. Die Stopp-Setzung erfolgt in Strategie 2 (im niedrigeren Time). Kann man Strategie-übergreifend auf die Orderverwaltung zugreifen? Im niedriegeren Timeframe möchte ich einen Punkt (P2) des höheren Timeframe abfragen.
  21. Ja, mit Visual Studio Pro. Den Code kann ich aber innerhalb NT nur in den beiden Verzeichnissen Strategy und Indicator ablegen. Man kann keine Orderstrukturen erstellen. Das erschwert die Übersichtlichkeit erheblich. Den Tickchart könnte ich wohl auch nehmen. NT unterstützt Multitimeframe. Man kann in einer Strategie beliebig viele Timeframes ansprechen. Man kann in einer Strategie aber nur einen Chart öffnen. Ich kenne keine Möglichkeit, mehrere Charts parallel offen zu haben. Als Plot-Bereiche innerhalb des Charts kann man etwas machen. Aber die Möglichkeiten sind dann doch sehr eingeschränkt. In einem Indikator-Chart kann man aber keine Orders absetzten. Sonst wäre das genial.
  22. Da ich gerade dabei bin, ein eigenes Handelssystem in C# zu entwickeln, kann ich das bisher gesaget nur unterschreiben. Es ist schon ein sehr großer Aufwand. Deshalb gehe ich eine Mittelweg. Ich habe die Handelslogik und die Chartdarstellung "ausgelagert". Orderabwicklung und Backtest erfolgen weiterhin in NT. Leider mußte ich auch die Chartdarstellung auslagern (hierzu setzte ich MSChart und native Grafikmethoden ein), da NT in einer Strategy nur einen Chart zulässt. Ich wollte aber für jeden Timeframe einen eigenen Chart mit den 1-2-3's, Insidebars, etc., haben. Diesen ganzen Grafik-Kram darf man nicht unterschätzen. Ich hänge den C#-Code als DLL in NinjaTrader ein. NT sendet z.B. 1Min Daten an das HS. Das HS erzeugt Handelssignale, die ich an NT weiterreiche. Die Ausführung der Orders erfolgt in NT. Einige NT Events wie z.B. OnBarUpdate, OnOrderUpdate, OnExecution verarbeite ich aber auch noch. Z.B. um die Orderausführung zu überwachen. Da mein Handelssystem auf Markttechnik basiert, komme ich mit sehr wenigen Indikatoren aus (ATR, Parabolic SAR, MACD). Diese Inids habe ich für mein HS adaptiert (es sind "normale" Klassenmethoden geworden). Der Aufwand, alle Indikatoren nachzuprogrammieren, entfällt damit im wesentlichen. Zwei Punkte haben mich im wesentliche bewogen diesen Weg zu gehen: 1. Das HS wurde recht schnell komplex. NT bietet keine sinnvolle Möglichkeit an, seinen Code zu verwalten. Auch sind nur sehr rudimentäre Debugmöglichkeiten vorhanden. 2. Leider kann man in NT in einer Strategy nur einen Chart darsstellen.
  23. Das Zeichnen von Linien, die Highs und Lows verbinden, ist mMn nicht das Problem (z.B. ZigZag). Wenn du den Trend nach Markttechnik (Standardverfahren) handeln willst, must du z.B. erkennen, auf welchem Niveau der zu durchstoßende P2 liegt. Denn erst mit dem Durchbruch durch P2 ist ein Trend bestätigt. Schau mal hier: smp. Ob der MTF-Code das leistet, kann ich nicht beurteilen, da ich MTF nicht kenne. Wichtig ist auch den übergeordneten Trend zu betrachten. Vielleicht stellt der Trend im untergeordneten Zeitfenster ja nur eine Korrektur des übergeordneten Trends dar.

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.