Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

EA Daily-Range

Geschrieben

Hallo zusammen,

 

wie in dem Thread zuvor soll hier die Idee der Daily-Range aus einem Traders-Magazin von Philipp Kahler als Indikator und EA umgesetz werden. Die Range bestimmt die Schwankungsbreite des Vortages. Diese wird dann vom aktuellen Hoch des laufenden Tages abgezogen und zum Tief hinzuaddiert. So werden Tage mit größerer Volatilität erkannt, die man Intraday in die Ausbruchsrichtung traden kann. Pro Tag wird nur ein Trade eingegangen, wenn die UpperRange oder LowerRange durchbrochen wird. Ist der Schlusskurs von gestern größer als die Range und als die Eröffnung, wird heute eingestiegen, wenn es einen Tick über oder unter dem Band gibt.

 

Der Ausstieg findet entweder am Schlusskurs, hier 21:45 statt, oder bei Erreichung der Eröffnung, da dies einen strategischen Wechsel von Short nach Long oder umgekehrt nach sich zieht. Vorerst reicht dies, um die Ergebnisse zu testen.

 

In TradeSignal hatten sich bessere Werte ergeben, wenn die Uhrzeit auf 10-12 und 14-21 Uhr begrenzt wird, Fehltrades werden so vermieden. Ich rede hier als Underlying vom FDAX, bei anderen Werte kann sich das ändern. Da ich den FDAX als Symbol bei TradeSignal sehr gut zum Vergleich nehmen kann und hier die Open + Close-Werte transparenter sind, würde ich gerne erst die Strategie hierauf zum Laufen bringen, danach kann man sich um EURUSD oder andere Währungspaare kümmern.

 

Leider wird, wenn ich den nun funktionierenden (so glaube ich) Indikator DailyRange nehme, immer nur ein Trade generiert. Laufzeit ist ab dem 01.01.2009, getradet wird erst ab dem 10.01.09, da über Weihnachten nichts los ist. Wo ist hier der Fehler? Ich verwende doch nur den Indikator. Leider werden in der Print-Ausgabe auch ander Range-Werte ausgespuckt, als der Indikator für die Tage zugrunde legt ... merkwürdig.

 

Sollten die Fehler behoben sein, können wir uns gerne um Themen wie Money-Management, Effizientester Ausstieg und bestes Underlying kümmern.

 

Hier ist der Code:

 

DT_IND_DailyRange.mq4

DT_EA_DailyRange.mq4

 

Seht es mir bitte nach, wenn einige Debug-Ausgaben vorhanden sind, ich bin ja noch die Sprache am lernen. Wobei eher, wie bei vielen Tradingprogrammen, der Ablauf bzw. die Abarbeitung der Bars das größere Problem darstellt.

 

Viel Spaß damit und einen guten Wochenstart

DarthTrader

  • Antworten 54
  • Aufrufe 6,3Tsd
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Veröffentlichte Bilder

Featured Replies

Geschrieben
Ok, werde es testen, das könnte der Fehler gewesen sein. Muss ich denn dann nicht wieder

den Trailingstop * 2 angeben. Also wenn ich 10 Punkte haben will muss ich 20 beim Dax angeben,

da hier die Ticksize 0.5 ist?

 

Genau, 10 Punkte= 20 Ticks. Hier gilt es die Anwenderspec zu kennen. Wenn du als Anwender sagst "ich denk gern in Punkten" dann machs in Punkten, wird nur bei Forex schwierig, weil der Parameter dann ein Double sein müsste etc.

 

Sicherheitshalber:

Die aktuellste TradeBox heißt "lTradeBox.mq4" (Namensconvention) und die Funktionen beginnen alle mit "tb" nicht wie bisher mit "TB" ...

 

 

tbCloseOrder (OrderTicket(), OrderLots(), 3, 5);
exitErfolgreich = true;

 

Hier würde ich den return value von tbCloseOrder nutzen. (es kann sein das die TradeBox aufgibt, und die ORder nicht geschlossen wurde):

if(tbCloseOrder (OrderTicket(), OrderLots(), 3, 5) < 0)
 exitErfolgreich = true;

 

Habs jetzt mal am EURUSD getestet, Trailingstop funktioniert bei mir so:

if ((TrailingStop>0) && ( OrderStopLoss() == 0 || (OrderStopLoss()-Ask)>TrailingStop*ticksize))
{	   
 tbModifyOrder (OrderTicket(), OrderOpenPrice(),  OrderOpenPrice() - TrailingStop*ticksize, OrderTakeProfit(), 0);
}

 

Ob ein Trailingstop bei diesem System Sinn macht, ist natürlich eine andere Frage ;)

aber beim MM/RM können wir uns noch austoben.

Geschrieben
  • Autor

Danke für den Code, werde ihn später einbauen.

Trailingstops machen, wenn überhaupt nur bei Forex Sinn, so zumindest meine

aktuellen Tests.

 

Aber generell funktioniert das System auf dem Forex-Markt noch gar nicht.

Entweder man schränkt die Zeiten zur Berechnung der Daily-Range ein, oder

das RM/MM ist für den Markt noch ausbaufähig.

 

Für den DAX und ich meine bei GOLD siehen die Ergebnisse sehr gut aus. Allerdings

kann ich ja immer nur max. 3 Monate zurück testen, das die Daten der Kontrakte ansonsten

nicht verwendbar sind. Kann man irgendwo die alten Kontrakte ausgraben und testen

oder sich einen Continuous-Kontrakt zusammenbasteln.

 

Ok, weitere Tests bzgl. dem Forex-Markt folgen.

 

Mich interessiert noch folgendes:

Was müsste für einen produktiven Einsatz noch an dem EA gemacht werden ?

Geschrieben
Noch eine Info. Die Datei DT_Include.mqh beherbergt einfach nur die Standard-Includes zur TradeBox.

Leider darf ich sie nicht hochladen. Das müsste noch angepasst werden.

 

@Admi

:wink: ... kann DT diese Dateien jetzt "hochladen....."?

 

danke.

Geschrieben
Trailingstops machen, wenn überhaupt nur bei Forex Sinn, so zumindest meine

aktuellen Tests.

 

Aber generell funktioniert das System auf dem Forex-Markt noch gar nicht.

Entweder man schränkt die Zeiten zur Berechnung der Daily-Range ein, oder

das RM/MM ist für den Markt noch ausbaufähig.

 

Ich habs vorhin kurz auf EURUSD getestet, ohne Trailingstop wars leicht positiv mit ein PF von 1.15 oder so. Man müsste sich aber die Zeiten anschauen.

 

Für den DAX und ich meine bei GOLD siehen die Ergebnisse sehr gut aus. Allerdings

kann ich ja immer nur max. 3 Monate zurück testen, das die Daten der Kontrakte ansonsten

nicht verwendbar sind. Kann man irgendwo die alten Kontrakte ausgraben und testen

oder sich einen Continuous-Kontrakt zusammenbasteln.

 

Du kannst dir aus der TradeSignal die alten Kontrakte rausziehen, daraus einen Continuous bauen und diesen bei MT einspielen (getarnt als GER30 ;), du kannst natürlich auch der Anpassungsmethode der TradeSignal vertrauen und dir direkt einen Contiuous raussaugen... meine Erfahrungen damit sind aber eher ungut.

 

Du musst nur eines aufpassen: GER30 = DAX != FDAX ! bringt also nur was, wenn du testen willst ob du die gleichen Ergebnisse wie auf der TradeSignal hast, bzw. einfach allgemein den EA testen willst.

 

Man könnte auch ein Symbol, das man derzeit nicht verwendet "hijacken" und einfach die andere History einspielen.

 

Mich interessiert noch folgendes:

Was müsste für einen produktiven Einsatz noch an dem EA gemacht werden ?

Jetzt wirds spannend.

 

Bei Verwendung von Stops, Trailingstops etc, würd ich die an die Vola (ATR) koppeln.

MM/RM: Da bei Eröffnung des Trades, schon klar ist, wo der "Stop" liegt (ca), sollte die Lotsize so berechnet werden, das jeder Trade "gleich viel" Risiko hat. Also entweder jeder Trade x% vom Kapital oder fixen Geldbetrag.

Dann würd ich den EA noch "ausputzen" ;) Nichts gegen deine Fortschritte, aber zB das mit der Margin etc. müsste noch raus/angepasst werden. Und dann ist die Frage für wen, und welche Anwendung.

Gibt es in der finalen Version globale/statische Variablen die für den Ablauf wichtig sind, sollten diese in ein File gesichert werden, sodass bei stromausfall oder neustarten nach dem neustart des MT der EA exakt an der gleichen Stelle weitermacht, wie zuvor etc.

Hardwaretechnische Details sind dann natürlich auch noch zu überlegen.

Geschrieben
  • Autor

Hardwaretechnische Details sind dann natürlich auch noch zu überlegen.

 

Würdest Du denn eine VR-Server empfehlen? Ich meine, auf der anderen Seite,

handelst Du eigentlich EAs automatisiert oder macht das generell jemand hier im Forum?

Geschrieben
Hardwaretechnische Details sind dann natürlich auch noch zu überlegen.

Ich meine, auf der anderen Seite,

handelst Du eigentlich EAs automatisiert oder macht das generell jemand hier im Forum?

 

Ich selber handle überhaupt nix, zumindest im Moment.

 

Ich denke zu Beginn muss man sich noch keinen Server mieten. Ein "kostengünstiger" Test mit dem eigenen PC und einem Notstrom-system zeigt schnell ob der EA in Real funktioniert. Entscheided man sich dann, das dauerhaft laufen zu lassen, macht es natürlich sinn über einen Server nachzudenken.

Geschrieben
  • Autor

Muss es bei OrderModify nicht immer heißen Bid-TrailingStop*ticksize ... wenn ich einen TrailingStop setzen will bzw. Ask+... ? Ich setze doch denn Stopp vom aktuellen Preis entfernt?

 

Hier würde ich den return value von tbCloseOrder nutzen. (es kann sein das die TradeBox aufgibt, und die ORder nicht geschlossen wurde):

 

Warum gibst Du nicht True/False zurück, wäre doch einfacher zu handhaben? Den Wert bekommst du eh von

CloseOrder wieder?

 

Ach ja, ATR ist eingebaut. Natürlich sind es weniger Trades, aber dadurch fallen einige auch raus. Hab noch keine wirkliche Meinung, ob es etwas bringt, da der Testzeitraum zu kurz ist.

 

Der Code des DT_Includes ist nichts anderes als das hier:

 

// Includes, werden als Code eingebunden
#include <stderror.mqh>
#include <stdlib.mqh>

// Imports, jedes Modul, verwendet eigen Kopie davon.
// Neue Versionen können separat kompiliert werden.
#import "stdlib.ex4"
  string ErrorDescription (int error_code);
#import

#import "TradeBox.ex4"
  int TBSendOrder (string symbol, int cmd, double volume, double price, int slippage, double stoploss, 
				double takeprofit, string comment, int magic, datetime expiration, int max_retries=-1);
  int TBCloseOrder (int ticket, double lots, int slippage, int max_retries=-1);
  int TBModifyOrder (int ticket, double price, double stoploss, double takeprofit, datetime expiration);   
  void TBSetInformationLevel (int val);
  double TBGetVersionNumber ();
#import

 

TrailingStop ist eingebaut, aber auskommentiert, m.M. nach bringt der wenig, da Gewinne

immer abgeschnitten werden, was meint Ihr?

 

DT_EA_DailyRange.mq4

Bearbeitet von DarthTrader

Geschrieben
Muss es bei OrderModify nicht immer heißen Bid-TrailingStop*ticksize ... wenn ich einen TrailingStop setzen will bzw. Ask+... ? Ich setze doch denn Stopp vom aktuellen Preis entfernt?

:wink: natürlich.

 

Warum gibst Du nicht True/False zurück, wäre doch einfacher zu handhaben? Den Wert bekommst du eh von

CloseOrder wieder?

 

Ehrlich gesagt: weil ich die Close Function von der send Function übernommen hab und nur angepasst habe, und dort macht es Sinn. Es ist ein bissl Konsistenzmäßig, vor allem weil ich bei einem Fehler direkt den (-1)*FehlerCode retouniere.

Aber gut das dus gesagt hast, das war im wesentlichen eh ein Bug.

 

 

Ach ja, ATR ist eingebaut. Natürlich sind es weniger Trades, aber dadurch fallen einige auch raus. Hab noch keine wirkliche Meinung, ob es etwas bringt, da der Testzeitraum zu kurz ist.

 

Du meinst den Daily-ATR oder?

 

Zum Trailing: du musst ihn ja nit auskommentieren, setz einfach den Parameter auf 0, dann ist das testen leichter.

Geschrieben
Der Code des DT_Includes ist nichts anderes als das hier:

 

// Includes, werden als Code eingebunden
#import "TradeBox.ex4"
  int TBSendOrder (string symbol, int cmd, double volume, double price, int slippage, double stoploss, 
				double takeprofit, string comment, int magic, datetime expiration, int max_retries=-1);
  int TBCloseOrder (int ticket, double lots, int slippage, int max_retries=-1);
  int TBModifyOrder (int ticket, double price, double stoploss, double takeprofit, datetime expiration);   
  void TBSetInformationLevel (int val);
  double TBGetVersionNumber ();
#import

 

Wie ich schon sagte: das ist die alte TradeBox, bitte "lTradeBox" verwenden, die neuen Versionen werden auch alle so heißen

Geschrieben
  • Autor

Zum Trailing: du musst ihn ja nit auskommentieren, setz einfach den Parameter auf 0, dann ist das testen leichter.

 

:wink: Klar, dafür ist ja die Abfrage > 0 da ....

 

Habe noch einen Bug mit der ATR behoben ... ab dem Wert 2 wurden nur BUY Aufträge verarbeitet.

 

DT_EA_DailyRange.mq4

Bearbeitet von DarthTrader

Geschrieben
  • Autor
:wink:

c.jpg

 

Ersetze den Code #inlude einfach durch den oben geposteten. Hier issser nochmal.

Es ist einfach lesbarer, wenn man den Header in eine extra Datei auslagert.

 

// Includes, werden als Code eingebunden
#include <stderror.mqh>
#include <stdlib.mqh>

// Imports, jedes Modul, verwendet eigen Kopie davon.
// Neue Versionen können separat kompiliert werden.
#import "stdlib.ex4"
  string ErrorDescription (int error_code);
#import

#import "ITradeBox.ex4"
  int tbSendOrder (string symbol, int cmd, double volume, double price, int slippage, double stoploss, 
				double takeprofit, string comment, int magic, datetime expiration, int max_retries=-1);
  int tbCloseOrder (int ticket, double lots, int slippage, int max_retries=-1);
  int tbModifyOrder (int ticket, double price, double stoploss, double takeprofit, datetime expiration);   
  void tbSetInformationLevel (int val);
  double tbGetVersionNumber ();
#import

 

Viel Spaß beim Testen

DT

  • 2 Wochen später...
Geschrieben
  • Autor

Ich habe jetzt mal eine Lotsize-Berechnung eingebaut. Man, man, man, .... hat mich einige

(gefühlte) Lebensjahre gekostet. Hier der Code:

 

// -----
// Diese Funkion berechnet die Lotgröße nach dem Fixed Fractional Ansatz.
// Hierbei werden auch der Wechselkurs und CrossCurrencies mit betrachtet.
// Der StopLoss wird immer in Pips umgerechnet => immer kleinster veränderbarer Wert.
// DAX	=> 40 Punkte	 = 40 / TickSize	  = 40 / 0.5		= 80 Pips
// GOLD   => 20 Punkte	 = 20 / TickSize	  = 20 / 0.01	   = 2000 Pips
// EURUSD => 0.0020 Punkte = 0.0020 / TickSize  = 0.0020 / 0.0001 = 20 (normale) Pips
// -----
double calculateLotSize (double risk, double stopLoss)
{   
  double lotSize		  = 0;
  double moneyToInvest	= 0;
  double aktuellerPreis   = 0;
  string baseCurrency	 = StringSubstr (Symbol(), 0, 3);
  string quoteCurrency	= StringSubstr (Symbol(), 3, 3);
  string accountCurrency  = AccountCurrency();
  double accountBalance   = AccountBalance();
  double minLotSize	   = MarketInfo (Symbol(), MODE_MINLOT);		 
  double maxLotSize	   = MarketInfo (Symbol(), MODE_MAXLOT); 
  double aktuellerSpread  = MarketInfo (Symbol(), MODE_SPREAD);	 
  
  // Wert eines Pips in zweiter Währung (bei USD immer 10) oder
  // bei CFDs Wert der minimalsten BEwegung, DAX = 12.50 bei 0.5 Ticksize
  double tickValue		= MarketInfo (Symbol(), MODE_TICKVALUE);		
  
  // Kontraktgröße in erster Währung
  double contractSize	 = MarketInfo (Symbol(), MODE_LOTSIZE);   
  
  // Letzte Nachkommastelle des Underlyings (0.01 oder 0.0001)
  double tickSize		 = MarketInfo (Symbol(), MODE_TICKSIZE);  
  
  // Wert eines Pips in AccountCurrency, also EUR o. USD bei einem Lot
  double singlePipValue;  


  // Zu riskierenden Betrag berechnen
  moneyToInvest  = (accountBalance / 100) * risk;
  
  // -----
  // Wenn USD die erste quotierte Währung ist (USDJPY, USDCAD, USDCHF, ...), 
  // teilt man ein Pip durch den Ask-Kurs und multipliziert das Ergebnis mit der Lotgröße.
  // Beispiel: Wenn USDCHF bei 1,4323 steht, ist ein Pip (0,0001 / 1,4323) * $100.000 = $6,98 wert.
  // Wenn USD die zweite Währung ist (EURUSD,...) ist ein Pip immer $10 wert.
  // Beispiel: Wenn EURUSD bei 1,4523 steht, ist ein Pip (0,0001 / 1,4523) = 6,89 Eur = $10 (6,89 Eur * 1,4523) wert.
  // Analog, wenn EUR die erste Währung ist...
  // -----   
  
  // FOREX-Markt
  if (isFOREXSymbol(Symbol()))
  {
  Print ("Lot-Berechnung für FOREX-Markt ...");
  if (quoteCurrency == accountCurrency) {
	 singlePipValue = contractSize * tickSize;
  }   
  else if (baseCurrency == accountCurrency) {
	 singlePipValue = contractSize * tickSize / MarketInfo(Symbol(), MODE_ASK);
  }
  else if (baseCurrency != accountCurrency && quoteCurrency != accountCurrency) {
	 singlePipValue = contractSize * tickSize * MarketInfo(baseCurrency + accountCurrency, MODE_ASK) / MarketInfo(Symbol(), MODE_ASK);
  }
  }
  // CFDs
  else if (isCFDSymbol(Symbol()))   
  {
  Print ("Lot-Berechnung für CFD-Kontrakt ...");
  // 12.5€ beim DAX, 1 * Wechselkurs von €/$ bei GOLD
  singlePipValue = tickValue;
  }
  

  // Größe der Lotsize für FOREX-Markt + CFD-Markt identisch, wenn ich immer Stop in Pips umrechne (/tickSize)
  lotSize = NormalizeDouble (moneyToInvest / ((stopLoss/tickSize) * singlePipValue), 2);   

  
  // Ausgabe, um Werte zu übeprüfen
  Print ("Symbol=", Symbol(), "  Kurs=", Ask, "  Spread=", aktuellerSpread,
	  "  Kontraktgr.=", contractSize, 
	  "  SinglePipValue=", singlePipValue, " ", AccountCurrency(), 
	  "  Risiko=", risk, "%  StopLoss=", stopLoss/tickSize, " Pips");
		
  
  // Durch den Broker festgelegte Grenzen einhalten
  if (lotSize < minLotSize) {
  return (minLotSize);
  }
  else if (lotSize > maxLotSize) {
  return (maxLotSize);
  }
  else {
  return (lotSize);
  }
}

 

Ich habe teilweise bei anderen etwas abgeschaut, überwiegend selbst überlegt.

Viele Tests zeigen eigentlich, dass es auch jedem Markt funktioniert.

Meine Frage ist nun, seht Ihr das genau so?

 

Wo sind noch Fehler oder Verbesserungen im Code?

 

Danke schonmal

DT

Geschrieben
Ich habe jetzt mal eine Lotsize-Berechnung eingebaut.
:wub:

 

Für die Mitleser: Du gehst jetzt also her und setzt dir ein gewisses InitialRisk für jeden Trade fest. Also wieviel der Trade maximal verlieren darf, wenn es total daneben geht. (Da der EA ohne Stoploss arbeitet, sondern nur bei "Close unter einem Level" ausstoppt, wird das nie exakt hinkommen, aber besser als nix).

Dann berechnest du die POsitionsgröße so, das ein erreichen des StopLoss genau im Verlust von InitialRisk resultiert.

Dadurch kriegen die Trades untereinander, auch wenn sie unterschiedliche Stopentfernungen haben, immer die gleiche Chance. (Korrigier mich wenn ich mich irre)

 

zum Code:

Der aufwändige Teil ist das berechnen der SinglePipValue richtig? (wobei du hier beim überlegen wie das geht, sicher einiges gelernt hast...)

 

Wie wärs mit MarketInfo(Symbol(),MODE_TICKVALUE) ?

MODE_TICKVALUE ... Tick value in the deposit currency.

Das wär doch was du brauchst oder?

 

Wie hast du vor dein Risiko zu steuern? const % von AccountBalance() ?

Geschrieben
Für die Mitleser:

 

Da bin ich :wub:. Nur weiter so! Diese Dokumentation helfen sich besser mit der Materie auseinanderzusetzen.

Geschrieben
  • Autor
Für die Mitleser: Du gehst jetzt also her und setzt dir ein gewisses InitialRisk für jeden Trade fest. Also wieviel der Trade maximal verlieren darf, wenn es total daneben geht. (Da der EA ohne Stoploss arbeitet, sondern nur bei "Close unter einem Level" ausstoppt, wird das nie exakt hinkommen, aber besser als nix).

Dann berechnest du die POsitionsgröße so, das ein erreichen des StopLoss genau im Verlust von InitialRisk resultiert.

Dadurch kriegen die Trades untereinander, auch wenn sie unterschiedliche Stopentfernungen haben, immer die gleiche Chance. (Korrigier mich wenn ich mich irre)

 

So soll es sein. Ich habe ja auf jeden Fall einen StopLoss durch den Einstiegskurs. Klar, den gebe ich nichr direkt mit, dass sollte man vielleicht ändern ...

sonst habe ich ja keine Absicherung im Markt ... :wub:

 

zum Code:

Der aufwändige Teil ist das berechnen der SinglePipValue richtig? (wobei du hier beim überlegen wie das geht, sicher einiges gelernt hast...)

 

Auf jeden Fall, aber man muss sich jedes mal erneut hineindenken ...

 

 

Wie wärs mit MarketInfo(Symbol(),MODE_TICKVALUE) ?

Das wär doch was du brauchst oder?

 

Genau und es wird auch schon verwendet (siehe Code). Die Frage ist nur, ob noch Fehler im Code

drin sind. Die Berechnung sollte an sich so funktionieren.

 

Wie hast du vor dein Risiko zu steuern? const % von AccountBalance() ?

 

Fixed Fractional mit X% vom AccountBalance(), so soll es erstmal laufen.

Für andere Vorschläge bin ich gerne offen.

Geschrieben
So soll es sein. Ich habe ja auf jeden Fall einen StopLoss durch den Einstiegskurs. Klar, den gebe ich nichr direkt mit, dass sollte man vielleicht ändern ...

sonst habe ich ja keine Absicherung im Markt ... :wub:

Naja, wenn man den Tagesopen als Stoploss dazuschreibt, ändert sich ja die Strategie oder? Wär natürlich interessant obs besser oder schlechter wird.

 

Zum Tickvalue: soweit ich das verstanden haben (und kurz in MT getestet) berechnet MarketInfo(Symbol(),MODE_TICKVALUE) genau das was deine singlepipvalue macht, du würdest dir hier also Code sparen.

 

Sonst hab ich keine Fehler im Code gefunden :beers:

 

 

 

Fixed Fractional mit X% vom AccountBalance(), so soll es erstmal laufen.

Für andere Vorschläge bin ich gerne offen.

Im Moment keine anderen Vorschläge ;)

Was ich mir nur bei % vom Balance immer denke:

Wir wissen das ein System nicht 100% profitable ist, es gibt immer wieder Gewinnphasen, die aber direkt von Verlustphasen gefolgt werden. Beim % vom Balance haben wir den Effekt, das nach einer Gewinnphase, die nachfolgenden Trades höheres Risiko fahren dürfen (was die folgenden Verlusten auch gerne verpulvern) und nach einigen Verlusten die nachfolgenden weniger Risiko kriegen (wodurch die folgenden Gewinner nicht soviel Chance haben...). Das geht ja eigentlich gegen die Grundidee oder?

Im schlimmsten Fall hast dann sowas: Großer Gewinner -> Risiko wird drastisch erhöht -> gefolgt von 2 Verlierern -> Risiko wird deutlich gesenkt -> der nachfolgende Gewinner hat auch mit CRV 2 nicht die Chance die gerade eingefahrenen Verluste auszugleichen.

 

Ich hab mal überlegt das ganze mit Schwellen zu regeln. Also das Risiko ist immer zwischen 1 und 5 % (Hausnummern) von der Balance, aber eigentlich fix. Steigt die Balance, so sinkt der prozentuale Prozentsatz vom Risiko. Fällt dieser unter 1%, so wird er auf 3% erhöht wo er dann absolut wieder fix bleibt. Sinkt das Kapital und das Risiko steigt auf über 5%, wird es auf 3% gesenkt. dadurch gibt es kein rumzappeln. Es werden also hintereinanderlaufende Trades in der Regel mit dem gleichen Risiko gesetzt.

Oder dazu noch ein schleifendes System, also wenn das Risiko unter 1% fällt wird es schrittweise erhöht.

 

Aber genau genommen hab ich keine Ahnung ;) Es muss vermutlich zum jeweiligen System passen.

Geschrieben
  • Autor
Naja, wenn man den Tagesopen als Stoploss dazuschreibt, ändert sich ja die Strategie oder? Wär natürlich interessant obs besser oder schlechter wird.

 

Nun ja, der Open-Kurs ist ja nur ein Worst-Case-Stopp, der wird im Normalfall gar nicht erreicht,

da ich nach X-Bars-Under-Range raus gehe. Es ist nur wichtig, dass ein Stopp im Markt ist, wenn mal

der EA oder mein PC abschmirt.

 

Hab es jetzt so gelöst, dass ich berechne ob der Open oder Range +- 1% näher an der Eröffnung der Position

dran ist, damit das Risiko etwas besser angepasst ist. So gehe ich max. 1% oder eben den Open des Tages als

Risiko ein. Beide Wert werden kaum erreicht, da andere Stopps ziehen

 

Zum Tickvalue: soweit ich das verstanden haben (und kurz in MT getestet) berechnet MarketInfo(Symbol(),MODE_TICKVALUE) genau das was deine singlepipvalue macht, du würdest dir hier also Code sparen.

 

Ich muss aber ja auch beim FOREX-Markt die Umrechnung in die Account-Balance mit einkalkulieren.

So einfach läuft es dann leider doch nicht :-)

 

Sonst hab ich keine Fehler im Code gefunden :wub:

 

Super, dann teste ich ihn mal auf einem Realkonto mit FDAX und GOLD.

 

Was ich mir nur bei % vom Balance immer denke:

Wir wissen das ein System nicht 100% profitable ist, es gibt immer wieder Gewinnphasen, die aber direkt von Verlustphasen gefolgt werden. Beim % vom Balance haben wir den Effekt, das nach einer Gewinnphase, die nachfolgenden Trades höheres Risiko fahren dürfen (was die folgenden Verlusten auch gerne verpulvern) und nach einigen Verlusten die nachfolgenden weniger Risiko kriegen (wodurch die folgenden Gewinner nicht soviel Chance haben...). Das geht ja eigentlich gegen die Grundidee oder?

Im schlimmsten Fall hast dann sowas: Großer Gewinner -> Risiko wird drastisch erhöht -> gefolgt von 2 Verlierern -> Risiko wird deutlich gesenkt -> der nachfolgende Gewinner hat auch mit CRV 2 nicht die Chance die gerade eingefahrenen Verluste auszugleichen.

 

Ich hab mal überlegt das ganze mit Schwellen zu regeln. Also das Risiko ist immer zwischen 1 und 5 % (Hausnummern) von der Balance, aber eigentlich fix. Steigt die Balance, so sinkt der prozentuale Prozentsatz vom Risiko. Fällt dieser unter 1%, so wird er auf 3% erhöht wo er dann absolut wieder fix bleibt. Sinkt das Kapital und das Risiko steigt auf über 5%, wird es auf 3% gesenkt. dadurch gibt es kein rumzappeln. Es werden also hintereinanderlaufende Trades in der Regel mit dem gleichen Risiko gesetzt.

Oder dazu noch ein schleifendes System, also wenn das Risiko unter 1% fällt wird es schrittweise erhöht.

 

Stimmt, aber vorerst reicht es auch so. Da ich immer von stetigen Gewinnen ausgehe,

wirkt sich das von dir gesagte eher positiv aus ... :-)

 

Was meinen die anderen zum Thema Money-Management?

 

Danke schonmal

DarthTrader

Geschrieben
  • Autor

So, habe den EA jetzt mal drei Tage laufen lassen. Nur gestern gab es bei GOLD und im FDAX ein Signal,

beide wurden mit 1% von der LowerRange mit einem InitialStopp versehen. Beide wurde nach ca.1 Stunde

mit dem X-Bar-Stopp wieder vom Markt genommen. Alles Ok soweit. Beide Trades waren gegen 15 bzw. 16 Uhr wieder beendet.

 

Allerdings habe ich ein ungutes Gefühl bei den Range-Werten. Ich lege den EA auf den Chart, dann den Indikator, dieser wird vom EA verwendet. Beginnt ein neuer Tag wird erstens der Rangewert nicht immer an die UpperRange geschrieben und die Range sieht manchmal auch etwas merkwürdig aus, als ob er den neuen Tag im laufenden Betrieb gar nicht erkennt.

 

Heute Morgen hatte ich den Fall beim EURUSD, der nebenher läuft, dass ich den Indikator gelöscht habe und wieder auf den Chart gezogen habe. Die Range sah danach wieder sehr gut aus, aber anders als im laufenden Betrieb ...

 

... wenn ich mich also nicht auf die Range verlassen kann ... habe ich verloren ... aber wo ist der Fehler im Code ...

 

... zurzeit werden die Ranges vom Indikator gezeichnet, wenn ich die im EA selbst zeichne, dann spare ich mir das

drauf ziehen des Indis auf den Chart. Kann das etwas mit dem Fehler zu tun haben ... ?

Bearbeitet von DarthTrader

Geschrieben
Ich muss aber ja auch beim FOREX-Markt die Umrechnung in die Account-Balance mit einkalkulieren.

So einfach läuft es dann leider doch nicht :-)

 

Wie gesagt, lt meinen Tests tut Tickvalue das alles bereits. Probiers einfach aus.

 

... zurzeit werden die Ranges vom Indikator gezeichnet, wenn ich die im EA selbst zeichne, dann spare ich mir das

drauf ziehen des Indis auf den Chart. Kann das etwas mit dem Fehler zu tun haben ... ?

 

Der Indi den du händisch auf den Chart ziehst, hat nichts mit dem Indi den der EA verwendet zu tun. (außer sie sind zufällig die gleichen). Dem EA ist vollkommen egal was du sonst noch auf dem Chart aufführst.

Geschrieben
  • Autor
Der Indi den du händisch auf den Chart ziehst, hat nichts mit dem Indi den der EA verwendet zu tun. (außer sie sind zufällig die gleichen). Dem EA ist vollkommen egal was du sonst noch auf dem Chart aufführst.

 

Aber heißt das, dass ich immer aus dem EA die Ranges zeichnen sollte ...

Geschrieben
  • Autor

Ok, dann werde ich es mal so implementieren, hoffentlich tauchen die Fehler dann nicht mehr auf.

 

Bleibt nur noch die Frage warum P. Kahler gestern eine satten Gewinn, mit stetig-steigender

Equity von 08/2007 bis heute im EURUSD, mit genau dieser Strategie, aufweisen kann ...

... und ich nur bei nem PF von knapp über 1 liege ... bei Mythos war es ebenso .... :wub:

Geschrieben
Allerdings habe ich ein ungutes Gefühl bei den Range-Werten. Ich lege den EA auf den Chart, dann den Indikator, dieser wird vom EA verwendet. Beginnt ein neuer Tag wird erstens der Rangewert nicht immer an die UpperRange geschrieben und die Range sieht manchmal auch etwas merkwürdig aus, als ob er den neuen Tag im laufenden Betrieb gar nicht erkennt.

 

Heute Morgen hatte ich den Fall beim EURUSD, der nebenher läuft, dass ich den Indikator gelöscht habe und wieder auf den Chart gezogen habe. Die Range sah danach wieder sehr gut aus, aber anders als im laufenden Betrieb ...

 

Hast du am Code vom Indi noch was geändert? Poste mal die aktuellste Version (im anderen Thread), vielleicht haben wir ja was übersehen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.