_guest_ Posted December 12, 2012 Author Report Posted December 12, 2012 So, der Stand für heute nach meinen Trades: Initialtrade: Long 1,30100 SL 1,29900 TP 1,30300 Lotsize 0,01 Short 1,30083 TP 1,30283 SL 1,29883 Lotsize 0,01 Level 1 Long 1,30000 SL 1,29900 TP 1,30300 Lotsize 0,02 Short 1,29982 SL 1,30283 TP 1,29883 Lotsize 0,01 level 2 Long 1,30100 SL 1,29900 TP 1,30300 Lotsize 0,03 Short 1,30083 SL 1,30283 TP 1,29883 Lotsize 0,02 Level 3 Long 1,30200 SL 1,29900 TP 1,30300 Lotsize 0,05 Short 1,30182 SL 1,30283 TP 1,29883 Lotsize 0,03 Das Kapital betrug 330,36 EuroCent.Margininanspruchnahme: 1,21% oder 4€.Bei 1,3030 wurde ich dann aus den Positionen gerissen mit SL/TP und habe mit dem Centaccount verdient:17,75% oder 71ct auf die Margin gerechnet.0,21% auf die Account Equity.Dis Ergebnisse Berücksichtigen den Spread.Hört sich nicht viel an, aber wenn man davon 2 oder 3 Trades am Tag hinlegt hat man auch (auf diesen Fall bezogen) 0,6% p.T. / 12% p.M. oder 144%p.a. verdient. Das ist wiederrum schon okay oder? Quote
siscop Posted December 12, 2012 Report Posted December 12, 2012 Mal eine Frage....Nach dem Initialtrade ging ja der Kurs runter wo dann Lvl1 kam. Level1Der Kurs ging runter.Nach keiner Logic sollte doch die Shortposi dann vergrößert werden und zur hälfte die Longposi. Warum hast du die Longposi vergrößert und zur hälfte die Short?Level2Kurs steigtDu hast beide Posis vergrößert jedoch die Shortposi Prozentual stärker... Sollte die Longposi nicht stärker erhöht werden? Level3Kurs steigt.Longposi wurde stärker vergrößert als die Shortposi. Wäre nett wenn du mir Lvl1 und Lvl2 Posimanagement erklären könntest. Quote
_guest_ Posted December 12, 2012 Author Report Posted December 12, 2012 Mal eine Frage....Nach dem Initialtrade ging ja der Kurs runter wo dann Lvl1 kam. Level1Der Kurs ging runter.Nach keiner Logic sollte doch die Shortposi dann vergrößert werden und zur hälfte die Longposi. Warum hast du die Longposi vergrößert und zur hälfte die Short? Level2Kurs steigtDu hast beide Posis vergrößert jedoch die Shortposi Prozentual stärker... Sollte die Longposi nicht stärker erhöht werden? Level3Kurs steigt.Longposi wurde stärker vergrößert als die Shortposi. <- DAS habe ich verstanden mit deiner Erklärung. Wäre nett wenn du mir Lvl1 und Lvl2 Posimanagement erklären könntest.Hi Siscop, vielen Dank fürs Nachfragen...Die Initialtrades habe ich um 9:05 (ich gehe davon aus, dass es brokertime ist) Habe da nicht drauf geachtet ;-)Um 9:29 wurde der SellStop getriggert...Lotsize short 0,02 und long 0,01Um 9:58 wurde der BuyStop getriggert...Lotsize long 0,03 und short 0,02Um 10:20 wurde der dritte BuyStop getriggert...Lotsize long 0,05 und short 0,03 Ich hoffe, dass es nun deutlicher wurde...bei Fragen bitte gerne stellen :) ... Übrigens...Du hast Recht...ich habe mich oben verschrieben...ich hatte die Lotsize im ersten Leven beim short vergrößert und nicht beim long...mea culpa Quote
siscop Posted December 12, 2012 Report Posted December 12, 2012 Noch eine Frage zum Verständnis.Sind die Lotgrößen Absolutgrößen oder deltas also hinzukommende Posis. InitialLong 0,01Short 0,01 LVL1Long 0,01 total oder hinzukommende somit totalposi 0,01+0,01=0,02 Lot?Short 0,02 total oder hinzukommende somit totalposi 0,01+0,02=0,03 Lot? Nach deiner Erklärung dürften es hinzukommende Posis sein. Es will mir jedoch nicht in meinem Kopf warum du Long und Short gleichzeitig tiggerst statt nur eine Seite (halt den Unterschied zwischen Long und Short) hinzufügst. Mit einem Zähler der die Liniendurchbrüche zählt könnte dann als dein Multiplikator dienen. Dann sparst du doch Slippage und Brokergebühren und würdest bei einem Seitwärtsmarkt trotzdem Long und Short posis im Markt haben jedoch mit viel kleineren Posis mit dem selben Profit - und würdest auch länger im Seitwärtsmarkt durchhalten. Quote
_guest_ Posted December 12, 2012 Author Report Posted December 12, 2012 Noch eine Frage zum Verständnis.</p>Sind die Lotgrößen Absolutgrößen oder deltas also hinzukommende Posis.</p> InitialLong 0,01Short 0,01 LVL1Long 0,01 total oder hinzukommende somit totalposi 0,01+0,01=0,02 Lot?Short 0,02 total oder hinzukommende somit totalposi 0,01+0,02=0,03 Lot? die kommen hinzu...am Ende hatte ich heute folgende absolute Größen:Long: 0,01 + 0,01 + 0,03 + 0,05 = 0,1 LotsShort: 0,01 + 0,02 + 0,02 + 0,03 = 0,08 Lots Quote
_guest_ Posted December 12, 2012 Author Report Posted December 12, 2012 Nach deiner Erklärung dürften es hinzukommende Posis sein. Es will mir jedoch nicht in meinem Kopf warum du Long und Short gleichzeitig tiggerst statt nur eine Seite (halt den Unterschied zwischen Long und Short) hinzufügst. Mit einem Zähler der die Liniendurchbrüche zählt könnte dann als dein Multiplikator dienen. Dann sparst du doch Slippage und Brokergebühren und würdest bei einem Seitwärtsmarkt trotzdem Long und Short posis im Markt haben jedoch mit viel kleineren Posis mit dem selben Profit - und würdest auch länger im Seitwärtsmarkt durchhalten. Nette Idee...habe ich noch nicht drüber nachgedacht...Bin wahrscheinlich zu fixiert bisher...Prinzipiell würde es auch reichen, dass ich nur eine Initialorder eingehe...zum Beispiel long über dem vorherigen high oder highest high ...ist ja auch egal wo...und dann anfange mit dem Multiplikator zu rechnen...ich müsste ohne die Gegenseite einzugehen dann lediglich den faktor halbieren... Was ich aber in Seitwärtsphasen habe kommt erst noch... Stell Dir vor du bis long und short...Initialtrade...dann bewegt sich der Markt in deine Richtung um 10 Pips...also was passiert...ich gehe long mit faktor und mit halbiertem hedge...jetzt mache ich folgendes...ich tue einfach so als wenn ich gar keine Position offen habe und spiele bei dem ersten Level die Initialpositionierung nach...was passiert?Habe jetzt 2 Initialtrades mit verschiedenen Kursen und eine Long Trend/ Short Hedge Position...jetzt bewegt sich der Markt gegen meine Richtung und ich erhöhe auf der einen Seite zu Level 2 und auf der anderen Seite zu Level 1...Wenn ich mich nicht all zu sehr irre kann ich dann auch Seitwärtsphasen überstehen und nehme dann Gewinne mit in dem ich eine Position zum schließen bringe und auf der anderen Seite dann erneut eine eröffne...Ich kopiere also meine Trades mit einem anderen Kursniveau welches meiner Range für das erste Level entspricht :) Ich hoffe das war nicht zu abstrakt ;-) musste da jetzt selber 5 mal drüber nachdenken Quote
Mythos Posted December 12, 2012 Report Posted December 12, 2012 Hab jetzt leider nicht die Zeit viel zu schreiben, aber ich stimme syscop zu. Long und Short gleichzeitig aufzustocken füttert nur den Broker. Und Rebates kriegst du sicher nicht in einem Ausmass der dir den gezahlten Spread aufwiegt.Die Logik wie du sie bisher geschrieben hast ist wie gesagt mMn sehr einfach mit dem Framework umzusetzen. Ich würde vorschlagen du versuchst es einfach mal zu implementieren und machst einen schnellen Backtest. Quote
_guest_ Posted December 13, 2012 Author Report Posted December 13, 2012 Heute wird neu getestet...ich gehe nun keine Hedgepositionen ein, sondern verringere den Faktor...rechnerisch habe ich gestern bei einem Faktor von 0,75 nach 10 Leveln (wenn ich das noch richtig im Kopf habe) gerade mal 3,2% bei 1000€ Equity eingesetzt kam kam ohne Spread auf 90Pips...also weiter testen... Quote
_guest_ Posted December 13, 2012 Author Report Posted December 13, 2012 So...fertig gehandelt:Folgende Trades habe ich getätigt... Equity 331,07€, Hebel 1:500, Faktor von 0,75InitialtradeLong 1,30863 TP 1,31063 SL 1,30663 Lotsize 0,01 Pips -20Short 1,30848 TP 1,30648 SL 1,31048 Lotsize 0,01 Pips +20Level 1Long 1,30963 TP 1,31063 SL 1,30663 Lotsize 0,01 Pips -30Level 2Short 1,30848 TP 1,30648 SL 1,31048 Lotsize 0,01 Pips +20Level 3Short 1,30748 TP 1,30648 SL 1,31048 Lotsize 0,02 Pips +20Gewinn von 10 PipsLotsize Total: 0,01Margin Total: 2€Gewinn EUR: 0,77 EURRoI EUR: 38,5%RoC EUR: 0,23%Alles in allem eigentlich okay denke ich Quote
_guest_ Posted December 13, 2012 Author Report Posted December 13, 2012 Ein Problem des händischen Trading merke ich gerade...Der Spread ändert sich und man ist mit einer Seite rausgeworfen worden und mit der anderen noch drin :(Es müsste also automatisiert so laufen, dass wenn der TP erreicht wird, alle Positionen geschlossen werden...das macht das ganze sicherer und sorgt dafür, dass der Broker nicht aufeinmal anfängt den Spread zu drehen wie er Lustig ist... Quote
Licens Posted December 13, 2012 Report Posted December 13, 2012 Ich vermute mal, wenn du noch die Slippage mit dazurechnen musst, wird es mit Glück eine 0 im Ergebnis.Und Slippage wirst du Live vermutlich bei jeder Order bekommen.Zumal deine Gridwerte geläufige Werte für viele Grissysteme sind, an denen dadurch gern kleine Hüpfer entstehen.Oder handelst du das jetzt schon auf einem Live-Konto und hast das schon berücksichtigt?Weiß gerade nicht mehr, ob du dazu schon was geschrieben hattest. Quote
Vola Posted December 13, 2012 Report Posted December 13, 2012 Irgendeinen Filter wirst du sicherlich einfügen müssen, ansonsten könnte ich mir gut vorstelle, dass das System zu starr istund du durch zu häufiges drehen / neu eröffnen nur schwer stetige Gewinne einfahren wirst.Aber teste schön weiter, bin ja selbst auch neugierig Quote
_guest_ Posted December 13, 2012 Author Report Posted December 13, 2012 Ich vermute mal, wenn du noch die Slippage mit dazurechnen musst, wird es mit Glück eine 0 im Ergebnis.Und Slippage wirst du Live vermutlich bei jeder Order bekommen.Zumal deine Gridwerte geläufige Werte für viele Grissysteme sind, an denen dadurch gern kleine Hüpfer entstehen.Oder handelst du das jetzt schon auf einem Live-Konto und hast das schon berücksichtigt?Weiß gerade nicht mehr, ob du dazu schon was geschrieben hattest.Hi Licens, also die Slippage hatte ich bei dem Trade schon mit Berücksichtigt...der jetzige Trade ist zum Glück ebenfalls im Gewinn geschlossen und nach Slippage waren es dann 0,67€...Der Einstieg war übrigens willkürlich gewählt...Lies sich einfacher rechnen ;-) Quote
_guest_ Posted December 13, 2012 Author Report Posted December 13, 2012 Irgendeinen Filter wirst du sicherlich einfügen müssen, ansonsten könnte ich mir gut vorstelle, dass das System zu starr istund du durch zu häufiges drehen / neu eröffnen nur schwer stetige Gewinne einfahren wirst.Aber teste schön weiter, bin ja selbst auch neugierig Also gewonnen habe ich heute nun 2 mal...je öfter ich drehen würde, desto mehr Gewinn erziele ich rechnerisch auch...Deshalb wäre es interessant im schlimmsten Fall, also wenn man mit vielen vielen Positionen im Markt ist, einfach einen "Aus-Knopf" zu haben der alles schließen kann...Und bisher habe ich drei mal stetige Gewinne eingefahren :) Quote
Vola Posted December 13, 2012 Report Posted December 13, 2012 Also gewonnen habe ich heute nun 2 mal.. Yep, lasse es doch mal 2 bis 3 Wochen so laufen und dann rechne zusammen.Ich gönne es dir ja, wäre halt nur interessant was ein wenig längerfristig wirklich an Gewinnen zusammen kommt. Quote
Licens Posted December 13, 2012 Report Posted December 13, 2012 Hi Licens, also die Slippage hatte ich bei dem Trade schon mit Berücksichtigt...der jetzige Trade ist zum Glück ebenfalls im Gewinn geschlossen und nach Slippage waren es dann 0,67€...Der Einstieg war übrigens willkürlich gewählt...Lies sich einfacher rechnen ;-)Ok. :)Und das Konto ist Demo oder Live? Quote
_guest_ Posted December 13, 2012 Author Report Posted December 13, 2012 InitialtradeLong 1,30515 TP 1,30715 SL 1,30305 Lotsize 0,01 Pips +20Short 1,30487 TP 1,30300 SL 1,30700 Lotsize 0,01 Pips -21,3 (Slippage!)Level 1Long 1,30615 TP 1,30715 SL 1,30305 Lotsize 0,01 Pips -30Gewinn von 8,7 PipsLotsize Total: 0,01Margin Total: 2€Gewinn EUR: 0,67 EURRoI EUR: 33,5%RoC EUR: 0,20% Yep, lasse es doch mal 2 bis 3 Wochen so laufen und dann rechne zusammen.Ich gönne es dir ja, wäre halt nur interessant was ein wenig längerfristig wirklich an Gewinnen zusammen kommt. Ja das stimmt...es muss kontinuierlich was bringen...gerne würde ich auch öfter handeln, aber mit dem iphone am Arbeitsplatz...naja schaut blöd aus ;-) Also wenn ich 2 Trades am Tag manuell hinbekomme ist das schon okay denke ich Ok. :)Und das Konto ist Demo oder Live? Derzeit teste ich mit einem Centliveaccount von Tradefort...wenn dann sollen die Quotes schon realistisch sein und ich will da nicht selber herum Mogeln :) Also ...es ist ernst :) Auch wenn es n centaccount ist ;-) Quote
Mythos Posted December 13, 2012 Report Posted December 13, 2012 Ja das stimmt...es muss kontinuierlich was bringen...gerne würde ich auch öfter handeln, aber mit dem iphone am Arbeitsplatz...naja schaut blöd aus ;-) Ein Grund mehr es in einen EA zu gießen und einfach mal auf die Langlebigkeit zu testen ;) Quote
siscop Posted December 13, 2012 Report Posted December 13, 2012 Ich finde es klasse von Dir dass du deine Idee mit uns teilst.Du hast dir ein gutes Paar ausgesucht EUR/USD (Trendpair) in den besten Zeiten 7-19. Sie weisen gute Ausbrüche und Trends aus. Du solltest wirklich einen EA draus schreiben und es mal über einen längern Zeitraum durchtesten lassen. Hidden Content You'll be able to see the hidden content once you reply to this topic. @Admin: Warum funktioniert "hide" nicht 3 Quote
Mythos Posted December 13, 2012 Report Posted December 13, 2012 @Admin: Warum funktioniert "hide" nicht Aufgrund der starken Änderungen in der neuen BoardSoftwareversion mussten leider alle zusätzlich programmierten Module offline genommen werden um zu sehen welche genau die Probleme verursachen und wie sie angepasst werden müssen. Die "hide" Funktion ist offensichtlich genauso davon betroffen wie die Thanks... :( Quote
_guest_ Posted December 14, 2012 Author Report Posted December 14, 2012 Ich finde es klasse von Dir dass du deine Idee mit uns teilst.Du hast dir ein gutes Paar ausgesucht EUR/USD (Trendpair) in den besten Zeiten 7-19. Sie weisen gute Ausbrüche und Trends aus.Modifikationen wären z.B.Faktoränderung ab einer bestimmten Anzahl Trades verlängern die Durststrecke.Abstandänderung zwischen 2 Linien – in deinem Fall nur eine Verkürzung um noch gut rauszukommen wäre möglich um aus einem schlechten Trade zu kommen. Ich wäre froh wenn dein System kein Verdopplungssystem wäre bzw. wenn du es geschafft hättest die Nachteile zu eliminieren. Prinzipiell hast Du recht...in der Tat bin ich am Überlegen ob nicht ggf die Range bei neuen Levels verringert werden soll...Beispielsweise haben ich eine Range von 20 um den Einstieg herum... dann sage ich...maximal 10 Level gehe und ab dann die Einstiege verringere..Dementsprechend natürlich auch die SL und TP für alle Trades.Mein Ziel wäre es dabei im übrigen zumindest den Spread und die Slippage heraus zu bekommen...Sinnig wäre auch eine Abschöpfung der Gewinne...also von jedem Gewinn x-% an die Seite legen.Die Nachteile werde ich hieraus leider niemals ablegen können, aber prinzipiell könnte ich hier auch ein Reversesystem draus stricken.Also ich lasse das System 1 laufen und dann lasse ich es Zusätzlich mit Gegenpositionen als eigenständiges System laufen...oder aber!!! ich lasse das System erneut als eigenständiges Laufen wenn das Level 1 einmal erreicht worden ist. Heute beim manuellen Trading habe ich wieder gemerkt...Der Spread ist böse! Wieder mit SL raus, aber der TP nicht...nun hänge ich wieder in den Seilen...Der EA wird also nur TP im Markt handeln und alle Orders schließen sobald der TP berührt wurde...Somit hat man auch wengstens brokerseitig schonmal nicht dei "Angst" einer Spreadausweitung...Wenn die SL nicht gerissen wären hätte der EA zumindest bis Level 5 gehandelt und vll wäre ich da fein raus gewesen...Naja wenn das wörtchen wenn ncht wäre ;-) Ich bleibe am laufenden und teile euch alles mit! 1 Quote
Mythos Posted December 14, 2012 Report Posted December 14, 2012 In deinem Fall würde ich dann sowohl auf TP als auch auf SL verzichten (ggf. einen Katastrophen-SL beim Broker aber nicht den echten). Da du zu jeder Zeit nur genau 1 SL und 1 TP Level hast, kannst du sehr einfach sagen: Wenn Bid TP-Long => schließe alle offenen Positionen.Damit kannst du sicherstellen das dir der Broker nicht reinpfuscht. Quote
_guest_ Posted December 14, 2012 Author Report Posted December 14, 2012 In deinem Fall würde ich dann sowohl auf TP als auch auf SL verzichten (ggf. einen Katastrophen-SL beim Broker aber nicht den echten). Da du zu jeder Zeit nur genau 1 SL und 1 TP Level hast, kannst du sehr einfach sagen: Wenn Bid < TP-Short oder Ask > TP-Long => schließe alle offenen Positionen.Damit kannst du sicherstellen das dir der Broker nicht reinpfuscht.Sicherlich eine gute Idee...man gibt einen TP vor der nur aus der Initialen Position ermittelt wird. Aber nicht als solcher ausgewiesen wird...also sichtbar. Bin im übrigen nun raus aus meiner noch offenen Long Position! Hatte mich bei einem Level mit der Lotsize vertan und hatte dementsprechend weniger Gewinn, aber immerhin kam wieder was positives bei raus. Bzgl deines Vorschlages: kann man vorgeben, dass der TP immer analog einer Order gerechnet wird? Um mehr zu differenzieren würde ich als weiteres Kriterium noch Magicnumber Long und Magicnumber Short einfügen.Und Hmm zu dem TP...ich nehme einfach die ersten Initialtrades und lasse den TP darauf projizieren...allerdings kann ich natürlich später nicht mer dafür sorgen, dass der TP geändert wird wenn zu viele Positionen im Markt gelevelt wurden und ich ggf die Lotsize weiter anpasse oder den TP verändern will... Quote
_guest_ Posted December 15, 2012 Author Report Posted December 15, 2012 (edited) Einen wunderschönen guten Abend zusammen, ich habe mir versucht die Mühe zu machen den Code zu stricken und an allen möglichen Stellen zu kommentieren.Was mir noch nicht gelungen ist...ich habe irgendwo eine Klammer zu viel oder eher zu wenig...beim kompilieren bekomme ich diesen Fehlerhinweis.Folgende Probleme habe ich:--> Ich habe es nicht heraus bekommen wie ich die Positionen beim nächsten Trade um den Faktor erhöhen kann.--> Desweiteren muss ich dem Programm sagen, dass er immer die Range einhalten soll. Wenn ich also meine Initialtrades gemacht habe und der Kurs sich um 10 Punkte verändert hat dann mache ich die Trendbewegung mit. Wenn der Kurs aber um einige Punkte korrigiert und dann wieder die Bedingung mit der Range erfüllt ist, dann eröffne ich ja eine ungewollte Position...wie kann ich das verhindern? Hier nun der Code: //+------------------------------------------------------------------+ //| GridRange.mq4 | //| Marc Stolic | //| no link available | //+------------------------------------------------------------------+ /* Handelslogik: --> 1.1 Wenn es keine offene Positionen gibt und die TradingTime, TradingDay in Ordnung ist, dann öffne eine Initialposition Long mit einer m_Start_Lotsize x und Short mit einer m_Start_Lotsize x. Beide Positionen haben einen fixen m_TP_Initial von je x Pip. --> 2.1 Bewegt sich der Kurs in irgendeine Richtung um m_Range_Initial (in diesem Beispiel steigt Währung 1 gegen Währung 2), eröffne eine neue Position in Trendrichtung: m_Start_Lotsize*m_Lotsize_Faktor_in_Trend mit TP analog des Wertes aus dem Initialtrade. --> 2.3 Sollte der Markt in Trendrichtung weiterlaufen und die TP erreichen werden alle Positionen geschlossen und der EA startet erneut. --> 3.1 Bewegt sich der Markt wieder zurück in Richtung des Kurses bei Eröffnung der Initialpositionen (sozusagen m_Range_Initial) wird erneut gehandelt. Da sich der Markt in eine andere Richtung bewegt hat (Währung 1 ist schwächer geworden zu Währung 2) nehmen wir die Position mit der höchsten m_Start_Lotsize*m_Lotsize_Faktor_in_Trend aus dem vorherigen Handel Punkt 2.2 und drehen nun die Trendrichtung von Long auf Short. --> 3.2 Eine neue Shortposition in Trendrichtung: m_Start_Lotsize(höchste Lotsize aus dem vorherigen Trade Punkt 2.2)*m_Lotsize_Faktor_in_Trend(höchste Lotsize aus dem aktuellen Trade Punkt 3.2) mit TP analog des Wertes aus dem Initialtrade. --> 4.1 Steigt der Kurs weiter in die Trendrichtung (in diesem Fall weiterhin Short) dann eröffnen wir (sozusagen m_Range_Initial) wieder eine Position in Trendrichtung: m_Start_Lotsize(höchste Lotsize aus dem vorherigen Trade Punkt 3.3)*m_Lotsize_Faktor_in_Trend mit TP analog des Wertes aus dem Initialtrade. --> 5.1 Sollte der Markt in Trendrichtung weiterlaufen und die TP erreichen werden alle Positionen geschlossen und der EA startet erneut. --> 6.1 Sollte der Markt wieder drehen wird genau so vorgegangen wie es bisher der Fall war: Es wird immer in Trendrichtung der höchsten Lotsize aus des noch offenen vorherigen Trades um den Lotsizefaktor erhöht. TP haben immer einen gleichen fixen Wert der durch den Initialtrade vorgegeben ist. /*Versionsänderungen nach Datum: /Version 26.11.2012 Einfügen eines Spreadcheck und Erweiterung um die einzelnen TP+SL-Levels für die Trendfolgen und Hedges /Version 28.11.2012 Einfügen einer Slippage- und PointFunktion. Einfügen von stdlib.mqh (weitere Standardfunktionen. Ergänzen der Funktion IsTradeContextBusy... /Version 02.12.2012 Fehlerbehebung bei SL und TP bzw. Einfügen von Ausgangslevelkorrektur wenn der Kurs wieder zum Urspünglichen Kurs, dem Initialeinstieg zurück kommt /Version 15.12.2012 Herausnahme der Hedgefunktion. Entfernen des SL gegen mögliche Brokermanipulationen. Änderung der Handelslogik / / / / */ #property copyright "Marc Stolic" #property link "no link available" #include <stdlib.mqh> //---Eingabeparameter extern string Einstellung1 = "----------Hauptsettings---------"; extern int m_Magicnumber_long = 912873465; //m_Magicnumber_long erhält den Wert x; einzigartige Nummer für den EA extern int m_Magicnumber_short = 198237645; //m_Magicnumber_short erhält den Wert x; einzigartige Nummer für den EA extern double m_Start_Lotsize = 0.01; //m_Start_Lotsize erhält den Wert 0.01; Initiallotsize für den Long- und Shorteinstieg extern double m_Lotsize_Faktor = 0.75; //m_Lotsize_Faktor_in_Trend erhält den Wert 1.5; Multiplikator um den die höchste Lotisze aus dem letzten Trade erhöht wird extern double m_Slippage = 1; //m_Slippage erhält den Wert 1; Varianz in Pips bei der Ausführung einer Order extern double m_Range_Initial = 10; //m_Range_Initial erhält den Wert 10; Die Range um die sich das Underlying nach dem Initialtrade bewegen muss bevor neue modifizierte Positionen eröffnet werden extern double m_TP_Initial = 20; //m_TP erhält den Wert 20; Initialtakeprofit, Alle anderen offenen Orders werden geschlossen sobald ein TP erreicht wird. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- extern string Einstellung2 = "----------Handelstage----------"; extern int Montag = 1; //entspricht DayofWeek extern int Dienstag = 2; //-1 eingeben, damit die Variable nicht erkannt wird und der Handelstag weg bleibt extern int Mittwoch = 3; //Doppelverwendungen sind Möglich extern int Donnerstag = 4; //Wenn Donnerstag = 4 und Freitag = 4 extern int Freitag = 5; //Dann haben diese Wochentag den selben Wert //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- extern string Einstellung3 = "----------Handelszeiten----------"; extern int StartTradingHour = 7; //Stunde die vorhanden sein muss um die Logik auszuführen extern int StartTradingMinute = 0; //Minute die in der Stunde erreicht sein muss extern int StopTradingHour = 20; //Stunde bei der der Handel unterbrochen wird extern int StopTradingMinute = 0; //Minute zu der der Handel unterbrochen wird //---Globale Parameter double UsePoint; //Genutzer Multiplikator pro Pip double UseSlippage; //Anpassung der Slippage an Pipgröße des Brokers int UseRange_Initial; //Anpassung der m_Range_Initial an Pipgröße des Brokers int UseTP_Initial; //Anpassung der m_TP an Pipgröße des Brokers double initialLongwert = 0.0; //initialLongwert bekommt den Wert 0.0 und wird vergeben wenn der initallong gehandelt wurde double initialShortwert = 0.0; //initialShortwert bekommt den Wert 0.0 und wird vergeben wenn der initialshort gehandelt wurde int initLongTicket = 0; //initLongTicket bekommt den Wert 0 int initShortTicket = 0; //initShortTicket bekommt den Wert 0 bool running = false; //running bekommt zuerst den Wert false. Hier werden Handelszeiten und Handelstage zuerst geprüft um den Wert auf true zu setzen bool initialpositioniert = false; //initialpositioniert bekommt den Wert false int trendLongTicket = 0; //trendLongTicket bekommt den Wert 0 int trendShortTicket = 0; //trendShortTicket bekommt den Wert 0 int TrendLong = 0; //TrendLong bekommt den Wert 0 int TrendShort = 0; //TrendShort bekommt den Wert 0 string cmd = ""; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { UsePoint = PipPoint(Symbol()); UseSlippage = GetSlippage(Symbol(), m_Slippage); UseRange_Initial = m_Range_Initial*UsePoint; //UseRange bekommt den Wert m_Range_Initial*UsePoint UseTP_Initial = m_TP_Initial*UsePoint; //UseTP bekommt den Wert m_TP*UsePoint } //--Handelstag und Handelszeit integrieren bool BotDarfHandeln() { bool returner = false; //returner hat den Wert false if (TradingDay() == true && TradingTime() == true) //Wenn TradingDay, TradingTime den boolschen Wert wahr haben... { returner = true; //dann bekommt retuner den Wert true und... } return (returner); //springt return zum Anfang des Blocks } //---Feststellen der Handelstage bool TradingDay() { bool returner = false; //returner hat den Wert false int DOW = DayOfWeek(); //DOW bekommt den Wert DayOfWeek int Handelstage[5]; Handelstage[0] = Montag; Handelstage[1] = Dienstag; Handelstage[2] = Mittwoch; Handelstage[3] = Donnerstag; Handelstage[4] = Freitag; for (int td_cnt1 = 0; td_cnt1<=5; td_cnt1++) //Die Variable td_cnt wird als int deklariert und bekommt den Wert 0. Ist td_cnt1 kleiner/gleich 5 dann wird td_cnt um 1 erhöht { if (Handelstage[td_cnt1] == DOW) returner = true; //Wenn Handelstage mit Wert von td_cnt gleich DOW, dann... } return(returner); //springt zu returner am Anfang des Blocks } //---Feststellen der Handelszeiten bool TradingTime() //abfragen der Wahrheitswerte für TradingTime { bool returner = false; //returner bekommt den Wert false if (returner == false && StartTradingHour == StopTradingHour && StartTradingMinute == StopTradingMinute) { returner = true; //bekommt returner den Wert true } if (returner == false && StartTradingHour <= StopTradingHour && Hour() >= StartTradingHour) { if (Hour() == StartTradingHour && Minute() >= StartTradingMinute) returner = true; if (returner == false && Hour() > StartTradingHour && Hour() < StopTradingHour) returner = true; if (returner == false && Hour() == StopTradingHour && Minute() < StopTradingMinute) returner = true; if (Hour() == StopTradingHour && Minute() >= StopTradingMinute) returner = false; } if (returner == false && StartTradingHour > StopTradingHour) { if (Hour() == StartTradingHour && Minute() >= StartTradingMinute) returner = true; if (Hour() > StartTradingHour || Hour() < StopTradingHour) returner = true; if (returner == false && Hour() == StopTradingHour && Minute() < StopTradingMinute) returner = true; if (returner == false && Hour() == StartTradingHour && Minute() >= StartTradingMinute) returner = true; } return(returner); //springt zu returner am Anfang des Blocks } //---Ermitteln des Long und Shortpreises double LongPrice(int Ticketnumber) { double returner = 0.0; OrderSelect(Ticketnumber, SELECT_BY_TICKET, MODE_TRADES); returner = OrderOpenPrice(); return(returner); } double ShortPrice(int Ticketnumber) { double returner = 0.0; OrderSelect(Ticketnumber, SELECT_BY_TICKET, MODE_TRADES); returner = OrderOpenPrice(); return(returner); } //---Aufzählen der Orders Long int CountLong(int cMAGIC) { int RETURNER = 0; for (int Counter = 0; Counter <= OrdersTotal(); Counter++) { OrderSelect(Counter, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber()==cMAGIC) { if (OrderType() == OP_BUY) { RETURNER++; } } } return(RETURNER); } //---Aufzählen der Orders Short int CountShort(int cMAGIC) { int RETURNER = 0; for (int Counter = 0; Counter <= OrdersTotal(); Counter++) { OrderSelect(Counter, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber()==cMAGIC) { if (OrderType() == OP_SELL) { RETURNER++; } } } return(RETURNER); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (running == false) { running = true; cmd = ""; if (BotDarfHandeln() == true) //Wenn der EA handeln darf, dann.. { cmd = cmd + "\nDer Bot handelt"; //befindet dieser sich in seiner Handelszeit if (initialpositioniert == true && CountLong(m_Magicnumber_long) == 0 && CountShort(m_Magicnumber_short) == 0) //Wenn initialpositioniert den Wert wahr hat und CountLong gleich 0 ist und CountShort gleich 0, dann... { initialpositioniert = false; //setze initialpositioniert auf false } if (initialpositioniert == false) //Wenn initialpositioniert gleich false ist, dann { Initialpositionierung(); //springe zu Initialpositionierung } if (initialpositioniert == true && CountLong(m_Magicnumber_long) >=1 && CountShort(m_Magicnumber_short) >= 1) //Wenn initialpositioniert den Wert wahr hat und CountLong größer/gleich 1 und CountShort größer/gleich 1, dann... { Trendfolge_Trades(); //Springe zu Trendfolge_Trades } } } Comment(cmd); running = false; //running bekommt den Wert false return(0); //Springe zum Anfang des EA's } //---alle anderen Positionen werden zum Marktpreis geschlossen wenn der TP erreicht wurde void LongClose() { if (CountLong(m_Magicnumber_long >= 1 && m_Magicnumber_short == 0 && initialpositioniert == true && OrderSymbol() == Symbol() && OrderMagicNumber() == m_Magicnumber_long && (OrderType()==OP_BUY) //Wenn m_Magicnumber_long größer/gleich 1 ist und m_Magicnumber_short gleich 0 ist und initialpositioniert den Wert true hat etc., dann... { OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), m_Slippage, Red); //...wird wenn es sich um OP_Buy Orders handelt alle offenen Long Positionen geschlossen } } void ShortClose() { if (CountLong(m_Magicnumber_long == 0 && m_Magicnumber_short >= 1 && initialpositioniert == true && OrderSymbol() == Symbol() && OrderMagicNumber() == m_Magicnumber_short && (OrderType()==OP_SELL) //Wenn m_Magicnumber_long gleich 0 ist und m_Magicnumber_short größer/gleich 1 und initialpositioniert den Wert wahr hat etc., dann... { OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), m_Slippage, Red); //...wird wenn es sich um OP_Sell Orders handelt alle offenen Short Positionen geschlossen } } //---Ermitteln ob Initialkaufs und Initialverkaufs bereits geschehen sind void Initialpositionierung() { if (CountLong(m_Magicnumber_long) == 0 && initialpositioniert == false) //Wenn CountLong den Wert 0 hat und initialpositioniert den Wert 0 hat... { initLongTicket = OpenLong(m_Start_Lotsize,UseSlippage,0,UseTP_Initial,"Initial Long", m_Magicnumber_long); //dann bekommt initLongTicket den Wert OpenLong } if (CountShort(m_Magicnumber_short) == 0 && initialpositioniert == false) //Wenn CountShort den Wert 0 hat und der initialpositioniert den Wert 0 hat... { initShortTicket = OpenShort(m_Start_Lotsize,UseSlippage,0,UseTP_Initial,"Initial Short", m_Magicnumber_short); //dann bekommt initShortTicket den Wert OpenShort } if (CountLong(m_Magicnumber_long) == 1 && CountShort(m_Magicnumber_short) == 1 && initialpositioniert == false) //wenn CountLong und CountShort den Wert 0 haben und initialpositioniert den Wert false hat... { initialpositioniert = true; //dann setze initialpositioniert auf true... initialLongwert = LongPrice(initLongTicket); //initialLongwert bekommt den Wert LongPrice initialShortwert = ShortPrice(initShortTicket); //initialShortwert bekommt den Wert ShortPrice } } //---Ermitteln und Eingehen der Trendfolgepositionen void Trendfolge_Trades() { if (initialLongwert < Ask-(UseRange_Initial) && initialpositioniert == true) //---LONG ermitteln { trendLongTicket = OpenLong((m_Start_Lotsize*m_Lotsize_Faktor),UseSlippage,0 ,0 ,"Trendfolge Long",0 ); } if (initialShortwert > Bid+(UseRange_Initial) && initialpositioniert == true) //---SHORT ermitteln { trendShortTicket = OpenShort((m_Start_Lotsize*m_Lotsize_Faktor),UseSlippage,0 ,0 ,"Trendfolge Short",0 ); } TrendLong = LongPrice(trendLongTicket); TrendShort = ShortPrice(trendShortTicket); } //---Eröffnen der Positionen. Das gilt für die Initialpositionen als auch die späteren Trendfolger int OpenLong(double l_lot, int l_slippage, double l_sl, double l_tp, string l_comment, int l_magic, color l_flag = Green) { while(IsTradeContextBusy()) Sleep(10); int Ticket = OrderSend(Symbol(),OP_BUY,l_lot,Ask,l_slippage,Bid-(l_sl*UsePoint),Bid+(l_tp*UsePoint),l_comment,l_magic,0,l_flag); return(Ticket); } int OpenShort(double s_lot, int s_slippage, double s_sl, double s_tp, string s_comment, int s_magic, color s_flag = Red) { while(IsTradeContextBusy()) Sleep(10); int Ticket = OrderSend(Symbol(),OP_SELL,s_lot,Bid,s_slippage,Ask+(s_sl*UsePoint),Ask-(s_tp*UsePoint),s_comment,s_magic,0,s_flag); return(Ticket); } //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //---Pip Point Funktion double PipPoint(string Currency) { int CalcDigits = MarketInfo(Currency,MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01; else if (CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001; return(CalcPoint); } //---Get Slippage Funktion double GetSlippage(string Currency, int SlippagePips) { int CalcDigits = MarketInfo(Currency,MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 3) double CalcSlippage = SlippagePips; else if (CalcDigits == 4 || CalcDigits == 5) CalcSlippage = SlippagePips*10; return(CalcSlippage); } Edited December 16, 2012 by Mythos hoffe diesmal passts Quote
_guest_ Posted December 15, 2012 Author Report Posted December 15, 2012 Ich bedanke mich schon mal für eure Hilfe bzgl meiner o.g. Probleme... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.