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)
-   -   Fehler in While-Schleife? (http://www.expert-advisor.com/forum/showthread.php?t=5825)

icepick1661 13.08.17 03:14

Fehler in While-Schleife?
 
Hallo,

zum Test habe ich folgende While-Schleife separat vom Hauptcode getestet (hier mit einfacheren, lesbareren Variablen...).

Bei einem Startkurs (Ask) von DAX 12.041,8 wird der StopBuy bei 12.072,5 gesetzt. Er sollte aber 1,5% über 11.980,5, also bei 12.160,2 gesetzt werden.

Das Ziel: Hätte ich bei einer Basis von 11.980,5 einen Ask von 12.300, soll 11.980,5 + 1,5% = 12160,2, dann (weil <Ask) bei 12160,2 + 1,5% = 12.342,6 der StopBuy gesetzt werden (weil ja nun >Ask...

Noch ein Hinweis: Prüfuwert "Ask + 30" tut nichts zur Sache, den hab ich nur gesetzt, um eine Spanne zu bekommen...

Danke für eure Hilfe!

Hier der Code:

Code:

  bool Ereignis=true;
  int ticketL;
 
  double Price=11980.5;

      if (Ereignis == true)
        {
        if (OrderType() == OP_BUYSTOP)
            {
            bool LongResult=true;
            }
        }
 
      if (LongResult)

        double StopBuyOpenValue = Price;
        double StopBuy2Low;
        double LongValuePerc;
       
            while (Ask +30 > StopBuyOpenValue)
            if (LongResult)
              {
              LongValuePerc = NormalizeDouble(StopBuyOpenValue * NextBuyPercent / 100,Digits); //NextBuyPercent = 1.5
             
              StopBuy2Low = StopBuyOpenValue + LongValuePerc;
              StopBuyOpenValue++;
              }

            bool LStopBuyResult_Restore=false;
            LStopBuyResult_Restore = ticketL= OrderSend(Symbol(),OP_BUYSTOP,LotsTraded,StopBuyOpenValue,Slippage,0,0,"BUY(#" + MagicNumberLong + ")",MagicNumberLong,0,Green);
            LongResult=false;


next user 13.08.17 08:33

Ich habs grad mal simuliert und bei mir erhalte ich das richtige Ergebnis. Paar Dinge zu deinem Code:
Code:

if (Ereignis == true)
{
  if (OrderType() == OP_BUYSTOP)
  {
      bool LongResult=true;
  }
}

Du kannst LongResult nicht innerhalb eines Blocks erstellen, und sie dann auserhalb dieses Blocks weiter nutzen.
LongResult müsstest du am besten oben bei Ereignis erstellen.

Code:

if (LongResult)

  double StopBuyOpenValue = Price;
  double StopBuy2Low;
  double LongValuePerc;
 
  while (Ask +30 > StopBuyOpenValue)
  if (LongResult)
  {
      LongValuePerc = NormalizeDouble(StopBuyOpenValue * NextBuyPercent / 100,Digits); //NextBuyPercent = 1.5
     
      StopBuy2Low = StopBuyOpenValue + LongValuePerc;
      StopBuyOpenValue++;
  }
 
  bool LStopBuyResult_Restore=false;
  LStopBuyResult_Restore = ticketL= OrderSend(Symbol(),OP_BUYSTOP,LotsTraded,StopBuyOpenValue,Slippage,0,0,"BUY(#" + MagicNumberLong + ")",MagicNumberLong,0,Green);
  LongResult=false;

  • Das obige "if(LongResult)" bezieht sich lediglich auf "double StopBuyOpenValue = Price;", da du keine Klammern gesetzt hast.
  • Deine 1.5% befinden sich in der Variablen "StopBuy2Low". "StopBuyOpenValue" inkrementierst du lediglich bei jedem Durchlauf, addierst also immer nur +1.
  • Schmeiß die Variable "StopBuy2Low" raus und setze die Zeile so um
    Code:

    StopBuyOpenValue = StopBuyOpenValue + LongValuePerc;

Code:

bool LStopBuyResult_Restore=false;
LStopBuyResult_Restore = ticketL= OrderSend(Symbol(),OP_BUYSTOP,0.10,StopBuyOpenValue,3,0,0);

Nicht gut formuliert. Da OrderSend() im Fehlerfall -1 liefert, wäre deine Variable "LStopBuyResult_Restore" trotzdem TRUE.
Um es weiter zu verarbeiten, hättest du einfach abgefragt, ob ticketL == -1. Da brauchst du dann auch keine "LStopBuyResult_Restore" mehr.


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