Jump to content
Tom Next - Daytrading Community

Grid Range EA


_guest_

Recommended Posts

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?

Link to comment
Share on other sites

Mal eine Frage....

Nach dem Initialtrade ging ja der Kurs runter wo dann Lvl1 kam.

 

Level1

Der 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?


Level2

Kurs steigt

Du hast beide Posis vergrößert jedoch die Shortposi Prozentual stärker... Sollte die Longposi nicht stärker erhöht werden?

 

Level3

Kurs steigt.

Longposi wurde stärker vergrößert als die Shortposi.

 

Wäre nett wenn du mir Lvl1 und Lvl2 Posimanagement erklären könntest.

Link to comment
Share on other sites

Mal eine Frage....

Nach dem Initialtrade ging ja der Kurs runter wo dann Lvl1 kam.

 

Level1

Der 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?

 

Level2

Kurs steigt

Du hast beide Posis vergrößert jedoch die Shortposi Prozentual stärker... Sollte die Longposi nicht stärker erhöht werden?

 

Level3

Kurs 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,01

Um 9:58 wurde der BuyStop getriggert...Lotsize long 0,03 und short 0,02

Um 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

 

 

 

Link to comment
Share on other sites

Noch eine Frage zum Verständnis.

Sind die Lotgrößen Absolutgrößen oder deltas also hinzukommende Posis.

 

Initial

Long 0,01

Short 0,01

 

LVL1

Long 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.

Link to comment
Share on other sites

Noch eine Frage zum Verständnis.</p>

Sind die Lotgrößen Absolutgrößen oder deltas also hinzukommende Posis.</p>

 

Initial

Long 0,01

Short 0,01

 

LVL1

Long 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 Lots

Short: 0,01 + 0,02 + 0,02 + 0,03 = 0,08 Lots

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

So...fertig gehandelt:

Folgende Trades habe ich getätigt...

 

Equity 331,07€, Hebel 1:500, Faktor von 0,75

Initialtrade

Long 1,30863 TP 1,31063 SL 1,30663 Lotsize 0,01 Pips -20

Short 1,30848 TP 1,30648 SL 1,31048 Lotsize 0,01 Pips +20

Level 1

Long 1,30963 TP 1,31063 SL 1,30663 Lotsize 0,01 Pips -30

Level 2

Short 1,30848 TP 1,30648 SL 1,31048 Lotsize 0,01 Pips +20

Level 3

Short 1,30748 TP 1,30648 SL 1,31048 Lotsize 0,02 Pips +20

Gewinn von 10 Pips

Lotsize Total: 0,01

Margin Total: 2€

Gewinn EUR: 0,77 EUR

RoI EUR: 38,5%

RoC EUR: 0,23%

Alles in allem eigentlich okay denke ich

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Irgendeinen Filter wirst du sicherlich einfügen müssen, ansonsten könnte ich mir gut vorstelle, dass das System zu starr ist

und 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 :laugh:

Link to comment
Share on other sites

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 ;-)

Link to comment
Share on other sites

Irgendeinen Filter wirst du sicherlich einfügen müssen, ansonsten könnte ich mir gut vorstelle, dass das System zu starr ist

und 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 laugh.png

 

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 :)

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

Initialtrade

Long 1,30515 TP 1,30715 SL 1,30305 Lotsize 0,01 Pips +20

Short 1,30487 TP 1,30300 SL 1,30700 Lotsize 0,01 Pips -21,3 (Slippage!)

Level 1

Long 1,30615 TP 1,30715 SL 1,30305 Lotsize 0,01 Pips -30

Gewinn von 8,7 Pips

Lotsize Total: 0,01

Margin Total: 2€

Gewinn EUR: 0,67 EUR

RoI 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 ;-)

 

 

 

Link to comment
Share on other sites

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

  • Upvote 3
Link to comment
Share on other sites

@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... :(

Link to comment
Share on other sites

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!

  • Upvote 1
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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:


bullet_go.png
//+------------------------------------------------------------------+
//|                                                    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 by Mythos
hoffe diesmal passts
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...