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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43254
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einer Stunde
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 603
Gesamt: 604
Team: 0
Team:  
Benutzer:  JosephTK
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 25.03.18
Neues Mitglied
 
Registriert seit: Mar 2018
Beiträge: 19
mante befindet sich auf einem aufstrebenden Ast
Standard wie kann ich sowas lösen?

der Chart liefert Werte von 1 bis 5 aber leider manchmal den gleichen Wert hintereinander

1,1,1,1,4,5,4,4,4,4,4,1,1,1 wie kann ich aus dieser Reihe folgende Reihe bekommen

1,4,5,4,1....


bin am verzweifeln

ich hoffe ihr könnt mir helfen

lg mante
  #2 (permalink)  
Alt 26.03.18
Neues Mitglied
 
Registriert seit: Jul 2010
Beiträge: 1
freiri befindet sich auf einem aufstrebenden Ast
Standard Vorschlag

Ohne näheres zu kennen, würde ich es etwa wie unten ausgeben. Die Zufallszahl in x1 speichern und nur wenn die aktuelle Zufallszahl x ungleich x1 ist, erfolgt ein Print. Es werden nun endlos Zufallszahlen generiert, ohne dass zweimal die gleiche Zahl hintereinander ausgegeben wird.

int x=0,x1=0; // Zufallszahl x = aktuelle, x1 = vorhergehende
int c=0; // Dummy

while (c <= 1) // Endlosschleife endet nie
{
x = Zufallszahl;
if (x != x1) // != bedeutet ungleich
{ Print x; // nur ungleiche Zufallszahl wird ausgegeben
x1=x; // aktuelle Zufallszahl wird an x1 übergeben
}
}

gruss
freiri
  #3 (permalink)  
Alt 26.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Für Code ist es jetzt zu spät, aber vom prinzipiellen Ansatz her würde das so funktionieren.

Wenn die Endreihe feststeht, die Du erhalten willst, dann wird die Rohheihe als String betrachtet, und dann wird die Rohreihe von links nach rechts nach den einzelnen Ziffern der Endreihe durch sucht, d.h. in der Rohreihe sollen ja nicht nur die Ziffern der Endreihe enthalten sein, sondern auch in der entsprechenden, prinzipiellen Reihenfolge, auch wenn durch Doppler in die Länge gezogen.

D.h. es wird zuerst nach der 1 von links in der Rohreihe gesucht.
Ist die anwesend werden die nachfolgenden identifizierten 1 ignoriert.
D.h. ab der Stelle, wo die erste 1 gefunden wurde wird ab da nach der 4 gesucht.
Wurde die gefunden wird sofort nach der 5 gesucht.
Usw. usf.

Über die Hilfe F1 wirst Du viele String-Funktionen finden, mit denen man das relativ einfach umsetzen kann.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 26.03.18
Neues Mitglied
 
Registriert seit: Mar 2018
Beiträge: 19
mante befindet sich auf einem aufstrebenden Ast
Standard fehler

hallo freri hallo traderdoc

danke für eure Hilfe - ich habe es nun so gemacht
der Compiler liefert keine Fehler aber der MT4 friert im Strategietester ein:-)




int Wert(int Range) // Range ist die Zufallszahl

{



int x = 0, x1 = 0; // Zufallszahl x = aktuelle, x1 = vorhergehende
int c=0; // Dummy

while (c <= 1) // Endlosschleife endet nie
{
x = Range;


if (x != x1) // != bedeutet ungleich

{ Print ( x); // nur ungleiche Zufallszahl wird ausgegeben
x1=x; // aktuelle Zufallszahl wird an x1 übergeben
}
}


Print ("Range sich geändert auf" + Range );


}

findet ihr da einen fehler
  #5 (permalink)  
Alt 26.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja klar! Aber erst einmal a bisserl Struktur in den Code.
Das sollte man mal als Bedingung stellen, vor der Veröffentlichung von Code.

Code:
int Wert(int Range)        // Range ist die Zufallszahl
{
   int x = 0, x1 = 0;      // Zufallszahl x = aktuelle, x1 = vorhergehende
   int c = 0;              // Dummy

   while (c <= 1)          // Endlosschleife endet nie
   {
      x = Range;
      if (x != x1)         // != bedeutet ungleich
      { 
         Print(x);         // nur ungleiche Zufallszahl wird ausgegeben
         x1 = x;           // aktuelle Zufallszahl wird an x1 übergeben
      }
   }
   Print("Range sich geändert auf" + Range);
}
So und an welcher Stelle soll denn nun aus der while-Schleife gesprungen werden?
1. Da c mit 0 initialisiert wurde und in der Schleife nicht geändert wird bleibt es bei 0 und das ist nach Gauss nun mal immer <= 1!
2. Ein break für einen Ausstieg aus der Schleife existiert nicht
3. Ein return(..) existiert innerhalb der Schleife auch nicht, übrigens auch außerhalb der Schleife nicht, muss aber! wegen int Wert().

Also klarer Fall von Endlosschleife.

Eines der drei o.g. Punkte muss aber greifen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 26.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Edit: Doc war schneller

Wenn ich mir den Beitrag von Doc grad so ansehe
Zitat:
Zitat von traderdoc Beitrag anzeigen
Wenn die Endreihe feststeht, die Du erhalten willst, dann wird die Rohheihe als String betrachtet
frage ich mich @mante, war das so gemeint?

Ich habe es so verstanden, das es keine "Endreihe" gibt, du lediglich keine Zahl 2 mal hintereinander haben willst.

Zitat:
Zitat von mante Beitrag anzeigen
danke für eure Hilfe - ich habe es nun so gemacht
der Compiler liefert keine Fehler aber der MT4 friert im Strategietester ein:-)
wahrscheinlich weil
Zitat:
Zitat von mante Beitrag anzeigen
while (c <= 1) // Endlosschleife endet nie
du keinen Riegel davor setzt.
  • Eine Endlosschleife muss natürlich auch abgebrochen werden.
  • Eine "Dummyvariable" ist unnötig. Eine Endlosschleife kriegt man auch einfach mit
    Code:
    while(true)
  • Die letzte Zufallszahl "x1" ist nach dem ersten Durchgang IMMER die gleiche!
  • Wenn du die aktuelle Zuffallszahl als Parameter in deiner Funktion übergibst, brauchst du weder
    • eine Schleife.
    • eine Variable "x", die den Wert des Parameters annimmt.
    • schon GARNICHT eine in der Funktion erstellte "x1", die eben NICHT die letzte Zahl beinhaltet.
  • Überhaupt ist die Logik ein bischen verloren.

Ein Beispiel:
Code:
// Globale Variablen...
int randNumber = 0;
int lastNumber = 0;

// Test...
bool CheckNumber()
{
   if(randNumber != lastNumber)
      return true;
   else
      return false;
}

// Solange Test nicht ok, Schleife...

while(!CheckNumber())
{
   randNumber = // Neue Zufallszahl...
}

lastNumber = randNumber;
  #7 (permalink)  
Alt 26.03.18
Neues Mitglied
 
Registriert seit: Mar 2018
Beiträge: 19
mante befindet sich auf einem aufstrebenden Ast
Standard hallo

hallo traderdoc undhallo next user :-)

der
HTML-Code:
nt Wert(int Range)        // Range ist die Zufallszahl
{
   int x = 0, x1 = 0;      // Zufallszahl x = aktuelle, x1 = vorhergehende
   int c = 0;              // Dummy

   while (c <= 1)          // Endlosschleife endet nie
   {
      x = Range;
      if (x != x1)         // != bedeutet ungleich
      { 
         Print(x);         // nur ungleiche Zufallszahl wird ausgegeben
         x1 = x;           // aktuelle Zufallszahl wird an x1 übergeben
      }
   }
   Print("Range sich geändert auf" + Range);
}
liefert nur einen Wert - danach steht alles still

bei deinem Code next user
HTML-Code:
/ Globale Variablen...
int randNumber = 0;
int lastNumber = 0;

// Test...
bool CheckNumber()
{
   if(randNumber != lastNumber)
      return true;
   else
      return false;
}

// Solange Test nicht ok, Schleife...

while(!CheckNumber())
{
   randNumber = // Neue Zufallszahl...
}

lastNumber = randNumber;
ist mir nicht klar was danach kommt

HTML-Code:
{
   randNumber = // Neue Zufallszahl...
}
  #8 (permalink)  
Alt 26.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja klar, das ist ja auch derselbe Code, den Du vorher gepostet hattest,
nur habe ich den mal aufgeräumt, das schrieb ich aber auch. Und anhand des aufgeräumten Code habe ich Dir erklärt, warum das eine Endlosschleife ist und wie man die so programmiert, dass es eben keine wird.

Also demnächst, evtl. a bisserl genauer lesen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #9 (permalink)  
Alt 26.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Hey Doc, auch'n Tee...

=== === === === === === === === === === === ===

Zitat:
Zitat von mante Beitrag anzeigen
ist mir nicht klar was danach kommt

HTML-Code:
{
   randNumber = // Neue Zufallszahl...
}
Danach kommt das, was da steht.
"randNumber" wird eine neue Zufallszahl zugewiesen. Wie du die Zahlen ermittels, hast du ja
nicht gesagt. Du sagtest nur "Der Chart liefert mir Zufallszahlen von 1-5 / 1-10".

Vielleicht so bischen verständlicher:
Code:
// Globale Variablen...
int randNumber = 0;
int lastNumber = 0;

// Test...
bool CheckNumber()
{
   if(randNumber != lastNumber)
      return true; // Zufallszahl ist anders -> Gib true zurück!
   else
      return false; // Zufallszahl ist gleich -> Gib false zurück!
}

// Solange Test nicht ok, Schleife...

while(!CheckNumber())
{
   // Solange CheckNumber() false liefert, also neue
   // Zufallszahl == letzte ist, wird mit folgender Zeile
   // eine neue Zufallszahl "randNumber" zugewiesen.
   // (wie auch immer du die Zahlen erhälst!)

   randNumber = // Neue Zufallszahl...
}

// Die while-Schleife wurde wegen ungleicher, neuer Zufallszahl
// abgebrochen. Hier jetzt die gültige Zufallszahl verarbeiten,
// was auch immer du damit machst.
// Dann noch der letzten die aktuelle Zufallszahl zuweisen und
// es kann weiter gehen...
lastNumber = randNumber;
  #10 (permalink)  
Alt 26.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von next user Beitrag anzeigen
Hey Doc, auch'n Tee...

=== === === === === === === === === === === ===
Willst Du mich damit aggressiv machen?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Thema geschlossen

Lesezeichen

Stichworte
chart, chart wert, chart werte, mql4, programmierung, programmierung metatrader, programmierung mql4

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 +1. Es ist jetzt 23:51 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.
-----------------------------------------------------------------------------------------------------------------------------