[MQL4] funkcja zmienia wartość ceny zamknięcia

O jezykach programowania w platformach i nie tylko.
monte
Bywalec
Bywalec
Posty: 11
Rejestracja: 16 lut 2015, 18:56

[MQL4] funkcja zmienia wartość ceny zamknięcia

Nieprzeczytany post autor: monte »

Witajcie,

mam następujący problem. Przepisuję wskaźnik RSI z MT4 na inny język programowania i chciałem sprawdzić to co przepisałem, odtwarzając po kolei wartości jakie są w trakcie przeliczania RSI.
Plik RSI z MT4 załączam do postu.

Fragment, którego działanie nie jestem w stanie zrozumieć i wytłumaczyć, to:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int    i,pos;
   double diff;
//---
   if(Bars<=InpRSIPeriod || InpRSIPeriod<2)
      return(0);

   for (int l = 0; l < rates_total; l++)	// MY OWN LOOP
   {
       Print("passed variable to func: time[" + l + "] = " + time[l] + ", close[" + l + "] = " + close[l]);
       Print("Global variable: Time[" + l + "] = " + Time[l] + ", Close[" + l + "] = " + Close[l]);

       // w powyższych printach wszystko jest OK, wartości cen zamknięcia dla zmiennej predefiniowanej Close[] i przekazanej do funkcji close[] jest taka sama
   }

//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtRSIBuffer,false);
   ArraySetAsSeries(ExtPosBuffer,false);
   ArraySetAsSeries(ExtNegBuffer,false);
   ArraySetAsSeries(close,false);

   for (int l = 0; l < rates_total; l++)	// MY OWN LOOP
   {
       // poniżej tablica close[] przekazana do funkcji. Jej wartości RÓŻNIĄ SIĘ od wartości z wcześniejszego wypisania, czyli od wartości tablicy predefiniowanej Close[]

       Print("passed variable to func: time[" + l + "] = " + time[l] + ", close[" + l + "] = " + close[l]);
       // poniżej tablica Close[] predefiniowana
       Print("Global variable: Time[" + l + "] = " + Time[l] + ", Close[" + l + "] = " + Close[l]);
   }

//--- preliminary calculations
Rozumiem, że pomiędzy printami, tam gdzie się zmieniają wartości funkcji, jest wołana funkcja : ArraySetAsSeries(close,false);
Jednakże, czy ona zmienia wartości tablicy? Według mnie - nie powinna. Jeśli jestem w błędzie, to proszę, poprawcie mnie. Jeśli mam rację to proszę, wytłumaczcie skąd ta zmiana wartości.

Jest to dla mnie bardzo ważne, bo przepisałem sobie wskaźnik na inny język i chciałem go przetestować tymi samymi wartościami, ale niestety wartości RSI w MT4 zmieniają się w magiczny sposób..

Pozdrowienia,
monte
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

ODPOWIEDZ