bekomme Seltsame RSI Werte herausgegeben...

 
double RSI[];
int Case =15;
i = 6010;

Switch (Case):
{                                            
case 15:                {                 ArrayResize(RSI,3); int RSI_Handle =iRSI(my_symbol,my_timeframe,inp_RSIperiod,PRICE_CLOSE);
                                          if(RSI_Handle<0){Print("The creation of iRSI has failed: Runtime error =",GetLastError());}
                                          CopyBuffer(RSI_Handle,0,i,3,RSI);
                                          RSI[2]=NormalizeDouble(RSI[2],2);RSI[1]=NormalizeDouble(RSI[1],2);
                                          targetvalue =RSI[2]-RSI[1]/*iRSI(my_symbol,my_timeframe,10,PRICE_CLOSE)*/; }
                                          break; }
                                                  //<- brackets mussten sein, damit RSI_Handle initialisiert wird, aber auch wenn ich den handle direkt im Buffer initialisiere macht es 
                                                  //keinen unterschied : CopyBuffer(RSI_Handle,0,i,3,RSI);} (nur dass ich dann keinen error wegen der Brackets angezeigt bekomme

iteriere über ein array gefüllt mit kursdaten, wobei i = 6010 bars zurück in der vergangenheit entspricht. Soweit ich weiß sollte der RSI Value eigentlich doch zwischen 0 und 100 und etwas grober sein (ein prozentwert eben) oder liege ich Falsch?

bekomme folgende Werte raus:

// ohne Normalize double
RSI[1] = 1.2277367095222180E-311
RSI[2] = 1.1857575500189917E-322
RSI[2]-RSI[1] = -1.2277367095103604E-311
// mit Normalize double (bringt auch leider nichts)
RSI[1] = 0
RSI[2] = 0
RSI[2]-RSI[1] = 0
 

Ist schon wieder verstümmelter code = aus dem Zusammenhang gerissen.

Falls du das in der OnTick() eingebaut hast: handle erzeugen gehört hier nicht hin. Das gehort in die OnInit().

Das ArraySetAsSeries(RSI,true) fehlt hier auch! Und ArrayResize() ist vollkommen Überflüssig!

Bist wohl ein weiteres Opfer vom Herrn R.B. mit seinem dubiosen YT-Kanal, dem das Handwerk gelegt gehört!

Und lass doch bitte die original Daten vom RSI in Ruh!

 
Otto Pauser:

Ist schon wieder verstümmelter code = aus dem Zusammenhang gerissen.

Falls du das in der OnTick() eingebaut hast: handle erzeugen gehört hier nicht hin. Das gehort in die OnInit().

Das ArraySetAsSeries(RSI,true) fehlt hier auch! Und ArrayResize() ist vollkommen Überflüssig!

Bist wohl ein weiteres Opfer vom Herrn R.B. mit seinem dubiosen YT-Kanal, dem das Handwerk gelegt gehört!

Und lass doch bitte die original Daten vom RSI in Ruh!

ArraySetAsSeries(RSI,true) hatte ich tatsächlich vergessen :) Bin ziemlich eingerostet seit ich mich fast nurnoch mit machine learning befasse... und der code sitzt leider bereits in der OnInit() OnInit, daran kann es nicht liegen. YT-tutorials sind teilweise echt schrott größtenteils, aber ich verstehe nicht ganz was mit RSI original Daten gemeint ist ( "Und lass doch bitte die original Daten vom RSI in Ruh!")... muss ich sie noch irgendwie konvertieren?

 
//+------------------------------------------------------------------+
//|                                  Forum_Baye_Array_Init_fehlt.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
double rsi[];
double rsi2[];

void OnStart()
  {

   ArrayResize(rsi,20);
   ArrayResize(rsi2,20);
   
   ArrayFill(rsi2,0,20,0);
   
   for (int idx=0; idx < 10; idx++)
     {
       Print(rsi[idx]);
       
     }
     
     for (int idx=0; idx < 10; idx++)
     {
       Print(rsi2[idx]);
       
     }
  }
//+------------------------------------------------------------------+
        07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 2.747131562348284e+271
EQ      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 2.312276629101618e-319
QD      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
QS      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 8.455280662327365e-307
EM      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 1.112610266547175e-306
FG      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 2.419107905071504e-312
GM      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
GJ      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 2.072210131787356e-317
OD      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 9.881312916824931e-324
CN      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 9.881312916824931e-324
QE      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) Array mit Initialisiereung
QL      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
CD      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
EL      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
GD      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
IL      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
KE      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
MM      0       07:11:06.702    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
PE      0       07:11:06.703    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
RM      0       07:11:06.703    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
DE      0       07:11:06.703    Forum_Baye_Array_Init_fehlt (AUDJPY,H1) 0.0
 

Ups , hab doch glatt den Text vergessen.

Ich denke das Skript erklärt die "seltsamen" Werte.

Gehört zu den Grundlagen

 
@Christian Wie komme ich denn auf die richtigen werte  ( 0-100)?
 
Ich vermute das CopyBuffer schlägt fehl. Du prüfst den Returnwert nicht. Bei 6010 Kerzen kann es sein, dass der RSI Buffer gar nicht genug Werte vorhält. Immer mit CopyBuffer(handle,bufnum,shift,amount,buffer)==amount prüfen.
 
lippmaje:
Ich vermute das CopyBuffer schlägt fehl. Du prüfst den Returnwert nicht. Bei 6010 Kerzen kann es sein, dass der RSI Buffer gar nicht genug Werte vorhält. Immer mit CopyBuffer(handle,bufnum,shift,amount,buffer)==amount prüfen.

Stimmt,was kann man da machen?

spontan fällt mir nur batchweise drüber zu iterieren ein: sprich nur die benötigten in ein lokales Array einsetzen, welches nach dem es seinen Zweck erfüllt verfällt,




Das Ding ist nur:  ich iteriere über alle daten im OnInit (um ein CSV aus den daten zu shreiben) und bekomme somit leider error 4806 zurück

ERR_INDICATOR_DATA_NOT_FOUND

4806

Angeforderte Daten nicht gefunden

EDIT: Okay... der Buffer will auch ohne iteration nicht, versuche das gleiche mal mit den datetimewerten
 
Bayne:
@Christian Wie komme ich denn auf die richtigen werte  ( 0-100)?

Wenn du das array nach dem ersten Resize nicht mit Werten füllst kann es passieren das du solche "Werte" siehst.

Warum ?

Weil das array beim erstellen nur in der Struktur angelegt wird. Es können alte Daten in dem Wertebereich sein.

Und ich gehe stark davon aus das du auf so einen Bereich zugegriffen hast .

Wenn es ein IndikatorBuffer werden soll brauchst du das nicht.

Die Werte 0-100 musst du selber hinkriegen.

 
Bayne:

Stimmt,was kann man da machen?

spontan fällt mir nur batchweise drüber zu iterieren ein: sprich nur die benötigten in ein lokales Array einsetzen, welches nach dem es seinen Zweck erfüllt verfällt,

Das Ding ist nur:  ich iteriere über alle daten im OnInit (um ein CSV aus den daten zu shreiben) und bekomme somit leider error 4806 zurück

ERR_INDICATOR_DATA_NOT_FOUND

4806

Angeforderte Daten nicht gefunden

Zunächst mal, wenn Du Daten nicht kriegst heißt das nicht, dass es sie nicht gibt. Es gibt sie nur momentan nicht. Deine Anfrage wird dann im Hintergrund bearbeitet, bis der Server die Daten rausrückt, oder auch nicht. Also später noch einmal nachfragen. Bei 6000 Kerzen würde ich aber auch erstmal nachschauen, ob die Charthistorie überhaupt ausreicht. Also Chart aufmachen, ganz an den Anfang springen mit Pos1 und versuchen nach links zu scrollen, ob der Server noch was rausgibt. Cursor links oder Bild-hoch Taste. Wenn die Historie vollständig geladen ist, den EA noch mal starten. Die Chart-Historie liegt dann lokal auf Deiner Festplatte vor, und aus dieser werden auch die RSI Werte berechnet.

 
lippmaje:

Zunächst mal, wenn Du Daten nicht kriegst heißt das nicht, dass es sie nicht gibt. Es gibt sie nur momentan nicht. Deine Anfrage wird dann im Hintergrund bearbeitet, bis der Server die Daten rausrückt, oder auch nicht. Also später noch einmal nachfragen. Bei 6000 Kerzen würde ich aber auch erstmal nachschauen, ob die Charthistorie überhaupt ausreicht. Also Chart aufmachen, ganz an den Anfang springen mit Pos1 und versuchen nach links zu scrollen, ob der Server noch was rausgibt. Cursor links oder Bild-hoch Taste. Wenn die Historie vollständig geladen ist, den EA noch mal starten.

iBars gibt mir 6129 zurück, jeder Close liegt fehlerfrei vor (auch im CSV) also gehe ich davon aus dass ich das gescrolle vorerst sparen kann.

Aber kriege schon probleme wenn ich die vorletzten 3 Bars aufrufen will

                                          ArraySetAsSeries(RSI,true);
                                          int rsi_buf=CopyBuffer(RSI_Handle,0,1,3,RSI);
                                          if (rsi_buf<0){Print("CopyBufferMA1 error =",GetLastError()); DebugBreak();}
@Christian ich glaube wir reden wieder völlig aneinander vorbei ... es mehr geht darum die richtigen Werte zu bekommen, also die prozentwerte des RSI, aber danke für den hinweis mit dem nicht initialisierten array
Grund der Beschwerde: