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: 4396
Beiträge: 40162
Benutzer: 6.773
Aktive Benutzer: 228
Links: 80
Wir begrüßen unseren neuesten Benutzer: Muhammad ali001
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 3 Stunden
- Muhammad...
vor einem Tag
- wiktor
vor 2 Tagen
- Pierrot150...
vor 3 Tagen
- doanabogda...
vor 5 Tagen
- mausgamble...

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 82
Gesamt: 83
Team: 0
Team:  
Benutzer:  TogoTiger
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By traderdoc
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
WD2 WD2 ist offline
Neues Mitglied
 
Registriert seit: Mar 2020
Beiträge: 7
WD2 befindet sich auf einem aufstrebenden Ast
Standard Werte aus for schleife berechnen

Hallo zusammen,

Ich möchte gerne die Daten, die ich in einer For Schleife gesammelt habe, berechnen und dann auswerten z.b.

Von Close[1000] bis Close[24] wie oft wurde dort ein Preis getroffen? Der Preis der am häufigsten getroffen wurde, soll angezeigt werden. Also Preis 100 3x (zwischen den Kerzen). Welcher Preis am zweit häufigsten usw. Bis jetzt habe ich folgendes funktionieren tut dies leider nicht.

Code:
void OnTick()
  {
      //--
      for(i = FirstBar; i <= LastBar; i++ )
      {CFB = Close[i];}
         //---
         for(j = i+FirstBar; j <= LastBar; j++ )
         {CLB = Close[j];}
      
      //--
      if(CFB == CLB)
      {counter++;}
      
      //--
      Comment("Hits: ",counter);
      
  }
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 897
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Jetzt mal schnell geraten:
Code:
i <= LastBar;
Nicht <= sondern nur <


Poste mal den ganzen Code.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
WD2 WD2 ist offline
Neues Mitglied
 
Registriert seit: Mar 2020
Beiträge: 7
WD2 befindet sich auf einem aufstrebenden Ast
Standard

Hab ich versuch hat leider nichts gebracht. Hier den ganzen Code:

Code:
int i,j;
double CFB,CLB;

int counter = 0;

extern int FirstBar   = 1;
extern int LastBar    = 100;
extern int MaxHit     = 2;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
      //--
      for(i = FirstBar; i <= LastBar; i++ )
      {CFB = Close[i];}
         //---
         for(j = i+FirstBar; j <= LastBar; j++ )
         {CLB = Close[j];}
      
      //--
      if(CFB == CLB)
      {counter++;}
      
      //--
      Comment("Hits: ",counter);
      
  }
//+------------------------------------------------------------------+
Mit Zitat antworten
  #4 (permalink)  
Alt vor 2 Wochen
WD2 WD2 ist offline
Neues Mitglied
 
Registriert seit: Mar 2020
Beiträge: 7
WD2 befindet sich auf einem aufstrebenden Ast
Standard

Hat niemand eine Idee?
Mit Zitat antworten
  #5 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 897
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Nicht wirklich.

Mein (theoretischer) Weg wäre:

Mit ner for Schleife, so wie es anscheinend beabsichtigt ist, die ganzen Preise in nen Array packen.

Dann dieses mit ner Extra-Schleife durchsuchen. Wobei man dann wohl einen Wert nach dem Anderen nacheinander mit allen Anderen vergleichen müsste.

Aber ich versteh weder viel von Schleifen noch von Arrays.

Was ist eigentlich close[i] ?
Mit Zitat antworten
  #6 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 33
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

Dein Problem kannst z.B. mit einem zweidimensionalen Array lösen:
Hier mit fixem Array, kannst natürlich auch dynamisch machen.

Ich denke nicht, dass du das bei jedem Tick berechnen willst, also mach das so, dass dein Array nur bei jeder neuen Kerze gefüllt wird.

Der Code ist bewusst sehr einfach gestrickt. Du kannst z.B. die Performance verbessern, wenn du die Tabelle nur beim OnInit erstellst und danach jede neue Kerze einfügst und nicht bei jeder Kerze die ganze Tabelle neu berechnest.

Code:
int      i,j;
int      FirstBar=1, LastBar=1000;
double   Kurse[1000][2];
int      max_j = -1;

datetime TimeOld;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   if(Time[0] != TimeOld)        // Nur ausführen, wenn neue Kerze
   {

      for (j=0;j<1000;j++)
      {
         Kurse[j,0] = 0;
         Kurse[j,1] = 0;
      }
      max_j = -1;
      
      for (i=FirstBar;i<=LastBar;i++)
      {
         for (j=0;j<=(max_j+1);j++)
         {
            if (Kurse[j,1] == Close[i])
            {
               Kurse[j,0]++;
               break;
            }
            if (Kurse[j,1] == 0)
            {
               max_j++;
               Kurse[max_j,0] = 1;
               Kurse[max_j,1] = Close[i];
               break;
            }
         }
      }

      for (j=0;j<max_j;j++)
      {
         Print ("j: ",j," Kurs: ",DoubleToString(Kurse[j,1],3)," getroffen: ",Kurse[j,0]);
      }
   }

   TimeOld = Time[0];
}
Bei jedem Tick püfst jetzt, ob dein Kurs im Array vorkommt und wie oft. Damit du aber keine Performanceprobleme kriegst solltest die relevanten Werte (mehr als z.B.2 Treffer) in ein neues Array übertagen und dann damit prüfen.

Ich habe das mit USDJPY getestet, also 3 Nachkommastellen. Das gibt logischerweise nur sehr wenige Treffer. Bei Paaren mit mehr Nachkommastellen solltest du runden, sonst kriegst immer nur 1 als Treffer. Auch beim DAX hast nur im 1 Min. Chart ein paar auswertbare Teffer.

@MA-EA Close[i] ist der Schlusskurs der Kerze i. Wenn i=0, dann ist das der jetzige Kurs, i=1 ist die letzte fertige Kerze, i=2 die vorletzte etc.
äh, wieviele Jahre versuchst jetzt schon zu programmieren?
Mit Zitat antworten
  #7 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.300
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Nicht wirklich.

Mein (theoretischer) Weg wäre:

Mit ner for Schleife, so wie es anscheinend beabsichtigt ist, die ganzen Preise in nen Array packen.

Dann dieses mit ner Extra-Schleife durchsuchen. Wobei man dann wohl einen Wert nach dem Anderen nacheinander mit allen Anderen vergleichen müsste.

Aber ich versteh weder viel von Schleifen noch von Arrays.

Was ist eigentlich close[i] ?
Lieber @MA-EA,
sorry, ich staune immer wieder, mit welcher Beharrlichkleit Du hier Ratschläge und Hinweise gibst, als wäre es Dein täglich Brot. Ja, Du könntest jetzt sagen,
"ich habe wenigstens etwas dazu beigetragen". Ok, ich habe nichts dazu beigetragen, was aber bisher nur daran lag, dass ich mich mit der Problematik aus Zeitgründen nicht beschäftigt habe.
Nur wenn Du von for-Schleifen und Arrays schreibst und alle wissen hier durch Deine eigenen Aussagen, dass Du von Beidem keine Ahnung hast, dann frage ich wieder sehr besorgt, warum tut er dies?
Ich empfehle auch nicht Dinge, von denen ich keine Ahnung habe. Das geht doch eher nach hinten los, streut unnötig Fehlinformatioen und verwässert und verkompliziert doch nur die Threads, ohne Mehrwert zu generieren.

Daher meine inständige Bitte, lass es bitte sein.

traderdoc
Leopold likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 2 Wochen
WD2 WD2 ist offline
Neues Mitglied
 
Registriert seit: Mar 2020
Beiträge: 7
WD2 befindet sich auf einem aufstrebenden Ast
Standard

TogoTiger

Erstmal vielen Dank, ich habe soweit deinen Code durch gelesen und Verstanden, bis auf eins nicht ganz.

Code:
Kurse[j,0]
Die 0 bzw. 1 hinter dem i welche genau Funktion hat sie?
Mit Zitat antworten
  #9 (permalink)  
Alt vor 2 Wochen
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 33
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

Kurse[1000][2] ist ein zweidimensionales Array mit 1000 Plätzen. Der erste Index enthält in meinem Beispiel die Anzahl Treffer, der 2. Index den Kurs.
Schau den Print-Befehl an und schau im MT4 Terminal bei Experten was der Befehl ausgibt, dann wirst das verstehen.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
array, 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 19:11 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2020 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.
-----------------------------------------------------------------------------------------------------------------------------