Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43260
Benutzer: 7.224
Aktive Benutzer: 74
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 23 Stunden
- Sundaytrad...
vor einem Tag
- TS_6
vor 3 Tagen
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 189
Gesamt: 189
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 13.08.17
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 20
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;
  #2 (permalink)  
Alt 13.08.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
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.
Thema geschlossen

Lesezeichen

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


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 17:43 Uhr.





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