Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3781
Beiträge: 36748
Benutzer: 5.984
Aktive Benutzer: 486
Links: 80
Wir begrüßen unseren neuesten Benutzer: Take2
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Tagen
- Take2
vor 3 Tagen
- peterhardi
vor 4 Tagen
- tecdaxfan
vor 5 Tagen
- falcochen
vor 6 Tagen
- Siebi71

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 35
Gesamt: 36
Team: 0
Team:  
Benutzer:  Lena
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 13.08.17
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 17
icepick1661 befindet sich auf einem aufstrebenden Ast
Standard 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;
Mit Zitat antworten
  #2 (permalink)  
Alt 13.08.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 245
next user befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
berechnung while-schleife, fehler while-schleife, mql4, programmierung, programmierung metatrader, programmierung mql4, while-schleife, while-schleife berechnen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 05:45 Uhr.



spam firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------