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

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   StopLoss auf Break Even nachziehen (http://www.expert-advisor.com/forum/showthread.php?t=1809)

Biatsch 05.01.12 01:24

StopLoss auf Break Even nachziehen
 
Kann mir jemand in Code-Form aufschreiben, wie ich den StopLoss einer bestehenden Order auf Break Even ziehe, sobald ich 20 Pips im Plus bin und die Order anschließend mit einem TrailingStop versehe ?

Seroleashed 05.01.12 07:36

Joa das wäre cool!!

Aber nur So nebenbei: Breakeven bedeutet, dass man gerade an die Stelle kommt, an der man keinen Verlust mehr macht (aber auch noch keinen Gewinn). Man geht also +-0 aus dem Trade (bzw setzt den Stoploss so, dass man +-0 ausgehen würde). Der Breakeven wäre meiner Meinung nach also nicht der Einstiegskurs sondern wenn überhaupt der Einstiegskurs Plus Spread... als sicherheitsfanatiker oder "ganz genauer" könnte man auch noch Plus ein paar Pips als Ausgleich für die Evtl anfallende Kommission dazu rechnen;-p
Nur fürs allgemeine Verständnis, damit keine Missverstände auftreten!!:p

naranjoe 05.01.12 08:52

Hallo,

das ist kein Problem.

Code:


void UpdateBE()
{
 if(UpdateToBE <= 0) return;

 for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
          {
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
                 
          if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
          {
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
      }
    }
}

Definiere UpdateToBE als externe Variable und setzte sie z.B. auf 20 Pips (bei 0 wird kein Update to BE ausgeführt).
Das void UpdateBE() rufst du aus der void Start() auf (also bei jedem Tick).
Fertig!
Spread wird berücksichtigt.
Läuft die Order nach dem Break Even Update ins SL wird sie exakt mit 0 geschlossen.

Gruß
naranjoe

Biatsch 05.01.12 16:16

Danke dir für den Code.
Und wie füge ich nun einen TrailingStop zu eben dieser Order hinzu ?

Seroleashed 05.01.12 16:57

Wenn ich den Code richtig verstehe, IST das der Training Stopp.
Bei jedem Tick, also jeder Kursänderung wird überprüft, ob der Kurs gestiegen ist. Wenn er gestiegen sein sollte wird der aktuelle StopLoss gelöscht und ein neuer mit dem vorgegebenen Abstand wird erstellt.
Nichts anderes ist ein TrailingStop vom Broker;-p

naranjoe 05.01.12 17:16

Diese Funktion beinhaltet keinen Trailing Stop.
Es funktioniert so:
Wenn deine Order einen bestimmten Wert (UpdateToBE) im Plus ist, dann wird der Stop Loss auf den Eröffnungspreis der Order gesetzt. Läuft jetzt der Kurs zurück und der Stop Loss wird erreicht, (welcher ja jetzt mit dem Eröffnungspreis übereinstimmt) wird die Order genau bei 0 geschlossen.

Code für den Trailling Stop folgt.

Gruß
naranjoe

naranjoe 05.01.12 18:01

Trailing Stop
 
Eröffne deine Order mit TrailingStop Pips als Stop Loss (also z.B. 20).
Das SL wird dann immer mit dem Abstand von 20 Pips der Order nachgezogen oder halt eben ausgelöst (wenn der Kurs dreht). Dafür solltest du auch ein Take Profit wählen das etwas größer ist z.B. 50.
Aufruf von void UpdateTS erfolgt wie beim void UpdateBE.

Code:

void UpdateTS()
{
  for(int i = OrdersTotal() - 1; i >= 0; i--)
        {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
              if(OrderType() == OP_BUY && NormalizeDouble(Bid - OrderStopLoss(), Digits) > NormalizeDouble(TrailingStop * Point, Digits))
                {
                OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * Point, OrderTakeProfit(), 0);
                }
              if(OrderType() == OP_SELL && NormalizeDouble(OrderStopLoss() - Ask, Digits) > NormalizeDouble(TrailingStop * Point, Digits))
                  {
                  OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStop * Point, OrderTakeProfit(), 0);
                  }
              }
        }
}

Das hier stellt nur ein Grundgerüst dar, um die Funktionsweise zu erläutern. Du solltest den Code aber noch erweitern. z.B.müsste der EA auch feststellen ob die ausgewählte Order auch die Richtige ist, Stichwort Symbol() oder MagicNumber.
Aber das überlasse ich mal dir ;)

Gruß
naranjoe

Biatsch 20.01.12 00:10

Und wie weise ich diese 2 Funktionen einer bestimmten Order zu ?
Sorry, aber ich bin halt noch Anfänger.

Ich habe gerade erst das visuelle Backtesting ausprobiert und festgestellt, dass die BreakEven-Funktion nichts tut.

Zur Info:
Ich habe die genannte Funktion innerhalb der Start-Funktion eingefügt aber ohne die letzte und die ersten 3 Zeilen, also folgendermaßen:

HTML-Code:

for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
          {
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
                 
          if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
          {
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
      }
    }

Wo liegt mein Denkfehler ?

naranjoe 20.01.12 07:29

Zitat:

Und wie weise ich diese 2 Funktionen einer bestimmten Order zu ?
Gar nicht, die Funktionen finden die Order selbst wenn die Bedingungen zutreffen.
Häng doch mal deinen kompletten Code hier dran, dann lässt sich der Fehler
ganz leicht herausfinden und erklären.

Gruß
naranjoe

Biatsch 20.01.12 08:54

HTML-Code:

extern double dLots=0.1;
extern int iStopLoss=6500;
extern int iTakeProfit=500;
extern int iSlippage=30;
extern int iMaxTrades=1;
extern int iMagicNumber=11111;
extern int UpdateToBE=30;


int iTradeSignal=0;
int iOpenBuySignal=10;
int iCloseBuySignal=-10;
int iOpenSellSignal=20;
int iCloseSellSignal=-20;
int iNoSignal=-1;

int iTotalTrades;
int iOrderOpenStatus;
int iErrorNumber;

string strErrorMessage;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

  double MAshort1 = iMA(NULL,15,20,0,MODE_EMA, PRICE_CLOSE,1);
  double MAshort0 = iMA(NULL,15,20,0,MODE_EMA, PRICE_CLOSE,0);
  double MAmiddle = iMA(NULL,60,20,0,MODE_EMA, PRICE_CLOSE,0);
  double MAlong  = iMA(NULL,240,20,0,MODE_EMA, PRICE_CLOSE,0);
  double Close1  = iClose(NULL,0,1);
  double Close2  = iClose(NULL,0,2);
  double Close3  = iClose(NULL,0,3);
  double SAR0    = iSAR(NULL,15,0.02,0.2,0);    // Unbenutzt
  double SAR1    = iSAR(NULL,15,0.02,0.2,1);
  double SAR2    = iSAR(NULL,15,0.02,0.2,2);
  double SAR3    = iSAR(NULL,15,0.02,0.2,3);
 
//-------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------BUY_LOGIK-------------------------------------------------------------------------------
if((Ask<MAlong) && (Ask<MAmiddle) && (Ask>MAshort0) && (Close1<MAshort1)){
  if((Close3>
SAR3) && (Close2>SAR2) && (Close1>SAR1))
      iTradeSignal = iOpenBuySignal;
  }
 
//-------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------SELL_LOGIK------------------------------------------------------------------------------
if((Bid>MAlong) && (Bid>MAmiddle) && (Bid<MAshort0) && (Close1>MAshort1)){
  if((Close3<SAR3) && (Close2<SAR2) && (Close1<SAR1))
      iTradeSignal = iOpenSellSignal;
}

//--------------------------------------------------------------------------------------------------------------------------------
//----------------------------------MONEY_MANAGEMENT------------------------------------------------------------------------------
for(int i = OrdersTotal(); i >
= 1; i--)
{
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
              {
                OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
              }
                 
      if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
              {
                OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
              }
    }
}
//--------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------BUY_ORDER--------------------------------------------------------------------------
iTotalTrades=OrdersTotal();

if ((iTradeSignal == iOpenBuySignal) && (iTotalTrades < iMaxTrades))

{
double dBuyStopLoss=Ask-(iStopLoss*Point);
double dBuyTakeProfit=Ask+(iTakeProfit*Point);


iOrderOpenStatus=OrderSend (Symbol(), OP_BUY,dLots, Ask, iSlippage, dBuyStopLoss, dBuyTakeProfit, "EA",iMagicNumber,0,Green);
  if (iOrderOpenStatus<0)
      {
      iErrorNumber=GetLastError();
      Print ("Order fehlgeschlagen!: ", iErrorNumber);
      return;
      }
}
//--------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------SELL_ORDER------------------------------------------------------------------------

iTotalTrades=OrdersTotal();

if ((iTradeSignal == iOpenSellSignal) && (iTotalTrades < iMaxTrades))

  {
  double dSellStopLoss=Bid+(iStopLoss*Point);
  double dSellTakeProfit=Bid-(iTakeProfit*Point);
 
 
iOrderOpenStatus=OrderSend (Symbol(), OP_SELL,dLots, Bid, iSlippage, dSellStopLoss, dSellTakeProfit, "EA",iMagicNumber,0,Red);
  if (iOrderOpenStatus<0)
      {
      iErrorNumber=GetLastError();
      Print ("Order fehlgeschlagen!: ", iErrorNumber);
      return;
      }
}


  return(0);
  }
//+------------------------------------------------------------------+


naranjoe 20.01.12 14:19

Da hat sich wohl der Fehlerteufel eingeschlichen.
Du hast die FOR-Schleife nicht original übernommen.

Sie muss so anfangen:
for(int i = OrdersTotal()-1; i >= 0; i--)

Gruß
naranjoe

Biatsch 20.01.12 20:26

Jo danke, daran lags.
Ich hab die Indexverschiebung angewand bevor ich den Code richtig verstanden gehabt hatte^^

Rico1040 16.09.14 22:52

Hallo,

Ich bin neu in EA Programmieren und Lese hier alles was ich finde. Eins versteh ich nicht was das Void immer zusagen hat?.

Ich wollte den Breakeven bei mir einsetzen aber irgendwie funktioniert es nicht !

Vieleicht könnte ein Profi mal drüber schauen.

HTML-Code:

extern double UpdateToBE = 10 ;


bool LongTrade,ShortTrade;
//Globale Variablen
string Signal;
datetime PeriodenStartzeit;

//+------------------------------------------------------------------+
//| Expert initialization function                                  |
//+------------------------------------------------------------------+
void UpdateBE()
  {
//---Überprüfen der Starzeit
      PeriodenStartzeit = Time[0]; 
//---Breakeven Starten
///-----+++ Break Even setzen
{
 if(UpdateToBE <= 0)
 return;
for(int i = OrdersTotal()-1; i >
= 0; i--)
 
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
          {
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
                 
          if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
          {
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
      }
    }
}

  return;
  }


traderdoc 16.09.14 23:33

Code:

extern double UpdateToBE = 10 ;

bool    LongTrade, ShortTrade;
string  Signal;
datetime PeriodenStartzeit;

//+------------------------------------------------------------------+
//| Expert initialization function                                  |
//+------------------------------------------------------------------+
void UpdateBE()
{
//---Überprüfen der Starzeit
      PeriodenStartzeit = Time[0]; 
//---Breakeven Starten
///-----+++ Break Even setzen

  if(UpdateToBE <= 0) return;
 
  for(int i = OrdersTotal()-1; i >= 0; i--)
  {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
        if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
          {
              OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }               
          if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
          {
              OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
      }
  }
  return;
}

Als Erstes wird bei Dir nicht erkannt, ob es ein 4- oder 5-DigitBroker ist.

Als Zweites solltest Du Dir mal angewöhnen eine klare Struktur zu schreiben und immer entsprechend einrücken.
void bedeutet nur "leer" bzgl. der Rückgabe von Funktionsergebnissen, im Gegensatz zu int Funktion(), bool Funktion(), double Funktion oder string Funktion(). In diesen Fällen wird die Rückgabe einer entsprechend deklarierten Variable erwartet.

traderdoc

Rico1040 17.09.14 08:32

Danke für deine Antwort woran erkennt man wie viel Digit meiner hat? am EUR/USD zb. ? (Nachkomma stellen ) ?

traderdoc 17.09.14 09:45

Genau, 4-DigitBroker geben in den Kurse 4 bzw. 2 Kommastellen aus und 5-DigitBroker demnach 5 bzw. 3.
Beim 5-DigitBroker würden Deine angedachten 10 Pips in der Variablen UpDateToBE nur 1Pip entsprechen.

traderdoc

Rico1040 17.09.14 09:59

Ok dann ist es ein 4 Digit Brokker, weil dax zb. 9800,5 und Eur/Dollar 1,3290

Ich hab das wie folgt reingebaut ist das ok ?
HTML-Code:

extern double UpdateToBE = 10 ;


bool LongTrade,ShortTrade;
//Globale Variablen
string Signal;
datetime PeriodenStartzeit;

//+------------------------------------------------------------------+
//| Expert initialization function                                  |
//+------------------------------------------------------------------+
int init()
  {
//---Überprüfen der Starzeit
      PeriodenStartzeit = Time[0]; 

///-----+++ Break Even setzen
{
{
  if(Digits == 4)
  {
      UpdateToBE = UpdateToBE * 10;
  }
if(UpdateToBE <= 0) return(0);
 
  for(int i = OrdersTotal()-1; i >
= 0; i--)
  {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
        if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
          {
              OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }               
          if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
          {
              OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
      }
  }
 
  return(0);

Hab ich was vergessen ? noch macht er nix Danke Traderdoc für deine Hilfe.

traderdoc 17.09.14 10:32

Wenn es ein 4Digit-Broker ist, dann darf nicht! mit 10 multipliziert werden, sondern nur bei 5-DigitBrokern!
Die Abfrage müßte richtig lauten:

int Multiplier = 1;
if (Digits == 3 || Digits == 5) Multiplier = 10;

Desweiteren steht plötzlich die eigene Funktion in der Funktion init().
Diese wird aber nur zur Initialisierung des Programms einmalig durchlaufen.

Deine Funktion gehört in die Funktion start().

traderdoc

Rico1040 17.09.14 13:37

Gut hab das so Übernommen und ein bisschen eingerückt.
Hab das in die start Funktion geschoben nur das bei mir steht void OnTick() ist das ok ??

sieht jetzt so aus besser?

HTML-Code:

int Multiplier = 1;
{
  if (Digits == 3 || Digits == 5) Multiplier = 10;
       
  if(Multiplier <= 0) return;
 
  for(int i = OrdersTotal()-1; i >
= 0; i--)
  {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= Multiplier * Point)
                          {      OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);      }
                                                                                                                                                               
                      if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= Multiplier * Point)
                          {      OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);            }                                                                                                      }
                                                                                                                                    }
                                                                                                                                   
  }


traderdoc 17.09.14 13:59

if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= Multiplier * Point)
{ OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0); }

if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= Multiplier * Point)

Da soll doch bestimmt das hin:

....>= UpdateToBE * Multiplier * Point)

traderdoc

Rico1040 17.09.14 14:15

Ja so steht es hab alten code gepostet sry.

Ist das soweit ok ??

im Test passiert noch nix !

HTML-Code:

int Multiplier = 1;
{
  if (Digits == 3 || Digits == 5) Multiplier = 10;
                 
                                                       
  if(UpdateToBE <= 0) return;
 
  for(int i = OrdersTotal()-1; i >
= 0; i--)
  {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >=UpdateToBE * Multiplier * Point)
                          {      OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);      }
                                                                                                                                                               
                      if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Multiplier * Point)
                          {      OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);            }                                                                                                      }
                                                                                                                                    }
                                                                                                                                   
  }

  return;
}


traderdoc 17.09.14 14:42

Ok, dann solltest Du doch mal den gesamten Code als mq4-Datei anhängen.

traderdoc

Rico1040 17.09.14 15:21

Ok hier das ganze.

Signale funktionieren Prima, macht auch nur ein Trade bei Signal auf und erst bei neuem Signal wieder.

Hier der Ganze Code ;
File-Upload.net - test.mq4

traderdoc 17.09.14 18:02

Sorry, unter File-Upload.net werde ich kein Download initieren.
Die Datei geht auch ganz normal hier anzuhängen.

Rico1040 17.09.14 21:34

Liste der Anhänge anzeigen (Anzahl: 1)
Ah habs erst nicht gefunden ;)

traderdoc 17.09.14 22:44

Liste der Anhänge anzeigen (Anzahl: 1)
Na ja, da war einiges zu tun.
Das fing schon damit an, dass er EA keine Order geöffnet hatte usw.
Und mal ordentlich durchgefegt habe ich!

Nun löft er!

traderdoc

Rico1040 18.09.14 00:08

Mega Traderdoc danke.

Ich probiers morgen gleich mal und schau mir an was du alles geändert hast ;) gn8

Rico1040 18.09.14 12:31

So heute Probiert Funktioniert Prima. Danke nochmals Traderdoc.

Eine Frage hätte ich noch.

Wenn ich Testläufe mache und er sagt mir das ich Z.B. 55% Erfolgtrades habe aber mache Trotzdem Minus Selbst mit CRV von 2. Sollte ich da drauf achten ob Gewinn raus kommt oder eher auf die erfolgsquote der Trades? Nur Informationshalber. :D

Crashbulle 18.09.14 15:20

Hallo Rico1040,

mit fast dem gleichen Prg habe ich damals auch angefangen.
Nur hast du noch sehr wenige, für eine Strategietestingperiode zuwenig externe Verstell- oder Suchmöglichkeiten.
Hier wären Einstellbare RSI, gesamt oder getrennt nach SELL oder Buy, vorstellbar.

Deine Grundeinstellungen sind sehr groß und dürften ab H4 aufwärts laufen. Vermögend mußt du auch sein, bei einer so hohen LOT-Zahl, außer es sollte nur ein "Just for Fun"-EA sein.

Ich quäle den Strategietester mit 50.- - 1.000.- Startvolumen. Dieses dürfte für die meisten Anfänger ein wirklich realistisches Startvolumen sein, das nach einer Euphorie dann erschrechend schnell Platt ist.

Die Devise sollte sein, Spiele nur mit der DEMO-größe, welches man auch später unter LIVE einsetzen kann.

Rico1040 18.09.14 15:36

Danke für deine Antwort als erstes ist es ein Test EA. Zwecks Programmieren Lernen usw. damit später nix schief geht bzw. zum nachvollziehen was sinnvoll ist was nicht wie BE gehen oder so. Wenn ich es Real machen sollte wird das MM. direkt eingehalten (1%-3% vom GesamtKapital.)
Und wenn bezieht er sich erstmal nur auf den Dax und da sind 3 lots (3cfd nicht viel)

grüße

PitPoke 21.09.14 22:03

Zitat:

Zitat von Rico:
Wenn ich Testläufe mache und er sagt mir das ich Z.B. 55% Erfolgtrades habe aber mache Trotzdem Minus Selbst mit CRV von 2.

Wie kann man bei einer Trefferquote von 55% und einem positiven CRV Verluste machen?

Zu deiner anderen Frage:
Wichtig ist, das am Ende die Gewinne stehen. Dafür machst du das Ganze doch. :)
Selbst wenn du nen Roboter hast, der dir 90% Trefferquote bringt, aber du ein negatives CRV hast, dann ist über kurz oder lang dein Konto leer.
Ein solides MM und positives CRV sind oft sogar wichtiger als eine Trefferquote von weit über 50%.

Und zum Dax: Je nach Größe deines Kontos können 3 Lot schon sehr viel sein.
Als Beispiel:
1000,00 € Konto
MM = 3 % = 30,00€
3 Lot kosten 3,00€
CRV= 2/1 = 60,00€ / 30,00€ bzw. 20 Pips / 10 Pips

Bedeutet: Wenn du nicht gerade Ausbrüche tradest, kommst du mit einem SL von 10 im Dax nicht sehr weit. Die derzeitige Vola liegt da z.Zt. bei 120 Pips.
Auch wenn du dich im Stundenchart im Trend/in einem Ausbruch befindest, sind kurze Rücksetzer von 30 Pips keine Seltenheit.... im Gegenteil.
Ein Einsatz von nur 1 Lot würde in diesem Beispiel sogar deine Trefferquote erhöhen.

lg

Money_Maker 22.09.14 06:48

Wie kann das CRV negativ sein?
CRV=potentieller Gewinn/potentieller Verlust (da es in diesem Zusammenhang keine negativen Pips gibt, kann das Ergebnis auch nicht negativ sein)

Und das Ergebnis kann auch bei einer TQ von 55% und einem CRV von 2, negativ sein.

Wichtig ist das realisierte CRV und nicht jenes welches du festlegst.

Tritt z.B. Slippage auf und vergisst du den Spread mit einzuberechnen dann kann aus einem 30 Pip TP und einem 15 TP SL (=> CRV = 2) ganz schnell ein TP mit 27 Pip und ein SL mit 18 Pip werden (=> CRV 1.5).

Grüße
MM

Rico1040 22.09.14 10:45

Super danke für eure Aufklärung.

Ich hatte das gefragt weil er das ja im Strategietester so anzeigt. Das es rein logisch nicht so ist ist mir bewusst. Deswegen wollte ich von euch wissen ob man drauf wert legen kann zb. gebe ich ein stopp von 20pkt TP von 40 pkt spuckt er mir aus 60% gewinntrades aber gesamtNetto von ca -1135 €

grüße Rico

PitPoke 22.09.14 11:05

@Money Maker

Ein negatives CRV ist ein CRV <1. Also, wenn du z.B. 30 Pips riskierst um 15 Pips zu bekommen.
Das wäre dann ein CRV von 1/2 bzw. 0.5 bzw. <1.

Den Spruch "Hin und her machts Konto leer!" kannst du meistens vergessen, da der Spread beim Eröffenen der Position (zumindest bei mir) schon eingerechnet wird.

Wir sprechen doch hier von EAs. Und sobald der EA eine Position eröffent hat, wird ein SL von 15 und ein TP von 30 gesetzt. Der Trade endet dann entweder beim SL oder TP. Letztendlich lag dein CRV aber bei 2. Daran ändert auch ein Slipage nichts (es sei denn, der EA platziert zuerst den SL/TP und anschliessend die Eröffnung). Wenn das so ist, dann hast du natürlich recht. Das passiert z.B. auch, wenn du z.B. einen Sell-Stop in den Markt legst bzw. über die Ordermaske tradest.

Das CRV kannst du höchstens beeinflussen, wenn du manuell in den Trade eingreifst, oder dein EA mit einem Trailing Stop arbeitet.

Rico hat ja die Frage gestellt, worauf er sein Augenmerk richten soll... entweder auf den Gewinn oder auf die Trefferquote.
Meiner Meinung nach zählt der Betrag, der unterm Strich rauskommt. Der sollte immer positiv sein.
Wie man aber mit einem CRV von 2 und einer 55% TQ Minus macht, müsstest du mir erklären. Da steh ich jetzt etwas auf dem Schlauch.
Das könnte passieren, wenn man den Spread und die sonstigen Kosten nicht einkalkuliert hat, bzw. die Kosten den Gewinn übersteigen. Dann sollte man mMn aber nochmal über sein MM nachdenken. :-)

lg

Zitat:

Zitat von Rico1040 (Beitrag 27512)
Super danke für eure Aufklärung.

Ich hatte das gefragt weil er das ja im Strategietester so anzeigt. Das es rein logisch nicht so ist ist mir bewusst. Deswegen wollte ich von euch wissen ob man drauf wert legen kann zb. gebe ich ein stopp von 20pkt TP von 40 pkt spuckt er mir aus 60% gewinntrades aber gesamtNetto von ca -1135 €

grüße Rico

Kannst du mal ein Screenshot von diesem Strategiefenster machen? Werden bei dir -ausser dem Spread- noch andere Gebühren fällig?

PitPoke 22.09.14 12:12

@ Rico

Sry, kann meinen vorherigen Beitrag nicht mehr editieren.

Arbeitet dein EA mit einem Trailing-Stop (TS) oder Break Even?
Dann ist dein CRV von 2 (TP 40 und SL 20) nämlich hinfällig.

Wenn dein Trade oft per TS endet (z.B. wenn du mit 5 Pips im Plus bist) dann hast du den Trade zwar gewonnen, aber die Verlusttrades fressen deinen Gewinn auf.

Beispiel:

100 Trades, 60 % TQ, TS beendet den Trade bei 5 Pips im Plus.

60 x 5 Euro = 300,00 €
40 x 20,00 € = 800,00 €

Das macht trotz der TQ von 60% ein Minus von 500,00 €.

Dein angestrebtes und festgelegtes CRV von 2/1 dreht dann logischerweise ins negative.

Das bedeutet, dass deine Trefferquote, bei einem tatsächlichem CRV von 2, stark sinken würde.
lg

Rico1040 22.09.14 15:11

Liste der Anhänge anzeigen (Anzahl: 1)
Schaut mal vielleicht erkennt ihr ja eine Fehler.

Eingestellt wie gesagt 20 / 40 (Breakeven bei 10 ) als zusatz !

Berechnet auf jeden Tick (in der Tabelle das erste).

Grüße Rico

PitPoke 22.09.14 16:59

Hallo Rico,

wie ich oben schon geschrieben habe, liegt es mit Sicherheit dann am Break Even. Schau Mal im Strategiefenster unter Egebnisse und achte Mal auf kleinere Gewinnmitnahmen.

PitPoke 22.09.14 18:05

Nachtrag:
Du erkennst das schon an den durchschnittlichen Gewinnen "Durchschnitt Profit Trade". Der liegt bei 30,45€.
Dann schau dir mal den "Durchschnitt Loss Trade" an (53,61€) und du weist was Sache ist. :-)
Schau dir einfach bei den Egebnissen an, wie oft bei deinen 483 Trades der TP (von 40 bzw. die 120,00 €) erreicht wurde.

Durch die 10 Pips Break Even (der ja auch als Trailing Stop dient!) hast du nur noch einen Spielraum von eben diesen 10 Pips, sobald der Kurs 10 Pips in deine Richtung gelaufen ist. Das ist -wie gesagt- nicht viel in einem hochvolatilen Markt.
Setze den mal auf Mindestens 20. Oder schraube deine Erwartungen an den Profit zurück.
Wenn du mit Trailingstop arbeitest, dann wäre ein TP20 SL15 und TS 10 evtl auch ok. Musst du mal durchanalysieren.

Crashbulle 22.09.14 18:19

@ Rico

Einmal vorweg, bei einem 4-digit Broker mußt du im Strategietester "2", beim 5-digit Broker "20" für 2 Pips Spread eingeben.

Spielen kannst du mit dem SL und/oder TP, um dort eine Tendenz zu erkennen.
Ein TS würde ich am Anfang der Suche nicht aktivieren. Aber beim anklicken der 30 und 70% Beschränkung würden auch schon unsinnige Trades herausfallen.
Profite unter 1 kann man vergessen.
Wie gesagt. wie oben oder im Code kräftig nachbessern.

Weiter wie groß sind die geschlossen, aber nicht abgeschlossenen Trades beim Stoppen ?

Money_Maker 22.09.14 18:35

Zitat:

Zitat von PitPoke (Beitrag 27513)
@Money Maker

Ein negatives CRV ist ein CRV <1. Also, wenn du z.B. 30 Pips riskierst um 15 Pips zu bekommen.
Das wäre dann ein CRV von 1/2 bzw. 0.5 bzw. <1.


Wir sprechen doch hier von EAs. Und sobald der EA eine Position eröffent hat, wird ein SL von 15 und ein TP von 30 gesetzt. Der Trade endet dann entweder beim SL oder TP. Letztendlich lag dein CRV aber bei 2. Daran ändert auch ein Slipage nichts (es sei denn, der EA platziert zuerst den SL/TP und anschliessend die Eröffnung). Wenn das so ist, dann hast du natürlich recht. Das passiert z.B. auch, wenn du z.B. einen Sell-Stop in den Markt legst bzw. über die Ordermaske tradest.

Rein mathematisch ist es nicht negativ sondern kleiner 1.


Ja da hast du recht, es kommt natürlich auf die Strategie an.
Ich habe nur gelernt, dass das reale CRV meist (immer) anders ist als das geplante.

Grüße
MM


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:36 Uhr.

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