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: 43678
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.05.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard wie übergebe ich ein Array an eine Funktion

Je mehr ich darüber lese, desto verwirrender wird die Sache. Also frag' ich mal hier, damit vielleicht etwas Klarheit reinkommt.
Situation:
Ich habe mehrere Arrays z.B.
Code:
string ApairAud[7]={"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","EURAUD","GBPAUD"};
string ApairNzd[7]={"NZDCAD","NZDCHF","NZDJPY","NZDUSD","AUDNZD","EURNZD","GBPNZD"};
Nun muß ich für jedes Array die gleichen Berechnungen durchführen, z.B.
Code:
void CalcAud()
{
   for(int j=0; j<ArrayRange(ApairAud,0); j++)
      if( ... )  Action;
}
Klar kann ich für jedes Array ne eigene Funktion schreiben, aber es wäre einfacher, wenn ich eine Funktion hätte, die dann alle Arrays behandeln kann, also so was wie CalcPair( string FürDiesesArray ).
Alles, was ich bisher für FÜrDiesesArray versucht habe, endetet in Fehlermeldungen.
Kann mir bitte jemand sagen, wie ich das richtig mache?
Danke. AVT
  #2 (permalink)  
Alt 06.05.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das verstehe ich nicht ganz.
Du kannst doch alle Arrays in einer Funktion bearbeiten, ob nacheinander oder alle gleichzeitig hängt sicherlich von der Unterschiedlichkeit der Arraygröße ab und von der if-Abfrage.

Kannst Du das noch mal eindeutiger formulieren?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 06.05.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Danke für Deine Antwort traderdoc.
Mal zur Illustration, hier die erste Funktion (die funktioniert - ich baue lieber alles in kleinen Schritten auf):
Code:
void CalcAud()
{
   int CountWeaks=0, CountStrongs=0;
   for(int j=0; j<ArrayRange(ApairAud,0); j++)
   {
      if( GetFrontName(ApairAud[j]) ==ApairClass[0])      //InThisPairNameItIsInFront
      {
         for(int i=0; i<ALoopLimit; i++)                  //SearchTheSStableForTheName
         {
            if(SSpairTable[i].SpairName == ApairAud[j] )  //FoundTheSStableName
            {
               if(SSpairTable[i].SpairPercMove>0) CountStrongs++; //0% is counted weak
               else                               CountWeaks++;
            }
            SSpairTable[i].SpairStrongs=CountStrongs;
            SSpairTable[i].SpairWeaks=CountWeaks;
         }
      }
      if( GetBackName(ApairAud[j]) ==ApairClass[0])       //InThisPairNameItIsInBack
      {
         for(int i=0; i<ALoopLimit; i++)                  //SearchTheSStableForTheName
         {
            if(SSpairTable[i].SpairName == ApairAud[j] )  //FoundTheSStableName
            {
               if(SSpairTable[i].SpairPercMove<0) CountStrongs++;
               else                               CountWeaks++; //0% is counted weak
            }
            SSpairTable[i].SpairStrongs=CountStrongs;
            SSpairTable[i].SpairWeaks=CountWeaks;
         }
      }
   }
}
Es wird das "kleine" Array untersucht, um die Ergebnisse in der großen Tabelle festzuhalten. (Mit diesen Tabellenwerten wird danach weiter gerechnet).
Ich hätte das jetzt gerne umgewandelt in eine allgemeine Funktion, etwa so:
Code:
void CalcStrongWeak(string ArrayName=??? , int ClassNo=0)
{
   int CountWeaks=0, CountStrongs=0;
   for(int j=0; j<ArrayRange(ArrayName,0); j++)
   {
      if( GetFrontName(ArrayName[j]) ==ApairClass[ClassNo])
      {
         for(int i=0; i<ALoopLimit; i++) 
         {
            if(SSpairTable[i].SpairName == ArrayName[j] )
            {
               if(SSpairTable[i].SpairPercMove>0) CountStrongs++; //0% is counted weak
               else                               CountWeaks++;
            }
            SSpairTable[i].SpairStrongs=CountStrongs;
            SSpairTable[i].SpairWeaks=CountWeaks;
         }
      }
      if( GetBackName(ArrayName[j]) ==ApairClass[ClassNo])
      {
         for(int i=0; i<ALoopLimit; i++) 
         {
            if(SSpairTable[i].SpairName == ArrayName[j] )
            {
               if(SSpairTable[i].SpairPercMove<0) CountStrongs++;
               else                               CountWeaks++; //0% is counted weak
            }
            SSpairTable[i].SpairStrongs=CountStrongs;
            SSpairTable[i].SpairWeaks=CountWeaks;
         }
      }
   }
}
Ich hoffe, jetzt ist klar wohin ich will. Danke. AVT
  #4 (permalink)  
Alt 06.05.20
Neues Mitglied
 
Registriert seit: Apr 2020
Beiträge: 14
TraumExperte befindet sich auf einem aufstrebenden Ast
Standard

Hallo AVT,

per Referenz:

void CalcStrongWeak(string &DeinArray[] , int ClassNo=0)
{
....
}

Referenziert wird mit "&"

Grüße

TraumExperte
  #5 (permalink)  
Alt 07.05.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Wenn es dann so funktionieren soll, wäre die referenzierte Methode
wie @TraumExperte gezeigt hatte, ein der korrekten Möglichkeiten.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 07.05.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

@ TraumExperte
Danke, das war es was mir fehlte - ist also quasi das gleiche wie die OnCalculate Arrays.

@ traderdoc
So sollte es eigentlich funktionieren. Die Ergebnisse sind auch richtig.

Code:
string ApairClass[8]={"AUD","CAD","CHF","EUR","GBP","JPY","NZD","USD"};
Jetzt frage ich mich nur, ob es nicht korrekter/eindeutiger wäre, die Funktion so zu beginnen (MT meckert zwar nicht, aber bei dem Klassenarray handelt es ja auch um ein string Array):
Code:
void CalcStrongWeak(string &ArrayName[],  //PairNameArrayToCalc
                    string &ClassArray[], //PairClassArrayToUse
                    int ClassNo=0)        //ArrayNoInThePairClass
Aufgerufen würde sie dann so:
Code:
 CalcStrongWeak(ApairAud,ApairClass,0);
Oder war die "int ClassNo=0" ausreichend (im Sinne korrekter Programmierung, nicht im Sinne von MT Fehlertoleranz)?
Danke. AVT
Thema geschlossen

Lesezeichen

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 15:48 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.
-----------------------------------------------------------------------------------------------------------------------------