Alle Inhalte von Mythos
-
MT4 und Excel
Für alle Neulinge die das allererste mal ein Script in MT4 programmieren wollen ist der MetaEditor natürlich die erste Anlaufstelle. Dort öffnet man ein neues Script (File->New->Script). Namen etc. kann man sich frei aussuchen. Nun hat man das Grundgerüst vor einem und muss nur noch die start() - Funktion mit der gewünschten Logik füllen. Wie in mehreren Threads hier schon ausführlich erklärt ist MQL4 stark an C angelehnt. Für genauere Informationen vor allem zur Syntax etc. empfehle ich das MQL-Book. Sofern Zeit vorhanden das gesamte durchlesen, ansonsten nur die nötigen Stellen. Im konkreten Fall sollte (wie schon gesagt) das Script aus 3 Teilen bestehen: 1. Öffnen des Files und initialisierung der Variablen. Die nötigen Funktionen (is nur eigentlich nur eine) wurden oben bereits erwähnt. In den verlinkten Stellen aus der MQL referenz sind auch Beispielcodeblöcke wie die Funktionen zu verwenden sind deswegen poste ich die hier nicht nochmal. 2. Die Schleife. Wie oben geschrieben empfehle ich eine For-Schleife die von hinten (Index Bars -1) nach vorne (Index 0) alle Bars durchgeht. Bei jedem Bar schaut man sich mit TimeHour die Stunde an, abhängig davon werden dann die variablen gesetzt. für ein Script das nur auf H1 läuft würd sowas vermutlich funktionieren: bool newDay= false; for(k= Bars-1;k >= 0;k--) { int hour= TimeHour(Time[k]); if(hour == HourStart || (!newDay && hour> HourStart)) { high= High[k]; low= Low[k]; close= Close[k]; newDay= true; } else if(hour > HourStart && hour >= HourEnd) { if(high < High[k]) high= High[k]; if(low > Low[k]) low= Low[k]; close= Close[k]; } else if(hour > HourEnd && newDay) { FileWrite(fileHandle,high,low,close); newDay= false; } } 3. File schließen - und aus ;) hth
-
[Umfrage] Zukunft APPLE / aktuelle Quartalszahlen
Irgendwie denk ich mir bei solchen Meldungen nur immer wie massiv überteuert iPad und iPhone offensichtlich verkauft werden. Gewinnspanne schön und gut, aber ein Gewinn von 14 Milliarden im Quartal... Entweder die Entwickler sind massiv unterbezahlt oder den Kunden wird übertrieben Geld aus der Tasche gezogen.... oder beides.
-
MT4 und Excel
Darf ich fragen wie du auf diese codezeilen kommst? Welchen Zweck erfüllt zB. copied? Woher hast du IsStopped? Zu deiner Frage: das while ist eine Schleife, ja. Wenn dus in dem Stil machen würdest dann sollte es eher so aussehen: int k= 1; int high,low,close; while(k <= Bars) { // berechnung bei offset Bars-k k++; } Schöner wär allerdings statt while eine for zu nehmen: for(int k= 1;k <= Bars;k++) { // Berechnung... }
-
Martingale Strategie mit Beispiel
Gerne. Es gibt leider viel zu wenig dokumentierte Livekonten.
-
Einzelne Wochentage werden nicht summiert
abgesehen von RAiNWORMs Hinweis tu ich mir schwer deinen Code zu verstehen. In der Form würde er nitmal kompilieren. Du solltest nicht in der Schleife neue Variablen definieren, vor allem nicht wenn du diese Variablen scheinbar zum aufsummieren verwendest. Da der Block nicht tut was er soll, vermute ich mal das dein Originalcode zumindest kompiliert. Aufgrund des Ausschnitts den du hier zeigst hab ich die leichte Befürchtung, dass das Time-Problem nit das einzige in dem Code ist. Aber probiers mal aus, vielleicht wars das ;)
-
MT4 und Excel
genau, am besten vor der Schleife die 3 variablen definieren. Wenn du das script dann standardmäßig auf H1 ausführst sind die Werte der H1 Bars in den vordefinierten Variablen High,Low,Close,Time... gespeichert und du kannst sie so direkt abfragen. Darüber gibt die Hilfe auskunft: In deinem Fall wirst du also FileOpen("my_data.csv",FILE_CSV|FILE_WRITE,';'); brauchen, halt mit deinem Filenamen. Stimmt, es is nicht einfach für einen Neuling. Wenn du deine ersten Versuche postest können wir vielleicht etwas direkter helfen bzw. aufzeigen wo die Fehler sind. Am Anfang ist es vermutlich der Beste Ansatz sich selber zu überlegen wie man die Daten verarbeiten würde, wenn einem jemand nacheinander jeden einzelnen Bar zeigt. Genau so macht es das Script dann in der Schleife.
-
MT4 und Excel
Das geht recht einfach indem man die gesamte History der vorhandenen H1 Bars durchläuft. bei geändertem TimeDayOfYear() die Werte zurücksetzt und dazwischen mit den Bars innerhalb des Zeitraums aktualisiert Das würde ich nicht direkt machen, sondern die ermittelten Werte in ein csv schreiben das dann in Excel importiert werden kann. Glücklicherweise bietet MT4 sehr einfache Funktionen für Filezugriff, siehe auch hier Würde ich direkt mit High und Low ermitteln und schreiben. Im wesentlichen brauchst du also vermutlich nur Bars, FileOpen, FileWrite, FileClose, High, Low, Close, Time, TimeHour und TimeDayOfYear. genau, mehr steckt da nicht dahinter.
-
MT4 und Excel
Wenn du richtig EA-programmieren lernen willst, gibts hier einige gute Threads zum starten. Wenn es dir eher darum geht mit unserer Hilfe dein Export-Script auf die Beine zu stellen, würde ich vorschlagen die einzelnen Bereiche Schritt für Schritt anzugehen. Die Frage ist also: was soll es sein und wieviel Erfahrung im Programmieren hast du schon?
-
EP WINNER DINNER
Dann sag ich auch nochmal offiziell danke für den genialen Abend, dann ist die Teilnehmerliste auch vollständig ;) Hmmm scheinbar hat bei mir das Uhr-ablesen schneller versagt als das aufrecht stehen... ich hab gedacht es war 3... Aber deine Getränkeauswahl war auch einfach zu gut, vor allem gegen Ende hin
- MT4 und Excel
- MT4 und Excel
-
MA cross plus cci
Du meinst sowas wie den hier: http://www.tom-next.com/community/topic/32996-einstieg-zu-mt4-programmierung/ ?
-
EP WINNER DINNER
Also das wetter in Linz würde heut vermutlich für eine Grillparty passen... ;) (Sorry Licens )
-
EP WINNER DINNER
(du wärst fast in die quotes gekommen, aber ich glaub die Analwarze will i nit auf der startseite sehen ;)
-
EP WINNER DINNER
So wie das klingt pack i doch lieber das Survivalmesser mit ein. ggf. schlag i mi zufuss nach München durch ;)
-
MA cross plus cci
Er öffnet keine Order obwohl er sollte oder er versucht Orders zu öffnen aber hat Probleme? Backtest oder live? Hast du dir schon den Inhalt der Logs (Reiter "Experten" und "Journal" im MT) angesehen? (Das steht aber auch alles im schon erwähnten Link: http://www.tom-next.com/community/topic/59329-hinweis-zur-besseren-formulierung/)
-
EP WINNER DINNER
Also ich bin beim üblichen Plunder, weil marcus meint es kommt auf die Geste an ;) also i war nur grad beim Bahnhof das Ticket kaufen ;)
-
MA cross plus cci
soweit klar. Aber damit ist noch keine Fehleranalyse möglich. Wir müssten jetzt hergehen und den EA compilieren, falls da kein fehler ihn backtesten (spätestens da müssten wir raten was der EA eigentlich tun soll)... Das ist sehr viel sinnlose Zeit die vermutlich niemand aufbringen will, wenn du uns auch einfach sagen könntest "was nicht funktioniert". Kompiliert er nicht? Tut er nicht was er soll? Wenn ja was soll er denn tun und was genau tut er im moment? Was du derzeit machst ist wie wenn ich mein Auto über Nacht (damit er nicht sieht obs überhaupt fährt) zum Mechaniker stelle mit einem Zettel an der Scheibe "Mein Auto hat ein Problem, danke".
-
Script mit MA trail
Den Expert-Builder kenn ich nicht. Ich geh mal davon aus das der eher zum zusammenklicken von Indikator-strategien gedacht ist. Kann also leicht sein das du damit kein grid aufbauen kannst. Aber wenn du das Grid eh schon selber in einem script erzeugst etc. versteh ich nicht wo das Problem ist es in einen EA zu packen und kleine Veränderungen vorzunehmen.
-
MA cross plus cci
Darf ich fragen was du dir genau vorstellst wie wir auf dieses Posting reagieren? Wir helfen gerne und alles, aber kompletter EA-Source mit der superaussagekräftigen Problemstellung "funktioniert nicht" ist nicht wirklich motivierend. http://www.tom-next.com/community/topic/59329-hinweis-zur-besseren-formulierung/
-
Order öffnen und etwas mehr...
conglom-o hat das Meiste eh schon beantwortet. Wenn du einen Editor hast der dir die Klammerpaare hervorhebt ist es etwas leichter ersichtlich was in welchem block ist. Aber hier hilft es sicher sehr wenn du dir erstmal grundlegend das Thema schleifen durchliest. zB im MQL Book. Zum Break: break springt direkt aus dem aktuellen schleifenkörper (oder switch). Im aktuellen Code gibts ein Switch im schleifenkörper wodurch man aufpassen muss von welchem break man spricht. Hier is auch besser du liest dir erstmal die entsprechenden Teile im MQL Book durch. Warum nach dem Break: das break beendet die schleife wenn zuoft probiert wurde oder ein massiver fehler aufgetreten ist. Falls dem nicht so ist (kein Grund die schleife zu beenden) gehts weiter und ich starte den nächsten Versuch. "Der nächste Versuch" ist in dem Fall der erneute Aufruf von OrderSend. zum "= !": Typischer Stolperstein für Anfänger ist die exakte Syntax. Es spielt eine große Rolle ob ein Leerzeichen gesetzt ist oder nicht etc. "!=" ist ein Operator der zwei Werte miteinander vergleicht und bei Gleichheit false ergibt, bei ungleichheit true. "!" (also nur das Ausrufezeichen vor einem Wert) negiert diesen Wert (nur sinnvoll bei boolschen Werten). "= !" ist kein operator sondern das sind 2 operatoren, die zuweisung "=" und die Negation "!" a = !b wird jetzt schritt für schritt abgearbeitet: 1. b wird negiert (Negationsoperator) 2. der darausresultierende Wert wird a zugewiesen (Zuweisung) In Summe: a hat danach im genau den gegenteiligen Wert von b (alles in boolscher Logik). zu deinen globalen Boolschen: Wozu 2? Du kannst mit einer boolschen Variable ja 2 Werte ausdrücken. Und da deine Werte ja immer gegengleich sind (Die Order ist immer "nicht ausgeführt" oder "ausgeführt".. tertium non datur) reicht es wenn du eine Variable "bOrderSent" nimmst und ggf. abfragst ob bOrderSent true (erfolgreich gesendet) oder false (nicht gesendet) ist.
-
Order öffnen und etwas mehr...
Hi Forex1+, zugegeben der Code dort ist schon sehr ausgefeilt und stammt aus meiner TradeBox. Für Anfänger ist es sicher ein bissl heftig. Ich versuch ihn mal runterzubrechen auf das was du brauchst: void Order_veranlassen() { double dBuyStopLoss=Ask-(BuyOrder_SL*Point); double dBuyTakeProfit=Ask+(BuyOrder_TP*Point); int iOrderOpenStatus=OrderSend (Symbol(), OP_BUY,Order1_Lot, Ask, iSlippage, dBuyStopLoss, dBuyTakeProfit, "Forex1+ kauft",MagicNumber,0,Green); //soweit dein Code. jetzt musst du nur anstatt nur abzufragen ob die Order erfolgreich ist, sag "solange die Order nicht erfolgreich war: versuchs nochmal. //vorher noch die Definition deiner bools: boolean einstieg_stattgefunden= false; boolean einstieg_gescheitert= false; //derweil is noch weder noch. int anzahl_versuche= 0; //wir wollens ja nit ewig probieren, also zählen wir mit while(result == -1) // -1 bedeutet ja "nicht erfolgreich" { //dieser Block ist reines Errorhandling, je nachdem welcher Error passiert ist wird entsprechend agiert error=GetLastError(); switch(error) { case ERR_SERVER_BUSY: case ERR_BROKER_BUSY: case ERR_TRADE_CONTEXT_BUSY: Sleep(PAUSE_ON_BUSY); break; case ERR_TOO_FREQUENT_REQUESTS: Sleep(PAUSE_ON_TOO_FREQUENT); break; case ERR_NOT_ENOUGH_MONEY: Alert(" We are broke!"); einstieg_gescheitert= true; //ohne geld kein weiterer versuch break; case ERR_TRADE_TOO_MANY_ORDERS: Alert("Too many open trades!"); einstieg_gescheitert= true; //bei zuvielen offenen orders macht weiter probieren auch keinen sinn break; } //errorhandling ende //mitzählen anzahl_versuche++; if(anzahl_versuche > 10) { einstieg_gescheitert= true; } //wenn zuviel oder zu blöder Error: raus aus der schleife: if(einstieg_gescheitert) break; //Vorbereitung für neuen Versuch: RefreshRates(); //aktualisiere die Marktdaten; //hier ggf. price, stoploss und takeprofit anpssen, ich lass es derweil weg //nächster Versuch: iOrderOpenStatus=OrderSend (Symbol(), OP_BUY,Order1_Lot, Ask, iSlippage, dBuyStopLoss, dBuyTakeProfit, "Forex1+ kauft",MagicNumber,0,Green); } einstieg_stattgefunden= !einstieg_gescheitert; } so, da ich heut schon ein bissl müde bin bezeichne ich die möglichen Syntaxfehler und schlechte Einrückung einfach mal frech als ansporn zum autoditakten ;) Bei Fragen einfach melden (so sachen wie switch etc. sind für neulinge sicher nit das einfachste). sobalds soweit verständlich ist können wir dann ja die price sl und tp anpassung dazubauen ;)
-
Script mit MA trail
sers ;) Also das "script" klingt definitiv mehr nach einem EA (vom Prinzip her). Sicher das es ein Script ist? Ein EA und ein Script sind vom Code her "gleich" (man kann ein script als EA ausführen und einen EA als script... macht nicht viel Sinn, geht aber), der einzige unterschied liegt darin das scripte im script-Ordner liegen. Ja, geht sehr einfach. Wie genau solls ausschauen? Du gibst den Preis vor und dann wird nach oben und unten im 10 Punkte Abstand Orders in den Markt gestellt? Hast du den Code irgendwoher/kopiert? bzw. hast du scheinbar zwischendrin ein paar zeichen gelöscht. Probiers mal damit: (Hab den Teil wo geprintet wird gelöscht weil der irgendwie widersprüchlich war. Du hast außerdem nur die Sellstops beachtet und dann nochmal alle die nicht offene Sells waren... was genau war geplant? ;) Jetzt schließt das script alle Orders die nicht market sind (nicht OP_BUY oder OP_SELL) Du musst beim durchlaufen der Orders und gleichzeitigem Schließen mit den Indizes aufpassen. Wenn du nr. 2 löscht, wird dadurch die alte nr 3 die neue nr 2. wenn du also nach oben durchgehst und nach dem schließen weiterzählst, übersiehst du eine order. Deswegen sollte man immer von oben nach unten durch die orders laufen. weiters hab ich das break in ein continue getauscht. Falls es beim selektieren einer Order ein Problem gibt, muss es nicht heißen das es auch mit den anderen ein Problem gibt, es spricht also nix dagegen die andren noch zu probieren. int start() { bool result; int cmd,total; //---- total=OrdersTotal(); //---- for(int i=total-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); if(cmd !=OP_SELL && cmd != OP_BUY) OrderDelete(OrderTicket()); } else { Print( "Error when order select ", GetLastError()); continue; } } //---- return(0); } btw. wenn du deinen code in [code]...[ / code] tags (ohne leerzeichen) setzt, ist er leichter lesbar. PS sorry für die schlechte einrückung, die neuen codetags mögen mich scheinbar nit oder opera zeigt da was falsch an :(
-
Trading Anfänger hat fragen... (Welcher Broker und allgemein)
Ich sag mal Jein. mMn stellt sich die Frage nicht, da man auf Nanokonten sowieso nur allererste Realtests machen sollte. Also der zwischenschritt zwischen Demokonto und "echtem" Echtgeldkonto. Bei so einem Test gehts mMn hauptsächlich darum zu checken wie der EA mit realen Marktbedingungen (Requotes etc.) zurechtkommt. Das Geld das hier verwendet wird sollte von Anfang an als "verloren" betrachtet werden. Somit ist egal ob man dem Broker vertraut. Mein Tipp für sowas: Bei einem der Broker einen kleinen Betrag (zB 200 Euro) überweisen (Auf Nanokonto kann man da schon schön arbeiten). Damit auf Nano die verschiedensten EAs testen. Wenn sie funktionieren und man gewinnt, steigt man sowieso auf ein richtiges Konto um, dann kann man das Nanokonto für die nächsten EAs und Weiterentwicklungen verwenden. Damit ist das Geld nicht "verloren" sondern wird einfach immer wieder weiterverwendet (sofern der EA in der Testphase nit total kamikaze geht). Rücküberweisungen sind halt fraglich ;) Aber wenn der EA funktioniert sind die 200 am Nanokonto schnell herinnen, wenn nicht ist man froh das es nur 200 waren die er am Nano verbrannt hat ;)
-
Script mit MA trail
Grüße aus Linz nach Tirol ;) Zum Thema Script vs. EA: Wie Wolf richtig schreibt sind die 2 für unterschiedliche "Zwecke" gedacht. Scripte für einmalige Aktionen die einmal laufen und aus. EAs für kontinuierliche Überwachung. Man kann jetzt natürlich hergehen und ein Script derart "vergewaltigen" das es nicht einfach druchrennt und seinen Dienst tut, sondern in einer Endlosschleife bleibt und den Markt überwacht (dabei selber ständig die aktuellen Quotes lädt etc.). Aber ein EA macht das sowieso. Zum Thema Trailingstop: Der MT-eigene Trailingstop hat nichts mit EA oder Script zu tun. Das ist ein Zusatzding wo du für eine Order den Trailingstop definieren kannst. Man kann es sich vorstellen wie einen "zusätzlichen" EA den MT intern laufen lässt, der den Stop entsprechend nachzieht. Per EA/Script kann man einen Trailingstop realisieren indem man einfach den StopLoss der Order entsprechend anpasst. Diese Anpassungen werden natürlich nur gemacht während der EA/Script läuft. Auch wenn es wie gesagt technisch per Skript realisierbar ist, ist der Aufwand für ein Skript hier deutlich höher als für einen EA. Bzgl. komplizierter Code: Man muss unterscheiden was man machen will. Wenn es ein supersimpler EA sein soll dem man zB das Ticket übergibt und er zieht den Stop nach (ACHTUNG: Ich würd das nicht machen weil sich teils Tickets per Server ändern etc. nur als veranschaulichung), dann kann man das in geschätzten 5-10 Zeilen programmieren. (Also zusätzliche Zeilen nach dem öffnen eines neuen EAs). Schwierig werden dann so Punkte wie Errorhandling (was passiert wenns Probleme gibt) oder wenn du den EA verallgemeinerst (er sucht sich selber die Order die er nachzieht etc.). Aber diese Punkte sind immer noch in einem EA einfacher umgesetzt als in einem Script den der effektive Code ist der gleiche, beim Script kommt nur noch Zeug rundherum dazu um das EA-Verhalten zu simulieren. In Summe glaub ich das deine Angst vor EAs total unbegründet ist ;) Probiers einfach mal, wir helfen gerne. hth Wie läuft eigentlich dein aktuelles Script? Das klingt als würd es "dauerhaft" laufen, was ein Script ja nicht von allein tut.