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: 43271
Benutzer: 7.220
Aktive Benutzer: 81
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 4 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #21 (permalink)  
Alt 27.03.18
Neues Mitglied
 
Registriert seit: Mar 2018
Beiträge: 19
mante befindet sich auf einem aufstrebenden Ast
Standard hmm

es tut mir echt leid wenn ich das nicht so verstehe - ich hoffe ich nerve euch nicht schon - ich habe echt keine Erfahrung in prog schreiben

ich dachte folgendes - case1 (zufällige Zahl ist eins) wenn der Code öfters hintereinander 1 liefert - soll für weiteren Code nur einmal eins weiter gegeben werden cas1 Range 1 ist zufallszahl1 (1,1,1,1 ist schlecht :-)

bool CheckNumber(int Range) // Funktion überprüft mir ob vor der aktuellen Zahl auch eine 1 war - wenn die Zahl vorher ungleich war dann liefert sie true wenn sie gleich war liefert sie false dieses gleich oder ungleich übergebe ich in die while Schleife in der die Zufallszahl entsteht (case1 für eins damit:

while(!CheckNumber(true))

und nur wenn die Zahl ungleich ist wird der Code in der while Schleife ausgeführt
CheckNumber (Range);
Print ( "Die Zahl ist" +1);
er gibt mir die neue Zahl 1 aus weil die vorherige Zahl nicht eins war ......


ihr denkt jetzt sicher ich bin komplett bescheuert

aber ich beschäftige mich erst seit einer Woche mit mql4

danke auf alle fälle für eure geduld

der Code ist erst am anfang - ich hab das gefühl ich scheitere schon an so einer Kleinigkeit - hätte nicht gedacht, dass es so kompliziert ist aus

1,1,1,4,4,4,4,3,5, sowas zu bekommen 1,4,3,5

lg mante





Code:
switch(a)
       
       {
              
       case 1:
       Range = 1;
       while(!CheckNumber(true))
       {
       CheckNumber (Range);
       Print ( "Die Zahl ist" +1);
       }
       break;
       
       
       case 2:      
       Range = 2;
       while(!CheckNumber(true))
       {
       CheckNumber(Range);
       Print (" Die Zahl ist 2");                                          // Zahl 15 wird an neu erstellte Funktion wert übergeben
       }
       break;
       
       
       case 3:
       Range = 3;       
       while(!CheckNumber(true)) 
       {
       CheckNumber(Range);
       Print (" Die Zahl ist 3");
       }
       break;
      
       
       case 4:
       Range = 4;
       while(!CheckNumber(true))
       {
       CheckNumber(Range);
       Print (" Die Zahl ist 4");    
       }
       break;
       
       
       case 5:
       Range = 5;
       while(!CheckNumber(true))
       {
       CheckNumber(Range);
       Print (" Die Zahl ist 5");
       }
       break;
       
       
       default:
       break;
     
       }  
}
  
                                                                    // Globale Variablen...

int lastNumber = 0;

bool CheckNumber(int Range)
{
  
   
   if(Range != lastNumber)
            
     return true;
   
     else
      
      return false;

 lastNumber = Range;]
  #22 (permalink)  
Alt 27.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das ist schon mal nicht richtig:

Code:
bool CheckNumber(int Range)
{ 
   if(Range != lastNumber)        
      return true;
   else
      return false;

 lastNumber = Range;
}
weil definitiv das lastNumber = Range; gar nicht erreicht wird und somit
findet auch nie eine Aktualisierung von lastNumber statt.

Und bei den Zeilen
while(!CheckNumber(true))
wird dann der Funktion CheckNumber() nicht der Wert der Variablen Range übergeben, sondern immer eine 1 (die für true steht). Nur wenn auch Range 1 wäre, würde das gehen. Aber das ergibt ja keinen Sinn.

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

funktioniert leider noch immer nicht

Code:
/ Zufallszahl a=1,2,3,4,5 
     switch(a)
       
       {
              
       case 1:
       randNumber= 1;
       while(!CheckNumber())
       {
       Print (randNumber); 
       }
       lastNumber = randNumber;
       break;
       
       
       case 2:      
       randNumber = 2;
       while(!CheckNumber())
       {
       Print (randNumber); 
       }
       lastNumber = randNumber;
       break;
       
       
       case 3:
       randNumber = 3;       
       while(!CheckNumber())
       {
       Print (randNumber); 
       }
       lastNumber = randNumber;
       break;
       
       
       case 3:
       randNumber = 4;       
       while(!CheckNumber())
       {
       Print (randNumber); 
       }
       lastNumber = randNumber;
       break;
      
      
       case 3:
       randNumber = 5;       
       while(!CheckNumber())
       {
       Print (randNumber); 
       }
       lastNumber = randNumber;
       break;
      
      
       default:
       break;
       
       
       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!
      }
  #24 (permalink)  
Alt 27.03.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das ist mir ein wenig zuviel Probiererei.
Kann auch nicht funktionieren, weil

Code:
   case 1:
   randNumber= 1;
   while(!CheckNumber())
   {
      Print (randNumber); 
   }
   lastNumber = randNumber;
   break;
Bei diesem Code und dem Fall, dass die Zufallszahl = 1 ist und nach Sprung
in die Funktion CheckNumber() der bool-Wert false zurückgegeben wird, dann läuft das Programm in eine Endlosschleife.

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

Zitat:
Zitat von mante Beitrag anzeigen
es tut mir echt leid wenn ich das nicht so verstehe - ich hoffe ich nerve euch nicht schon
Solange wir antworten sind wir nicht genervt genug.
Ich mit meiner Kanne und Doc mit seinem speziellen Tee, wir haben uns etwas Geduld angetrunken...

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

Zitat:
Zitat von mante Beitrag anzeigen
ich dachte folgendes - case1 (zufällige Zahl ist eins) wenn der Code öfters hintereinander 1 liefert - soll für weiteren Code nur einmal eins weiter gegeben werden cas1 Range 1 ist zufallszahl1 (1,1,1,1 ist schlecht :-)
Der Gedanke ist ja nicht verwerflich, lediglich nicht richtig umgesetzt. Aber es geht auch deutlich einfacher.

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

Zitat:
Zitat von mante Beitrag anzeigen
bool CheckNumber(int Range) // Funktion überprüft mir ob vor der aktuellen Zahl auch eine 1 war - wenn die Zahl vorher ungleich war dann liefert sie true wenn sie gleich war liefert sie false dieses gleich oder ungleich übergebe ich in die while Schleife in der die Zufallszahl entsteht (case1 für eins damit:

while(!CheckNumber(true))

und nur wenn die Zahl ungleich ist wird der Code in der while Schleife ausgeführt
CheckNumber (Range);
Print ( "Die Zahl ist" +1);
Richtig verstanden, verkehrt umgesetzt. Das "true" gehört, wenn es denn sein muss, neben den Funktionsaufruf. Dazu dann
aber kein Ausrufezeichen! Zum besseren Verständnis:
Code:
(CheckNumber() == true) => ist GLEICH wie (CheckNumber())
(CheckNumber() == false) => ist GLEICH wie (!CheckNumber())
=== === === === === === === === === === === ===

Zitat:
Zitat von mante Beitrag anzeigen
ihr denkt jetzt sicher ich bin komplett bescheuert
War das ne Frage, oder outest du dich grad?
Spaß beiseite, quatsch! Jeder Anfänger wird Fragen haben, die er später belächeln kann.

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

Gehen wir das ganze mal ausführlich durch:
(Ich beschreibe es anhand meiner ursprünglichen Funktion)
Code:
// Globale Variablen => überall im Code nutzbar
// Also außerhalb jeglicher Funktion erstellen
int randNumber = 0, lastNumber = 0;

// Die Funktion zum überprüfen, natürlich auch außerhalb
// jeglicher Funktion erstellen
bool CheckNumber()
{
   if(randNumber != lastNumber)
      return true;   // Zahlen sind unterschiedlich
   else
      return false;  // Zahlen sind identisch
}

// Den folgenden Code dann dort, wo du die Zufallszahlen
// erhälst. Ein switch ist überhaupt nicht notwendig!
randNumber = // Dein ..., welches die Zufallszahl liefert!

while(!CheckNumber()) // Also, solange false (Zahlen gleich) geliefert wird...
{
   // Die geprüfte Zahl ist mit der letzten identisch, daher
   // muss randNumber jetzt eine neue Zufallszahl erhalten,
   // welche im nächsten Schleifendurchlauf durch den
   // Schleifenkopf geprüft wird. Das geht so lange weiter,
   // bis die Zahlen ungleich sind. Dann wird die Schleife abgebrochen!
   randNumber = // Neue Zufallszahl...
}

// Nach der Schleife hat randNumber jetzt eine Zahl
// ungleich lastNumber. Diese kannst du nun für was
// auch immer weiter verarbeiten...
Ich hatte diese Funktion erstellt, da du den Thread mit eben einer Überprüfungsfunktion gestartet hast.
Bei einer so simplen Prüfung könnte man aber auch die Funktion weglassen und die Schleife mit
Code:
while(randNumber == lastNumber)
erstellen.
  #26 (permalink)  
Alt 27.03.18
Neues Mitglied
 
Registriert seit: Mar 2018
Beiträge: 19
mante befindet sich auf einem aufstrebenden Ast
Standard mahhh danke

für all die Infos von euch

[QUOTE// Ein switch ist überhaupt nicht notwendig!
randNumber = // Dein ..., welches die Zufallszahl liefert!
][/QUOTE]


der Switch macht aber meine Zufallszahl

case 1 zufallszahl ist eins

case2 zufallszahl ist zwei
  #27 (permalink)  
Alt 27.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mante Beitrag anzeigen
der Switch macht aber meine Zufallszahl

case 1 zufallszahl ist eins

case2 zufallszahl ist zwei
Nö! Beim switch gehst du nur die Werte durch. Die Zufallszahl an sich ist doch das, womit du dein switch fütterst!
Und DIE erhälst du ja durch was anderes.

"case 1" VON WAS?? DAS IST DEINE ZUFALLSZAHL !!!
  #28 (permalink)  
Alt 27.03.18
Neues Mitglied
 
Registriert seit: Mar 2018
Beiträge: 19
mante befindet sich auf einem aufstrebenden Ast
Standard hi next user

Die Zufallszahl entsteht wenn der Basiswert einen bestimmten Preis erreicht.

zb 1100 = case 1 - 1200 ist case 2 ....- die Funktion soll einen Wert liefern-da der Preis jedoch die 1100 erreicht und danach wieder bei 1101 oder 1105 danach wieder bei 1099 ist kommt der wert 1,1,1,1,2,2,2 zustande -eigentlich ist mein erster ea ein Projekt bei dem Orders erstellt werden bei preisen die ich vorher festlegen kann

ich wollte es so programmieren: wenn der preis die 1100 erreicht - mir ein Signal gibt wenn er dort ist -danach pause (keine weiteren Signale durch Schwankungen bei 1100 - nächste Signal erst wieder bei 1200

klingt einfach - dachte ich jedenfalls - aber ich wollte noch nix kompliziertes programieren für den Anfang

im switch habe ich die preise festgelegt - dh preis erreicht wert 1 - case 1....

zufällig sind die werte deshalb weil vorher nicht feststeht welchen Wert der Kurs als nächstes erreicht.

lg mante

lg mante
  #29 (permalink)  
Alt 27.03.18
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Ich bin an Dein ursprüngliches Problem mal ganz anders ran gegangen. Du sagtest ja, die "Zufallszahl" kommt aus dem Chart. Damit es auch öfter gleiche Zahlen gibt, hole ich meine Zufallszahl über den Spread. Mein Testscript läuft auf Eur/Usd im M1, ich habe die Durchläufe aber auf 5 begrenzt, damit die Ausgabe nicht zu lang wird.
Code:
// test script auf Eur/Usd
#property strict

void OnStart()
{
   int Zahleingabe;
   
   for(int i=0; i<5; i++) // Durchläufe
   {
      
      int Zufallszahl=FunktionHoleZahl();
      Print("habe Zahl gekriegt: ",Zufallszahl);

      if( FunktionHoleZahl()!=Zahleingabe ) // unterscheidet sich ->benutzen
      {  
         FunktionMachWasMitZahl(Zufallszahl);
         Zahleingabe=Zufallszahl;           // merken, das ist Zahleingabe (gewesen)

         Print("die hier ist erst mal nicht mehr zu gebrauchen: ",Zahleingabe);
      }
      else ;                                // ist gleich -> also mach nix

      Sleep(375);                           // für Tests abends
   
   
   }
}

// Funktion, die eine Zahl findet/holt
int FunktionHoleZahl()
{
   int Zahl=(int)MarketInfo(NULL,MODE_SPREAD);
   return(Zahl);
}

// Funktion, die eine Zahl weiterverarbeitet
void FunktionMachWasMitZahl(int Zahleingabe)
{
   // Code, der die Zahleingabe benutzt
   Print("FunktionMachWasMitZahl ",Zahleingabe,"! Ok,verbrauchen wir sie ",Zahleingabe);
}
Der Code funktioniert, vielleicht kannst Du ihn bei Dir so einbauen. AVT
  #30 (permalink)  
Alt 28.03.18
Neues Mitglied
 
Registriert seit: Mar 2018
Beiträge: 19
mante befindet sich auf einem aufstrebenden Ast
Standard danke avt

ich habe es versucht aber es hat nicht geklappt - jetzt versuche ich es mal mit dem Code
Code:
int start()
{
    static bool first = true;
    static int pre_OrdersTotal = 0;
    int _OrdersTotal = OrdersTotal();
 
    // Wenn der Experte zum ersten Mal gestartet wird, ist die Zahl der Orders beim vorherigen Tick nicht bekannt.
    // Deswegen ihn einfach speichern, den ersten Start anmerken und beenden.
    if ( first )
    {
        pre_OrdersTotal = _OrdersTotal;
        first = false;
        return(0);
    }
 
    // Die Zahl der Positionen beim vorherigen Tick mit der laufenden Zahl vergleichen
    // Wenn sich die Zahl verändert hat, die Meldung anzeigen
    if ( _OrdersTotal > pre_OrdersTotal ) 
        Alert( "Die Zahl der Positionen ist gestiegen! früher - ", pre_OrdersTotal, 
                                                         ", jetzt - ", _OrdersTotal );
 
    if ( _OrdersTotal < pre_OrdersTotal )
        Alert( "Die Zahl der Positionen ist gesunken! früher - ", pre_OrdersTotal, 
                                                         ", jetzt - ", _OrdersTotal );
 
    // Die Zahl der Positionen speichern
    pre_OrdersTotal = _OrdersTotal;
 
return(0);
}]
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 02:57 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.
-----------------------------------------------------------------------------------------------------------------------------