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)

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:05 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