Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Handeln zum Close-Price (http://www.expert-advisor.com/forum/showthread.php?t=3380)

Fibotrader 14.12.13 14:40

Handeln zum Close-Price
 
Hallo,

bin neu hier und hätte eine Frage zu MQL4.

Ich war bisher ein rein diskretionärer Trader und würde in Zukunft gerne auf die Unterstützung von automatischen Systemen bauen, allerdings nur beim Ausstieg. Da ich von MQL4 noch keine Ahnung habe und zur Zeit am überlegen bin, mich da einzuarbeiten, hätte ich eine Frage vorab: ist es möglich, zum Beispiel diskretionär einzusteigen und dann den Stop per Close-Kurs (niedere Zeiteinheit) auf einer Unterstützungslinie zu setzen. Also als Beispiel, verkaufe die Position, wenn der Kurs xy per Close auf einem 5-Min-Bar unterschritten wird.

Ich wäre sehr dankbar wenn mir jemand diese Frage beantworten kann. Falls das nämlich nicht geht, brauche ich mir gar nicht einzuarbeiten sondern muß mir was anderes suchen.

Ich danke schon mal im Voraus für die Antworten.

Grüße
Fibotrader

feelfree 14.12.13 16:35

Hallo Fibotrader,

deine Anforderung ist ohne Weiteres umsetzbar.

Grüße
Dan

Fibotrader 14.12.13 17:35

Hallo feelfree,

super, danke für die schnelle Antwort.

Dann werde ich mich genauer mit MQL4 beschäftigen.

Schönes Wochenende noch
Grüße
Fibotrader

Fibotrader 16.12.13 16:55

hab jetzt Zugang zum MT4.

Nach ersten Erkenntnissen denke ich, daß mir ein Skript reicht und ich kein EA brauche.

Hab mal mit Equilla gearbeitet: da müßte ich schreiben:
if close of 'Data1 1M' > 78.90 then buy next bar at market;

Da würde er jetzt im 1Min Chart beim Close über 78.9 market kaufen.
Die Ordersize fehlt hier aber die gibt man bei Equilla an anderer Stelle ein.

Nun müßte ich das modifizieren und auf MQL4 übertragen.

Vielleicht kann mir jemand etwas auf die Sprünge helfen :)

Danke

Deepack 16.12.13 19:27

hi
vorab sollte man sagen dass für dich ein skript bestimmt nicht ausreicht
ob du einen EA oder ein skrip schreibst ist völlig egal

aber ein skript wird nur einmal ausgeführt wenn du es anwendest
ein EA bei jedem Tick.

zu deiner frage...
Code:

//Mit iClose kannst du aus anderen Zeiteinheiten Closedaten holen
iClose(Symbol(),PERIOD_M5,1) // in diesem Fall M5 die letzte gescholossene Kerze

Viel erfolg

Fibotrader 16.12.13 19:45

Hi Deepack,

hab jetzt gerade mal was gebastelt.

if (Close[1] < x)
{OrderClose(Order-id,1,Ask,3,Red);}

Wenn ich das in den 5Min Chart ziehe hätte ich jetzt ganz naiv angenommen, daß er dann die Close-Kerze aus dem 5Min Chart nimmt aber so wie du schreibst, wird er das wohl nicht machen. Dann schaue ich mir mal iclose an. Danke für den Tip.

Deepack 16.12.13 20:49

ja doch doch das geht natürlich auch!
meine version ist unabhängig von der ausgewählten Periode

Fibotrader 16.12.13 21:10

ok, alles klar :)

Was gibt man denn eigentlich so als Slippage ein, wenn man die Order auf jeden Fall ausgeführt haben will ?
Wenn man z.B. Null eingibt, heisst das keine Slippage wird zugelassen oder der Slippagefaktor wird ausgeblendet ?

Fibotrader 17.12.13 06:20

Folgendes habe ich nun gespeichert und ohne Fehler kompiliert.
Ziehe ich dieses Skript in den 30Min Chart müßte aus meiner Sicht folgendes passieren: Wenn der Close-Preis im 30Min Chart über 9500 liegt, dann wird 1 Einheit gekauft. Wäre super, wenn mir das jemand bestätigen könnte.

//+------------------------------------------------------------------+
int start()
{
if(Close[1] > 9500)
{
int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,NULL, 0,0,CLR_NONE);
return;
}
if(ticket<1)
{
Print("OrderSend failed with error #",GetLastError());
return;
}
//----
return(0);
}
//+------------------------------------------------------------------+

feelfree 17.12.13 09:09

Sieht auf den ersten Blick richtig aus.
Probier's einfach mal aus. Kann ja nichts passieren. :)

Fibotrader 17.12.13 09:50

Hallo feelfree,

hab das Skript in den Chart gezogen, ging aber nicht.

Im Protokoll steht der Skript-Name und dann removed. Warum weiß ich nicht. Das Konto ist ganz neu, vielleicht fehlt noch etwas.

feelfree 17.12.13 17:01

Servus fibo,

bei mir funktioniert dein Script auf dem DOW einwandfrei.
Auf welchem Chart hast du's denn probiert?

Sollte ja schon > 9500 anzeigen. ;)

Fibotrader 17.12.13 18:14

Hi feelfree,

super, dann weiß ich wenigstens das es funzt, danke.

Ich hab es auf den Dax gezogen. Er notiert ja noch etwas drunter, aber die Formel sollte ja trotzdem angenommen werden. In dem Moment, wenn ich die Formel in den Chart ziehe, wird unten im Bereich der Nachrichten bei "Experten" folgendes angezeigt:

loaded successfully, dann OrderSend failed with error#0, dann uninit reason 0 und dann removed. Ich weiß nicht, warum er die Fehlermeldung bringt. Hab gerade mal geschaut, was der Grund "uninit reason 0) bedeutet und folgendes gefunden: Script finished its execution independently.

Ich denke, das Problem liegt irgendwie daran, daß er in meinem Fall beim Dax auf die Order warten muß und beim Dow kann er sie direkt ausführen, weil dieser ja über 9500 notiert. Falls das stimmt ist das natürlich nicht so gut, weil ich ja nicht sofort kaufen will, sondern erst bei Überschreiten einer Marke.

Vielleicht muß ich die Formel ändern: z.B. if(Close[1] crosses over 9500). Muß mal sehen ob es das bei MQL überhaupt gibt.

feelfree 17.12.13 18:28

Deepack hat es bereits gestern gepostet.

Zitat:

Zitat von Deepack (Beitrag 24414)
hi
vorab sollte man sagen dass für dich ein skript bestimmt nicht ausreicht
ob du einen EA oder ein skrip schreibst ist völlig egal

aber ein skript wird nur einmal ausgeführt wenn du es anwendest
ein EA bei jedem Tick.

Viel erfolg

Ein EA wartet bis die Bedingung zutrifft. Also schreib gleich einen EA.
Der Aufbau ist derselbe und er arbeitet so lange bis du ihn aktiv aus dem Chart entfernst.

Ein Cross kannst du abfragen indem du die Bedingung wie folgt formulierst
Close[2] < 9500 && Close[1] > 9500

Grüße
Dan

Fibotrader 17.12.13 19:19

Hallo Dan,

super, jetzt hat es geklappt :)

Jetzt hab auch ich endlich verstanden, was der Unterschied zwischen Skript und EA ist.

Allerdings schreibt er mir jetzt alle paar Sekunden (also wahrscheinlich jeden Tick wenn er die Bedingung abfragt) "OrderSend failed with error #0. Das macht er wohl jetzt so lange bis die Bedingung erfüllt ist. Ist das normal oder soll ich das einfach rausnehmen, dann schreibt er nix, und wenn die Order ausgeführt wird, dann ist gut.

Danke nochmal (auch nochmal an Deepack)

Fibotrader 17.12.13 19:45

Eine Frage hätte ich doch noch:

Wie oft wird denn der Kaufauftrag ausgeführt? was wäre denn wenn nach dem Close>9500 ein Close<9500 kommt und dann wieder ein Close>9500, kauft er dann nochmal? muss ich vielleicht irgendwie die Anzahl der Orders limitieren?

feelfree 18.12.13 10:07

Zitat:

Zitat von Fibotrader (Beitrag 24435)
Eine Frage hätte ich doch noch:

Wie oft wird denn der Kaufauftrag ausgeführt? was wäre denn wenn nach dem Close>9500 ein Close<9500 kommt und dann wieder ein Close>9500, kauft er dann nochmal? muss ich vielleicht irgendwie die Anzahl der Orders limitieren?

Du lernst schnell. ;)

Bevor du deine Order abschickst solltest du natürlich prüfen ob bereits eine Order offen ist.

Genau so verhält es sich mit dem erstgenannten "Fehler" ("OrderSend failed with error #0), der durch die Tatsache entsteht das Tickets solange < 1 ist bis deine Order abgesetzt wird.

Du musst die Bedingung also sinnvoll ineinander verschachteln.
Aktuell steht jede für sich allein.

Programmieren zu lernen ist aufwändig aber ich kann dir jetzt schon versichern dass es sich in vielerlei Hinsicht für dich auszahlen wird.

Fibotrader 18.12.13 10:29

Morgen Dan,

ich sehe schon, da brauche ich jetzt nochmal eine Nacht dazu :)

Ist aber wirklich Klasse, dass du Hilfestellung gibst. So ganz alleine wäre man schon etwas aufgeschmissen.

Na ja, ich schaue mal ob ich da was basteln kann. Kann allerdings erst heute abend damit anfangen.

Ich muß es übrigens lernen, denn ich habe es satt, mein Leben vor dem Rechner zu verbringen. Ich bin seit 15 Jahren diskretionärer Trader und habe sehr sehr viel Zeit vor dem Rechner verbracht. Ich möchte aber behaupten, dass es auch Vorteile hat. Ich kann natürlich den Markt relativ gut abschätzen, meistens liege ich die ersten paar Meter richtig (im Minutenbereich). Ich möchte aber in Zukunft nicht den Ausstieg machen, sondern es dem Computer überlassen. Dadurch nehmen meine Freiräume und wahrscheinlich auch meine durchschnittlichen Gewinnpunkte zu.

Und es macht ja auch keinen Sinn, sich etwas erstellen zu lassen, denn schließlich bin ich naher der, der sein Geld damit riskiert und die Systeme administriert.

Danke dir nochmal
Grüße
Fibo

Fibotrader 18.12.13 11:26

hab jetzt auf die Schnelle doch was gemacht.

Macht das Sinn ?? die erste Order bekommt doch die Ordernummer 1, dann müßte es doch gehen.

//+------------------------------------------------------------------+
int start()
{
if(Close[1] > 9500)
{
int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,30,0,0,NULL , 0,0,CLR_NONE);
return;
}
if(ticket<1)
{
Print("OrderSend failed with error #",GetLastError());
return;
}
if(ticket>1)
{Print("max. Lot erreicht");
return;
}
//----
return(0);
}
//+------------------------------------------------------------------+

feelfree 18.12.13 12:59

Nein, das macht keinen Sinn.

Der Entscheidungsbaum soll ja wie folgt aussehen:

Ebene 1. Bedingung erfüllt: ja/nein (ja = Ebene 2 / nein = Exit)
Ebene 2. Open Orders: ja/nein (ja = Exit / nein = OrderSend und Fehlercheck)
Ebene 3. OrderSend
Ebene 4. Ticketcheck: ja/nein ( ja = check ok und Exit / nein = error code und Exit)

Du musst mit if und else arbeiten.

So wie es jetzt aufgebaut ist bleibst du immer in Ebene 1 und fragst hintereinander 3 verschiedene Bedingungen ab.

Code:

      ticket=OrderSend(Symbol(),OP_BUY,1,Ask,30,0,0,NULL , 0,0,CLR_NONE);
      if( ticket > 0 )
      {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      {
        Print("BUY order opened : ",OrderOpenPrice());
      }
      }
      else
      {
      Print("Error opening BUY order : ",GetLastError());
      }


Fibotrader 18.12.13 13:35

ok, also doch eine kurze Nacht :D

bin heute nachmittag unterwegs und werde mich dann später der Sache widmen. Es macht auf jeden Fall Spaß wenn man ein Feedback bekommt, danke nochmal dafür.

Fibotrader 18.12.13 21:33

Abend Dan,

hab vorher gar nicht gesehen, dass du einen Code hinterlegt hast.

Hab mir das Ganze jetzt mal genauer angesehen und muß sagen, WOW, das hat jetzt eine richtige Struktur. Ich konnte wirklich viel aus deinem letzten Beitrag lernen, da stecken richtig viele Informationen drin.

Was mir nur etwas spanisch vorkommt, ist das der Fehlercheck (Ebene 2) bei meinem gestrigen Code alle paar Sekunden im Experten-Reiter aufgetaucht ist (hab gedacht er fragt das bei jedem Tick ab) und heute bei dem gleichen Code passiert nichts. Da schreibt er "loaded successfully" und das wars :rolleyes:

Deine Geschäfte laufen wohl sehr gut wenn du Zeit hast, dich hier mit Anfängern wie mir abzugeben. Kann mich gar nicht genug für die Hilfe bedanken.

feelfree 18.12.13 22:49

Servus Fibo,

als Coder hast du den Vorteil dass dir deine Programme sagen wann ein regelkonformer Entry auftritt und ab da gibt es jede Menge freie Zeit bis der TP getroffen wird. :)

Zum Zweiten wurde mir in eben diesem Forum auch schon oft geholfen und zum Dritten ist es eine Frage der (hilfesuchenden) Persönlichkeit ob es sich lohnt hier Zeit zu investieren.

Wenn du deine Fortschritte nachvollziehen willst empfehle ich dir immer eine neue Version der MQ4 Datei zu speichern wenn du strukturelle Änderungen im Code machst.

Grüße
Dan

Fibotrader 18.12.13 23:59

was mich noch interessieren würde:

ich bin ja wie gesagt schon seit längerer Zeit diskretionärer Trader (hab das auch 15 Jahre lang für eine Bank gemacht) und wir Händler haben damals häufig darüber diskutiert, ob systematisches oder diskretionäres Traden erfolgreicher ist. Man kann das natürlich nicht so einfach beantworten, da es im Bereich des diskretionären Tradings natürlich enorme Unterschiede hat. Die meisten verlieren, während wenige sehr gute Trader hohe Gewinne einfahren. Was können Handelssysteme schaffen? ich habe hier im Forum auch mal was von 100% im Jahr gelesen und kann mir das nachhaltig kaum vorstellen. Bisher war ich immer der Meinung, daß gute Systeme kaum mehr als durchschnittlich 20 -30% im Jahr schaffen (was aber natürlich auch schon super ist). Wie sind denn deine Erfahrungswerte ?

Grüße
Fibo

feelfree 19.12.13 09:32

Guten Morgen Fibo,

zu deiner Frage: "Was können Handelssysteme schaffen?"

hast du auch schon die passende Antwort gegeben

Zitat:

Zitat von Fibotrader (Beitrag 24454)
Man kann das natürlich nicht so einfach beantworten, da es im Bereich des diskretionären Tradings natürlich enorme Unterschiede hat. Die meisten verlieren, während wenige sehr gute Trader hohe Gewinne einfahren.

Für vollautomatische Handelssysteme gilt genau das Gleiche.
Und die prozentuale Steigerung muss man auch immer im Verhältnis zum Gesamtkapital sehen.

Es gibt hoch profitable Handelssysteme bei Banken und Investment Gesellschaften und es gibt konstant profitable Expert Advisor wie den Kangaroo EA, die auch für Retailtrader erschwinglich sind bzw. waren.

Über 95% der zum Verkauf angebotenen EAs sind allerdings nicht die Bytes auf deiner Platte wert.

Ich persönlich nutze beides.
Eigene EA's zur Tradeverwaltung und als eigenständige Handelssysteme und dazu genieße ich auch den Spaß des normalen manuellen Tradings.

Letztlich hängt alles davon ab wie schnell du als Trader den Marktphasenwechsel erkennst und/oder wie gut du deinem EA beibringst diesen als solchen zu erkennen.

Da eine EA-Programmierung immer 100% eindeutig sein muss wird dich die Regeldefinition vermutlich schnell an die Punkte bringen wo du nach Bauchgefühl entscheidest.
Und ab da wird's richtig spannend. :)

Grüße
Dan

Fibotrader 19.12.13 10:45

Moin Dan,

durch meine langjährige diskretionäre Tätigkeit habe ich einen Haufen Ideen, wie man vor allem gute Einstiegspunkte findet. Den Ausstieg sollte man meiner Meinung nach einem System überlassen und das ist auch meine Intension hier aktiv zu werden.

Obwohl ich diskretionär handle ist gar nicht mehr so viel Bauchgefühl dabei, also ich habe trotzdem ein Regelwerk entwickelt, an das ich mich weitgehend halte. Allerdings kann ich das nicht so einfach quantifizieren.

Vielleicht versuche ich in Zukunft meine diskretionären Strategien in Algorithmen zu pressen; ich zweifle allerdings, dass mir das gelingen wird :D

Grüße
Fibo

Fibotrader 19.12.13 13:54

Hallo Dan,

du hast gesagt, beim Dow hat der Code funktioniert ?

Hab es jetzt so:


//+------------------------------------------------------------------+
int start()
{
if(Close[1] > 9300)
{
int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,30,0,0,NULL , 0,0,CLR_NONE);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))
{
Print("BUY order opened : ",OrderOpenPrice());
}
}
else
{
Print("Error opening BUY order : ",GetLastError());
}
return;
}
if(ticket<1)
{
Print("OrderSend failed with error #",GetLastError());
return;
}
//----
return(0);
}
//+------------------------------------------------------------------+

gerade beim Dax im Minutenchart ausprobiert (Demo-Version) und nix geht. Du siehst bestimmt relativ schnell woran es liegen kann. Bei mir ist das noch ein langer Weg...

Grüße
Fibo

feelfree 20.12.13 08:58

Liste der Anhänge anzeigen (Anzahl: 1)
Moin Fibo,

als Script funktioniert dein Code einwandfrei.
Wobei die ticket<1 Abfrage überflüssig ist, da wir in der darüberliegenden Sektion einen Fehler ausgeben wenn die Order nicht angenommen wird.

Als EA kann das Script allein nicht funktionieren weil zu einem EA die Sektionen int init() und int deinit() gehören und in diesem Fall ergänzt werden müssen.
Zum Zweiten fehlte auch die Abfrage ob bereits eine Order platziert ist.

Um das Ganze abzukürzen hab ich es dir in EA Form angehängt.

Grüße
Dan

Fibotrader 20.12.13 09:44

Hi Dan,

ich sehe schon, ich habe noch einen langen Weg vor mir. Dir kann ich gar nicht genug danken für die Hilfe. Weiss gar nicht, wie ich das zurückgeben soll. Einen Code für dich schreiben wird in diesem Leben wohl nichts mehr :D

Obwohl ich den Code noch nicht ganz verstehe werde ich jetzt keine Fragen mehr stellen, sondern mich über die Feier- und Urlaubstage ganz brav damit beschäftigen.

Trotzdem klappt es bei mir leider nicht. Ich weiß nicht ob ich was falsch mache. Hab den EA in den Chart (Dax, M1) gezogen. Er hätte dann normalerweile bei der nächsten fertigen Candle kaufen müssen (zum Close, Kurs liegt ja über 9300). Ist aber nichts passiert.

Grüße
Fibo

feelfree 20.12.13 10:06

Gern geschehen. :)

Bei mir funktioniert er einwandfrei.

Du hast sonst keine (auch pending) Order im Terminal?

Am Schnellsten lernst du wenn du dir andere mq4 Dateien anschaust und deren Logik "entschlüsselst".
Eine gute Quelle für Einsteiger ist MQL4 Code Base: expert advisors for MetaTrader
Die dortigen Scripte taugen aber lediglich zum Lernen.

Zwischen den Feiertagen schau ich sicherlich auch mal hier rein.

Bis dahin viel Erfolg und schöne Feiertage.

Fibotrader 20.12.13 10:24

nein, sonst habe ich keine pending orders. Vielleicht liegt es an der Demo-Version, mit der ich gerade teste. Ich werde das noch weiter ausprobieren.

Ich wünsche dir ein Frohes Weihnachtsfest, besinnliche Feiertage und lass es dir gutgehen :)

Grüße
Fibo

feelfree 20.12.13 13:43

Liste der Anhänge anzeigen (Anzahl: 1)
Hast du die Häkchen für den EA Live Handel gesetzt? (s.Anhang)

Fibotrader 20.12.13 13:54

ja hab ich gemacht, aber ich habe nicht auf die Schaltfläche "Expert Advisor" geklickt :confused: , bin gerade vorher darauf gekommen.

Sorry, dass ich dir da unnötig Aufwand bereitet habe. Das muß ich natürlich selber wissen. Das Problem ist, ich will immer alles gleich am ersten Tag fertig haben, hab die Software erst seit wenigen Tagen und mich gar nicht damit vertraut gemacht. Nebenher trade ich noch mit meinem normalen Broker (interactive brokers) und hab es schlichtweg verpennt, mich etwas mit dem Metatrader an sich vertraut zu machen (bin gleich zum programmieren übergegangen)

Es ist natürlich genial, dass du mir jetzt schon wieder die Lösung präsentierst. Eigentlich bist du mein Expert Advisor :D

fxdaytrader 25.12.13 12:18

Nebenbei gefragt: Soll das jetzt ein skript oder ein EA werden?

Wenn ich das richtig verstehe soll geprüft werden ob der letzte close über preis xyz war, und falls ja (und noch keine Order offen) soll dann eine order gesendet werden.

Wenn dem so ist, dann ist doch die Benützung eines skriptes für diese Aufgabe, nun, schlicht überflüssig. Warum?

Du mußt das script manuell aufrufen. Das Teil prüf ob die Bedingungen erfüllt sind (sendet dann die order) oder bricht sofort wieder ab (Bedingung nicht erfüllt). Das kann man auch manuell machen, ein script hat hier in diesem Fall doch 0 Vorteile da schon der Aufruf des scripts erst sinnvoll ist wenn die Bedingung erfüllt ist.

Fazit: Nur ein EA macht hier Sinn, denn es geht doch darum eine Order aufzugeben wenn Bedingung xyz erfüllt ist und der trader nicht am Rechner hockt :)

fxdaytrader 25.12.13 12:52

Liste der Anhänge anzeigen (Anzahl: 1)
Als Anhang der FiboTrader-EA (s. einige posts vorher) etwas modifiziert, das funktioniert zumindest im Backtest, auch mit tp/sl-setzung

Fibotrader 01.01.14 18:03

Hallo fxdaytrader,

erstmal wünsche ich allen ein gesundes und erfolgreiches neues Jahr 2014.

Dir möchte ich für die Teilnahme zur Lösung meines Problems und für den EA danken.

Als Anfänger konnte ich den Code noch nicht ganz nachvollziehen, werde aber weiter daran arbeiten. Vor allem die Bedeutung vom eingebauten MA erschließt sich mir noch nicht ganz.

Vielleicht kannst du noch was dazu sagen.

Grüße
Fibo

fxdaytrader 01.01.14 18:30

Zitat:

Zitat von Fibotrader (Beitrag 24558)
Vor allem die Bedeutung vom eingebauten MA erschließt sich mir noch nicht ganz.

:) jau -> das habe ich eingebaut um den ea auch vernünftig backtesten zu können (weil ich nicht weiß wann der Preis, bestimmt in BuyAbovePrice, erreicht ist).
Wenn also BuyAboveMaInstead=true ist, dann wird der Preis ignoriert und stattdessen beim Bruch des EMA periode MaPeriod gekauft ...

Fibotrader 01.01.14 21:55

ok, alles klar. Nun bin ich einen Schritt weiter bei der Entschlüsselung :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:34 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum