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: 4972
Beiträge: 43246
Benutzer: 7.216
Aktive Benutzer: 84
Links: 84
Wir begrüßen unseren neuesten Benutzer: bb1107
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Tagen
- bb1107
vor einer Woche
- rg-trader
vor 2 Wochen
- toshistyle
vor 2 Wochen
- Robin
vor 3 Wochen
- mMmaanu

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 01.07.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard Array out of Range ??

Hey Leute,


leider kenn ich mich mit Array´s ned so gut aus. Versuch RSI Werte abzuspeichern und der EA stoppt mit dem Fehler "Array Out of Range"

Array ist auch mit double R_S_1[10] oberhalb der Startfunktion hinterlegt. Also größe passt auch und die Werte vom RSI stimmen auch beim ersten Durchlauf bevor er fliegt. ArrayMin/Max und iHighest/iLowest sind auch mit int hinterlegt Hab schon gegoogelt aber ich find leider nix, hoffe jem weiß nen Rat

LG

Code:

int start()
{   
                                         
double indi ;
if(BarCount != Bars)
  {
   BarCount = Bars;
   
       for( b =0 ;b<10;b++)
       {       indi = iRSI(NULL,0,R_S_1_Period,PRICE_CLOSE,i);
               if (indi > 0) 
               {
               //Laut Journal liegt der Fehler hier drunter in der Zeile, da fliegt er raus 
                  R_S_1[i] = indi;                  
                     i++;
         
               }                   
       }      
 
}
 

       maxValueIdx=ArrayMaximum(R_S_1,WHOLE_ARRAY,0);
       minValueIdx=ArrayMinimum(R_S_1,WHOLE_ARRAY,0);  

       double letztes_Tief = Low [_Tief]  ;
       double letztes_Hoch = High[_Hoch] ; 
     
       _Tief = iLowest (NULL,0,1,10,1);
       _Hoch = iHighest(NULL,0,2,10,1);              
       double R_S_1_Tief     = iRSI(NULL, 0,R_S_1_Period,PRICE_CLOSE,_Tief);
       double R_S_1_Hoch     = iRSI(NULL, 0,R_S_1_Period,PRICE_CLOSE,_Hoch);
  #2 (permalink)  
Alt 01.07.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Vor der for-Schleife mal sicherheitshalber

i = 0;

setzen.
Sollte die RSI-Berechnung mit i = 1 beginnen, dann wird das Programm bei i = 10 den Arrayfehler anzeigen, denn die Arrayfelder gehen nur bis zum Index 9, aber die for-Schleife wird 10 mal durchlaufen.

Wo ist b deklariert?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 01.07.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

hey doc , danke für die schnelle antwort

b hab ich auch oberhalb der start() funktion deklariert.
Dachte gelesen zu haben, dass variablen mit int deren nicht explizit ein wert zugewiesen wird, automatisch mit 0 initialisiert werden Wahrscheinlich ist das wohl eher Plattformabhängig.

habs mal jetzt abgeändert und in der start() funktion deklariert und es klappt , auch wenn ich den wert des Arrays auf 20 erhöhe, das klappt auch super, denk das wars. Was kleinigkeiten so ausmachen können. Da wir grad bei dem Thema sind. Hab versucht die Anzahl des Arrays sowie die anzahl der Schleife , als exern int festzulegen , damit ich nicht überall die Anzahl ändern muss und bekomm nen Fehler beim Array mit "invalid index value" , ob da jetzt ne zahl steht oder ne variable die nen Integer liefert wäre doch egal ?!?


Code:
extern    int         Kerzenanzahl               =  20;//Anzahl der Berechnungskerzen 
 
int      maxValueIdx,minValueIdx,_Tief,_Hoch,TVK1_Done,TVK2_Done,TradeperBar = 0,B,FontSize = 8,BarCount,SL_Check =0;           
double   R_S_1[Kerzenanzahl],Stop,pips,TickSize;
string   FontStyle ,Wert2,Wert1,Wert3;                                                                                                          
datetime now;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---

    TickSize       = MarketInfo(Symbol(),MODE_TICKSIZE);
    Wert1         = "#NAS100_M6";   
    Wert2         = "#Germany30";
    Wert3         = "#US30";
    
    if ( Symbol() == "AUDUSD" || Symbol() == "GBPUSD" || Symbol() == "USDCAD"  ||Symbol() == "EURUSD" || Symbol() ==  "USDJPY" || Symbol()== "EURJPY") 
    {  
     pips = Point*10;
     
    }      
    if(Symbol() == Wert2)
      {
        pips = Point*100;
        LotSize = LotSize*10;  
      }   

//---
   return(INIT_SUCCEEDED);
  }

int start()
{   
                                         
int i=0;
double indi ;
if(BarCount != Bars)
  {
   BarCount = Bars;
   
       for( int b =0 ;b<20;b++)
       {       indi = iRSI(NULL,0,R_S_1_Period,PRICE_CLOSE,i);
               if (indi > 0) 
               {
               
                  R_S_1[i] = indi;                  
                     i++;
         
               }                   
       }      
 
}
  #4 (permalink)  
Alt 01.07.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
extern    int         Kerzenanzahl               =  20;//Anzahl der Berechnungskerzen 
 
int      maxValueIdx,minValueIdx,_Tief,_Hoch,TVK1_Done,TVK2_Done,TradeperBar = 0,B,FontSize = 8,BarCount,SL_Check =0;           
double   R_S_1[Kerzenanzahl],Stop,pips,TickSize;
string   FontStyle ,Wert2,Wert1,Wert3;                                                                                                          
datetime now;
Nein, das geht so nicht. Da mußt Du im nachherein das Array resizen.

Code:
extern    int         Kerzenanzahl               =  20;//Anzahl der Berechnungskerzen 
 
int      maxValueIdx,minValueIdx,_Tief,_Hoch,TVK1_Done,TVK2_Done,TradeperBar = 0,B,FontSize = 8,BarCount,SL_Check =0;           
double   R_S_1[],Stop,pips,TickSize;
string   FontStyle ,Wert2,Wert1,Wert3;                                                                                                          
datetime now;

int OnInit() {
   ArrayResize(R_S_1, Kerzenanzahl);
   ...
}
Dass die int-Variable automatisch mit 0 initialisiert! wird ist richtig, nur wenn die nicht in der Funktion int start() reinitialisiert wird - wieder auf 0 - dann resultieren nicht verifizierbare Ergebnisse. Also immer vorher auf den Startwert setzen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 14.07.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

danke für die Hilfe, sorry war etwas eingespannt konnt ned vorher antworten

LG
Thema geschlossen

Lesezeichen

Stichworte
array, array out of range, mql4, programmierung, programmierung metatrader, rsi, rsi array, rsi werte

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 07: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.
-----------------------------------------------------------------------------------------------------------------------------