Jump to content
Tom Next - Daytrading Community

Tommyknocker

Addict
  • Posts

    21
  • Joined

  • Last visited

Community Informationen

  • Newsletter Abonnement
    Kein Abo
  • Typ Newsletter
    Keine

Verschiedenes

  • auf die Community aufmerksam geworden durch
    Google

Tommyknocker's Achievements

Newbie

Newbie (1/14)

1

Reputation

  1. @goso Danke für die Info. Ich dachte mir nur nachdem dukascopy auf den Retailmarkt zugegangen ist, mit ihrem 1000$ Account. Das es eine gute Chance wäre damit weiter zu machen. Hab vorher mit CMC experimentiert und bin dort sehr stark durch die fast nicht vorhandene History und damit auch kein Backtesting möglich sowie permanente requotes davon abgekommen, und wollte jetzt aber wieder einen Einstieg in die Materie suchen. Aber vielleicht ist Forex doch die falsche Spielwiese für neue Experimente und sollt mich vielleicht auch mit den anderen Möglichkeiten(Futures, Optionen) weiter vertraut machen. @RAiNWORM Danke für deinen Versuch, allerdings war mir schon vorher klar das Forex eine stark dezentrale Angelegenheit ist und es keine zentrale Exchange gibt. Aber dennoch entsteht auf Grund des permanenten Handels verschiedener Banken untereinander ein Quotestream der für Backtests herangezogen werden kann. Daher dachte ich mir das sie vielleicht ähnlich wie Multicharts mit ihrem MCFX die Daten von FXCM nutzt oder IQFeed auf Barcleys bzw. TenFore zurückgreift auch einen mehr oder minder bekannten Dienst bzw. 'MarketMaker' verwenden. Und damit ein Backtest in diesem Umfeld denn größtmöglichen Wert bietet wären die Tickdaten von dem Broker interessant den ich verwende wollte, und das wäre vorerst eben MB Trading.
  2. Vielen Dank für deine Antwort. Ich hab bisher zwar auch fast nur positives über MBT gelesen, war jetzt dann doch etwas skeptisch wegen der NT - MBT Probleme. Bleibt nur noch die Frage wegen Tickdaten für möglichst gute Backtests auch wenn ich vorerst nicht vorhabe auf dem Timeframe zu arbeiten. Hast du vielleicht eine Ahnung was MBT als Datenlieferant benutzt? Bzw. soweit ich es gelesen hab gibt es Tickdaten nur bis max. 40 Tage zurück. Und ich hab auch keine Möglichkeit gesehen von denen Tickdatenhistorien zu kaufen, aber vielleicht besteht ja beim original Datenlieferant die Möglichkeit dazu. Leider hab ich gerade gesehen, dass die Dukascopy Anbindung scheinbar nur in der MC Pro Version verfügbar ist und die sprengt halt leider doch mein Budget bei weitem.
  3. Hallo zusammen, nach dem ich mich länger nicht mehr hier blicken hab lassen, muss ich gleich mal mit einer Frage antreten. Ich möchte gerne wieder etwas aktiver werden und deshalb mit dem Forex-Trading beginnen. Da ich beim letzten Mal einige Probleme mit Bucket-Shops a MT4 Broker und Co. hatte will ich dieses Mal sinnvoller starten. Ich verwende derzeit IB/Lynx als Broker für meine Investments, allerdings sehe ich die relativ hohen Mindestgebühren bei idealpro für mein Vorhaben als ungeeignet an. Denn ich wollte mit etwa 5000 EUR Risikokapital anfangen aber die Strategie nur langsam hoch skalieren, also nach Möglichkeit Microlots mindestens jedoch Minilots. Nur gerade in dem Bereich ist der Handel bei IB finanziell nicht sinnvoll. Außerdem ist/soll es ein vollautomatisches System werden, daher auch meine Fragen: Nach dem was ich hier gelesen hab ist der vollautomatische Handel bei MBT zumindest mit NT nicht praktikabel, (Datenfeed, Abstürze etc.), hat jemand vielleicht Multicharts im automatisierten Handel bei MBT im Einsatz? Oder hat jemand eine andere Software hierfür im Einsatz die er empfehlen kann? Im Prinzip wäre ich halt für eine EasyLanguage mit der Möglichkeit beliebige DLLs via API Zugriff einzubinden. Oder sollte man ganz auf MBTrading in diesem Bereich verzichten und eher bei Dukascopy, FXCM oder .. umsehen? Danke schon mal Tommyknocker
  4. Leider kenne ich das Phänomen das MT4 Daten während eines Backtests nachlädt nicht. Aber das liegt vielleicht daran, dass ich kaum im visuellen Modus arbeite, bzw. vorher den Chart im 1-4h Chart durchgehe bevor ich einen Test durchführe. Wie auch immer. Vielleicht führt MT4 das Laden der Historie nicht einmal sondern mehrfach aus wodurch dein System in die Knie geht, also die volle while-Schleife mehrfach abarbeiten will. Evtl. hilft es also einfach die Berechnung beim 'Nachladen' auszusetzen dann verlierst du zwar die älteste Bar aber das sollte eigentlich keine Probleme machen. Du kannst das also vielleicht so testen: if (counted_bars==0) { downloadhistory=true; } else { while(Index>=0) { // sonstiger Code } }
  5. Also der Indikator wird pro Verwendung (zB. EURUSD 5M in einer Strategie mit den gleichen Parametern) nur einmal initialisiert und danach nur noch die Start()-Funktion aufgerufen. Daher bleiben die Einstellungen/Parameter erhalten, und bereits berechnete Werte müssen nicht noch einmal berechnet werden. Das könntest du aber mit einem eigenen Testindikator und Test-EA durch Printausgaben leicht selbst überprüfen. Ich bin mir nicht sicher ob du mit Link den vom Codebeispiel meinst oder für meine Angabe über den Indikatorprozess? Also der Code ist aus der MQL-Doku hier die Links dazu: http://docs.mql4.com/customind/IndicatorCounted http://book.mql4.com/samples/icustom Das der Aufruf der iCustom-Methode einen Aufruf der Start()-Funktion bewirkt kannst du leicht an Hand einer Print() Anweisung in einem der Beispielindikatorn überprüfen. Das stand glaub ich nirgends, aber es fällt dir bei der Programmierung irgendwann selbst mal auf.
  6. MT4 ruft die Start()-Funktion des Indikators auf, wenn sich etwas an den Daten geändert hat. Also beim ersten Aufruf und bei jedem weiteren Tick der rein kommt. Und auch bei jedem Aufruf der Funktion iCustom. Der Wert des Indikatorbuffers wird aber aus dem Indikatorbuffer abgerufen und übergeben. Und daher muss man bei der Indikatorprogrammierung selbst darauf achten nicht jedesmal die gesamte Historie neu zu berechnen. Für diese Behandlung des Ablaufs gibt es aber ein einaches Konstrukt das auch in der Doku so beschrieben wird. Durch die Funktion IndicatorCounted() erhält man die Anzahl der Bars die bereits berechnet wurden und kann darauf hin nur noch die Werte berechnen die einem bis zur Gegenwart fehlen. Ein wichtiger Hinweis noch sollte die Berechnung des Indikators auf die vorherigen Indikatorwerte angewiesen sein, so muss das bei der Berechnung berücksichtig werden, also immer erst die Werte die am längesten zurück liegen berechnen und dann weiter in die Gegenwart vorstossen. Außerdem ist es sinnvoll den Indikator so zu Programmieren, dass alte Werte nicht mit neuen Werten überschrieben werden. Da es sonst zu Inkosistenzen kommt, wenn man den Indikator in einem EA verwenden will, und nicht weiß warum er da gehandelt hat, obwohl der gleiche Indikator denn man als Vergleich im Chart anzeigen lässt nun einen ganz anderen Wert anzeigt, bei dem er nicht handeln sollte. Und solche Fehler zu finden ist dann manchmal ziemlich schwierig. Daher ist es sinnvoll in einem EA immer mit einem shift = 1 zu arbeiten. Da dass die letzte wirklich abgeschlossene Candle ist. Hier noch der Beispiel Indikatorcode der auch in der Dokumentation zu finden ist. Und sowohl das Problem des oft sinnlosen wiederholten Aufrufs aus einem EA als auch bei jedem Tick möglichst rasch abbricht. int start() { int limit; int counted_bars=IndicatorCounted(); //---- check for possible errors if(counted_bars<0) return(-1); //---- the last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- main loop for(int i=0; i<limit; i++) { // indicator calculations } }
  7. OK, dass wusste ich natürlich nicht. Ja genau, das ist die Möglichkeit des Zugriffs vom EA auf einen custom indicator. Wo ich mir nicht sicher bin ob du das richtige meinst, ist die BufferStelle den an der Position muss die Nummer des buffers eingetragen, von dem du einen Wert erhalten willst. Also eben 0 .. 7, 0 = der erste und 7 = der letzte. Also im Prinzip wie auch auf jeden fest eingebauten Indikator mit der Ausnahme, dass du dich selbst um die Übergabe der Parameter kümmern musst, und der Buffer angegeben werden muss auf den du zugreifen willst. Ja, die Reihenfolge muss exakt der entsprechen die du auch in deinem Indikator verwendest. Also zB. // Indikator extern int param1 = 1; extern int param2 = 10; extern int param3 = 100; dann muss der Aufruf // EA double ExtIndi = iCustom(Symbol,TimeFrame,"Name",p1,p2,p3,BufferNr,Shift); // wobei p1 bis p3 die Parameter sind die du übergeben willst. Du kannst die Parameter auch frei lassen. Dann wird der Standardwert den du im Indikatorcode angegeben hast verwendet. Allerdings bleibt dabei die Notwendigkeit der richtigen Reihenfolge aufrecht, daher kannst du immer nur die letzten und auch nur alle auf einmal weglassen! // param3 = 100 double ExtIndi = iCustom(Symbol,TimeFrame,"Name",p1,p2,BufferNr,Shift); // param2=10, param3 = 100 double ExtIndi = iCustom(Symbol,TimeFrame,"Name",p1,BufferNr,Shift); // param3 = 1, param3 = 10, param3 = 100 double ExtIndi = iCustom(Symbol,TimeFrame,"Name",BufferNr,Shift); Die Variablen in deinem EA Code haben nichts mit denen im Indikator gemeinsam und können daher verschieden gewählt werden. Es ist nur trotzdem sinnvoll einen sprechenden Namen zu verwenden. Also hat man einen Indikator der auf einem Moving Average bassiert ist es sinnvoll auch die Parameter entsprechen lperod, speriod für zB. long period und short period zu verwenden. Wenn du Variablen verwendest die du dem EA Parameter von außen mitgeben willst, dann musst du die entsprechenden globalen Variablen als Parameter für die iCustom-Funktion verwenden. Ja, alle diese Sprachen also C++, C#, Java, MQL-C basieren auf den glechen Sprachelementen und Syntax wie C, und sind sich daher sehr ähnlich. Sie sind nur um unterschiedliche Kozepte erweitert worden. Zum Schluß empfehle ich dir noch dir sowohl den iCustom Abschnitt im MQL Book als auch die custom indicator Artikel anzusehen. Sind lesenswert und enthalten alle wichtigen Infos die du brachst um die ersten Strategien mit eigenen Indikatoren zu programmieren.
  8. Also wenn wir bei deiner Analogie bleiben, dann würde ich das etwas mehr spezifizieren und erweitern. Der externe Indikator ist ein Gerät mit maximal 8 Ausgängen (die du dir im Chart oder EA ausgeben lassen kannst) und mindestens einem Eingang (deine Daten des Charts im eingestellten Zeitrahmen die dir 'automatisch' zur Verfügung gestellt werden, aber beliebig um weitere Zeitrahmen oder Underlyings erweiterbar sind). Außerdem besteht die Möglichkeit durch Regler (Parameterset) bestimmte Voreinstellungen des Geräts durchzuführen. Zum Thema Buffer das sind spezielle Arrays (oder Felder) die Daten in einer nummerierten Liste ablegen. Du kannst die Werte dann mit deren Nummer (Index) abrufen (zB. Buffer[5]). Wobei MT4 selbst dafür sorgt das nach jedem verstrichenen Zeitraum (eingestellter Timeframe) ein weiterer Wert am Beginn der Liste aufgenommen wird und daher alle alten Werte auf der Liste einen Platz nach hinten rücken. Der externe Indikator erhält dann die Möglichkeit per start() diesem 'leeren' Listenplatz einen korrekten Wert zu geben. Die Liste wird mit einem vorher festgelegten Standardwert belegt, das gilt auch für Werte die so weit zurück liegen das es dafür (in der History) noch keine Daten gab. Zum Thema Array hab ich noch einen kleinen Link für dich der das technisch ein wenig erklärt: Arraybeschreibung
  9. Danke für den Tip daran hab ich zwar schon mal gedacht, aber das der Preis so konkurrenzfähig ist hätte ich nicht gedacht. Allerdings ist die maximale Leistung die ich dort finden konnte die High-CPU Extra Large (XL) Instance: 7 GB Arbeitsspeicher 20 EC2 Compute Units (8 virtuelle Kerne mit je 2,5 EC2 Recheneinheiten) wobei eine EC2 Einheit: also 20 EC2 * 1,2 GHz / 8 Cores => also max. 8x 3GHz Leistung also zum Testen was sinnvoller wäre vielleicht keine schlechte Idee. Einen Tipp hätt ich noch um die Skalierbarkeit zu testen, wenn du bei deinem Rechner eine Optimierung laufen lässt die einen für dich repräsentativen Zeitraum testt. Und du dann einmal im BIOS alle Cores bis auf einen deaktivierst. Dann solltest du auf der einen Seite sehen wie effizient er die Cores einsetzt und an Hand des Speicherverbrauchs auch ob er für jede Core die Daten separat im Speicher hält oder gemeinsam wie ich eher vermuten würde für alle Threads nur einmal. Ich hab mal 2 Algorithmen in einem Programm multithreadingfähig gemacht und dabei ist rasch klar geworden, dass man für ein optimales Ergebnis die Anzahl der Cores mit berücksichtigen muss. Aber 90-95% Effizienz war kein Problem. Aber wie schon mal erwähnt nur eine customized Lösung wird in der Lage sein da weiter zu gehen. Programme von der Stange werden im allgemeinen nicht so weit bearbeitet, da die Entwicklungskosten den Nutzen ganz schnell unrentabel machen. Also ich bin der Verfechter eines möglichst guten Preisleistungsverhältnisses, daher würd ich in diesem Fall wohl auch den i7 nehmen. Denn dabei sind die Zusatzkosten einfach wesentlich geringer. (kein MultiCPU Board, kein ECC RAM, kleineres Netzteil) All das müsste man halt berücksichtigen. Allerdings kann dir wohl nur jemand mit einem solchen System sagen, ob du den Faktor 4 zu deinem aktuellen System wirklich erreichen kannst.
  10. Hallo zusammen, bist du aus irgend einem Grund an Intel gebunden oder würdest auch ein AMD System nehmen? Denn ein Opteron 6134 (8x core) sollte für 500 EUR zu haben sein und hätte laut PC Benchmark mit 68% der i7-980 XE Leistung in einer DualCPU Board wohl beim gleichen Preis gute Chancen auf eine bessere Leistung. @siscop: Das mit dem kritischen Pfad ist im allgemeinen Desktopbereich sicher richtig, es kommt auf die Software an. Aber gerade bei einem Optimierungsproblem also den gleichen Code über verschiedene Marktdaten oder mit unterschiedlichen Parametern. Dann sind diese extrem gut parallelisierbar, da sie absolut nicht voneinander abhängen. Also wäre es theoretisch hervorragend für Multicoresysteme geeignet. Aber MC bzw. NT7 müssen halt genügend Threads starten und die Daten asynchron auf die Platte schreiben damit das auch wirklich genutzt werden kann. Aber ich hab weder mit den Programmen noch mit Serverlösungen was am Hut und kann also keine echte Expertiese abgeben.
  11. Ja, ich hab einfach das ganze NT Forum nach balance und total profitloss gesucht und bin dann recht rasch auf einen Forumseintrag gestoßen.
  12. Ich hab leider schon lange nichts mehr mit Ninjatrader gemacht, aber auf die schnelle hab ich das gefunden. Da gibts auch ein sample .cs file dazu. Aber scheinbar gibt es wirklich keinen einfachen Zugriff auf den aktuellen Kontostand. Ninjatrader Support Forum Thread Und grad noch was entdeckt, es scheint ab NT7 wohl doch was neues in dieser Richtung zu geben. Allerdings scheinbar noch ohne Dokumentation der Funktion. For Cash Value: GetAccountValue(AccountItem.CashValue) For Realized PnL: GetAccountValue(AccountItem.RealizedProfitLoss)
  13. Ich bin mir nicht ganz sicher was du genau machst, daher gibts wohl einige Möglichkeiten. Aber ich denke am sinnvollsten ist es die Orderaufgabe selbst zu kontrollieren. Also bei total >= 2 einfach nicht nach weiteren Einstiegen suchen. Und bei total > 0 nur Einstiege erlauben die entgegen der letzten Richtung liegen. also int lastdirection = 0; if ( total >= 2 ) return(0); if ( total == 1 ) { if( OrderSelect(1, SELECT_BY_POS) == true) { switch(OrderType()) { case OP_BUY: case OP_BUY_LIMIT: case OP_BUY_STOP: lastdirection = OP_BUY; break; case OP_SELL: case OP_SELL_LIMIT: case OP_SELL_STOP: lastdirection = OP_SELL; break; } } } und dann vor der Order: if( (total == 1 && lastdirection == OP_SELL) && ... ) // go long if( (total == 1 && lastdirection == OP_BUY) && ... ) // go short
  14. Ein paar weitere Anmerkungen von mir. Der komische Wert den du vermutlich als Rückgabewert gesehen hast (2147483647) ist der Standardwert wenn der Buffer keinen Wert zugewiesen bekommt. Das kannst du wenn du willst so belassen und eben diesen Wert als Filter verwenden oder im init vom Indikator folgendes einfügen, dann wird 0 an Stelle von 214748364 zurückgegeben, damit dein EA Code so funktioniert wie du es jetzt implementiert hast: SetIndexEmptyValue(0,0); SetIndexEmptyValue(1,0); Du verwendest in deinem Code einen Bereich so das nur der erste Tick pro Bar verwendet wir und ein Flag setzt, damit nur da gehandelt wird. Falls du nicht noch weitere Berechnungen bei jedem Tick machen willst/musst, würde ich dir empfehlen noch folgendes einzufügen. Dann wird die Berechnung wirklich nur beim ersten Tick durchgeführt, und sonst abgebrochen. Und du ersparst dir auch das Flag firsttrade. if (Balken!= Bars) { Balken=Bars; firsttrade=true; } else return (0); Der Indikator versucht außerdem in die Zukunft zu sehen, weil er auch auf -1 zugreift, und die letzten 2 Bars neu berechnet. Also ist das was du als Indikator siehst nicht das was er bei laufenden Ticks an Signalen liefern wird, wenn du ihn zB. in einem EA oder Backtest einsetzt. Also solltest du UP_Entry=iCustom(NULL, 0, "Arrozaq_Jens",0,2); verwenden. Dann wird für die Berechnung der EMAs bis Close[1], Close[2], Close[3] verwendet die auf jeden Fall abgeschlossen sind und daher korrekte (gleich wie im Indikator) Signale liefert.
  15. Hallo, also nur um deine Sache richtig zu verstehen. Du willst also den Effekt des EURUSD Umrechnungskurses mit berücksichtigen, korrekt? Was mir dazu noch einfällt wäre zusätzlich zum Kurs des Futures oder was auch immer du testen willst die gleiche Positionsgrösse gleichzeitig in EURUSD einzugehen. Das heißt also du gehst zusätzlich long im EURUSD, damit wird die Währungsabhängigkeit mit berücksichtigt. Allerdings könntest du im richtigen Handel auch einfach dein Währungsrisiko hedgen, in dem du eine EURUSD Shortposition in der gleichen Positionsgröße eingehst. Damit spielt die Währungsänderung keine Rolle und du erhältst 1:1 den Kursgewinn des Underlyings (Future oder was auch immer) in EUR. Allerdings fallen dadurch natürlich zusätzlich Kosten für den Währungshedge in deiner Strategie an. Aber was du nun wirklich verwirklichen kannst/willst, musst natürlich du entscheiden.
×
×
  • Create New...