Standard-Blinker außer Kraft setzen?!

 
Hallo!
Bitte beraten Sie mich zu dem folgenden Problem.
Hier ist der Code des Expert Advisors.
int handle; string filename="test_expert_log.csv"; int init() { handle= FileOpen(Dateiname,FILE_CSV|FILE_WRITE,';'); if(handle<1) { Print("Datei nicht gefunden, letzter Fehler ", GetLastError())); return(false); } return(0); } int start() { double test1,test2,test3;
int i; for (i=1;i<10;i++) { test1=iStochastic("GBPUSD",Period(),5,3,3,3,0,0,0,i); //test2=iStochastic("EURUSD",Period(),5,3,3,0,0,0,i); if (FileWrite (handle,TimeToStr(Time[i]),i,test1,test2)<=0) Print("Schreibfehler!"); } return(0); }


Der Expert Advisor läuft auf EURUSD mit einer schnellen Simulation auf den gebildeten Balken. Es liest die stochastischen Werte eines anderen Währungspaares und erstellt schließlich einen Bericht in der Form:

2006.10.22 22:00;1;76.79738562
2006.10.20 20:00;2;78.13504823
2006.10.20 16:00;3;78.65853659
2006.10.20 12:00;4;80.50139276
2006.10.20 08:00;5;80.25974026
2006.10.20 04:00;6;86.36363636
2006.10.20 00:00;7;86.96969697
2006.10.19 20:00;8;80
2006.10.19 16:00;9;53.76884422
2006.10.23 00:00;1;65.15151515
2006.10.22 22:00;2;74.83660131
2006.10.20 20:00;3;76.79738562 und 78.13504823 (siehe oben)
2006.10.20 16:00;4;78.13504823 und 78.65853659 (siehe oben); usw.
2006.10.20 12:00;5;78.65853659
2006.10.20 08:00;6;80.50139276
2006.10.20 04:00;7;80.25974026
2006.10.20 00:00;8;86.36363636
2006.10.19 20:00;9;86.96969697
2006.10.23 04:00;1;52.85714286
2006.10.23 00:00;2;65.15151515
2006.10.22 22:00;3;74.83660131
2006.10.20 20:00;4;76.79738562
2006.10.20 16:00;5;78.13504823
2006.10.20 12:00;6;78.65853659
2006.10.20 08:00;7;80.50139276
2006.10.20 04:00;8;80.25974026
2006.10.20 00:00;9;86.36363636
2006.10.23 08:00;1;21.83406114
2006.10.23 04:00;2;52.85714286
2006.10.23 00:00;3;65.15151515
2006.10.22 22:00;4;74.83660131
2006.10.20 20:00;5;76.79738562
2006.10.20 16:00;6;78.13504823
2006.10.20 12:00;7;78.65853659
2006.10.20 08:00;8;80.50139276
2006.10.20 04:00;9;80.25974026

Es ist leicht zu erkennen, dass die Indikatorwerte bei einem neuen Durchlauf auf demselben Balken unterschiedlich sind.
Ich verstehe, dass der praktische Nutzen dieses EA zweifelhaft ist :o), aber der Zweck war, das Problem zu zeigen. In der Praxis sieht es so aus: Im Terminal wird der Indikator korrekt angezeigt, aber wenn ich ihn über den Expert Advisor aufrufe, werden falsche Daten angezeigt. Nachdem wir alles, was keinen Einfluss auf den Indikator hat, herausgeschnitten haben, erhalten wir das folgende Ergebnis. Ich muss furchtbar dumm sein, aber ich kann meinen Fehler nicht finden.
Übrigens, wenn ich das Währungspaar auf das aktuelle ändere, ist alles in Ordnung.
Ich danke Ihnen im Voraus für Ihre Hilfe.

 
Deinit() wurde leicht geändert
//+------------------------------------------------------------------+
//|                                         TestSymbolStochastic.mq4 |
//|                                                           satori |
//|                             http://www.metaquotes.ru/forum/7790/ |
//+------------------------------------------------------------------+
#property copyright "satori"
#property link      "http://www.metaquotes.ru/forum/7790/"

int handle;
string filename="test_expert_log.csv";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   handle= FileOpen(filename,FILE_CSV|FILE_WRITE,';');
  if(handle<1)
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
double test1,test2,test3;
int i;

  for (i=1;i<10;i++)
      {
       test1=iStochastic("GBPUSD",Period(),5,3,3,0,0,0,i);
       //test2=iStochastic("EURUSD",Period(),5,3,3,0,0,0,i);

       if (FileWrite (handle,TimeToStr(Time[i]),i,test1,test2)<=0) Print("Ошибка записи!");
      }

//----
   return(0);
  }
//+------------------------------------------------------------------+



Bei mir funktioniert es (aber ich habe nicht die ganze Datei überprüft)

 
Shaitan... :о)
Natürlich ist das Problem nicht das Schließen der Datei, denn wie ich schon sagte, habe ich mit unterschiedlichen Werten des Indikators im Terminal und beim Aufruf aus dem Expert Advisor konfrontiert. Und dann habe ich die Ausgabe in eine Datei gezeichnet, um dieses "Phänomen" zu untersuchen.
Auf meinem anderen Computer hat das Ganze auch funktioniert. In der Zwischenzeit hat es jedoch nicht funktioniert.
Ich fand es ausreichend, ein weiteres Währungspaar hinzuzufügen...
   test1=iStochastic("GBPUSD",Period(),5,3,3,0,0,0,i); test2=iStochastic("EURGBP",Period(),5,3,3,0,0,0,i);


wie sich die Situation wiederholte
2006.10.22 22:00;1;74.83660131;19.04761905
2006.10.20 20:00;2;76.79738562;13.91304348
2006.10.20 16:00;3;78.13504823;25.26315789
2006.10.20 12:00;4;78.65853659;48.7804878
2006.10.20 08:00;5;80.50139276;81.57894737
2006.10.20 04:00;6;80.25974026;79.74683544
2006.10.20 00:00;7;86.36363636;74.66666667
2006.10.19 20:00;8;86.96969697;76.54320988
2006.10.19 16:00;9;80;79.22077922
2006.10.23 00:00;1;65.15151515;29.78723404
2006.10.22 22:00;2;74.83660131;19.67213115
2006.10.20 20:00;3;76.79738562;19.04761905
2006.10.20 16:00;4;78.13504823;13.91304348
2006.10.20 12:00;5;78.65853659;25.26315789
2006.10.20 08:00;6;80.50139276;48.7804878
2006.10.20 04:00;7;80.25974026;81.57894737
Es ist zu erkennen, dass das erste Paar unter den gegebenen Bedingungen (!) gut funktioniert, aber das zweite...
Was mich wundert, ist, dass das Problem nicht systematisch ist. Derselbe Code unter scheinbar ähnlichen Bedingungen führt zu unterschiedlichen Ergebnissen. Das Terminal ist überall 198. Getestet bei zwei verschiedenen Brokern. Eine davon ist MIG.
Vielleicht können mir die geschätzten Herren Entwickler sagen, wie ich dieses fiese Ding bekämpfen kann?

 
Wie ich herausgefunden habe, liegt das Problem nicht an der Stochastik und schon gar nicht an den Indikatoren. Das Problem ist, dass MT4 aus irgendeinem Grund nicht den aktuellen, sondern den vorherigen Balken "anpasst".
Wenn wir die folgende Stichprobe machen,
string time1,time2,time3; for (i=1;i<10;i++) { time1=TimeToStr(iTime("GBPUSD",Period(),i)); time2=TimeToStr(iTime("EURGBP",Period(),i));
      time3=TimeToStr(iTime("EURUSD",Period(),i)); if (FileWrite (handle,TimeToStr(Time[i]),i,time1,time2,time3)<=0) Print("Schreibfehler!"); }


Ich erhalte die folgende Meldung:

2006.10.22 22:00;1;2006.10.22 22:00;2006.10.20 20:00;2006.10.22 22:00
2006.10.20 20:00;2;2006.10.20 20:00;2006.10.20 16:00;2006.10.20 20:00
2006.10.20 16:00;3;2006.10.20 16:00;2006.10.20 12:00;2006.10.20 16:00
2006.10.20 12:00;4;2006.10.20 12:00;2006.10.20 08:00;2006.10.20 12:00
2006.10.20 08:00;5;2006.10.20 08:00;2006.10.20 04:00;2006.10.20 08:00
2006.10.20 04:00;6;2006.10.20 04:00;2006.10.20 00:00;2006.10.20 04:00
2006.10.20 00:00;7;2006.10.20 00:00;2006.10.19 20:00;2006.10.20 00:00
2006.10.19 20:00;8;2006.10.19 20:00;2006.10.19 16:00;2006.10.19 20:00
2006.10.19 16:00;9;2006.10.19 16:00;2006.10.19 12:00;2006.10.19 16:00
2006.10.23 00:00;1;2006.10.23 00:00;2006.10.23 00:00;2006.10.23 00:00
2006.10.22 22:00;2;2006.10.22 22:00;2006.10.22 22:00;2006.10.22 22:00
2006.10.20 20:00;3;2006.10.20 20:00;2006.10.20 20:00;2006.10.20 20:00
Von hier an ist es normal.
Manchmal erfolgt der Absturz bei einer Währung, manchmal bei zwei. Wir haben das System nicht durchschauen können. Entweder hängt es von der Computerleistung ab (obwohl ich es auf einem ziemlich schnellen Computer laufen ließ), oder es hängt von etwas anderem ab.
Tatsache ist jedoch, dass Tests unmöglich sind. Schon bei den ersten Zugriffen gibt MT falsche Daten aus.
Die Frage bleibt: Ist es ein Fehler oder eine Funktion. :о) Wenn es ein Fehler ist, wie kann ich ihn bekämpfen? Vielleicht hatte jemand schon einmal ein solches Problem?

 
Ohne zu sehr in die Tiefe zu gehen, gehe ich davon aus, dass mit Ihrer Geschichte etwas nicht stimmt (oder vielleicht hat es etwas mit der Preismodellierung zu tun), achten Sie auf die Zeit und die Indizes, die Sie anzeigen lassen
der erste Ausdruck zeigt, dass der Balken mit dem Index 1 zu Index 3 geworden ist, 2 wurde zu Index 4, außerdem scheint es, dass Sie den Expert Advisor auf H4 gestartet haben, und die Zeit 22:00 sagt Ihnen nichts
Ich würde wahrscheinlich gerne den Artikel über die Simulation im Tester noch einmal lesen, das würde wahrscheinlich alle "i "s aufzeigen.
viel Glück und vergiss nicht, hier über die Ergebnisse zu berichten ;)

P.S. Alternativ können Sie auch eine andere Version der Simulation ausprobieren und die Ergebnisse sehen, aus denen sich bereits einige Schlussfolgerungen ziehen lassen
 
Ganz so einfach ist es nicht. Der Verlauf ist in Ordnung, d. h. die angegebenen Balken sind vorhanden und scheinen in Ordnung zu sein. Nochmals, wie ich oben schrieb - der Test wurde auf zwei verschiedenen Terminals von zwei verschiedenen Brokern mit unterschiedlicher Geschichte (FIBO, MIG) durchgeführt.
Und dieses Bild ist auch bei anderen TFs (1H, 30M, 15M usw.) zu beobachten, und verschiedene Varianten der Preissimulation (alle drei) führen immer noch zu den genannten Fehlern.
Und die Vier-Uhr-Bar um 22.00 Uhr hat nichts Übernatürliches an sich - eine gewöhnliche "Sonntags"-Bar. Sie öffnet um 22:00 Uhr. Nicht alle Broker, wie z.B. Alpari, halten sich an die Vorgaben. ;о)
Das Problem war jedoch noch stärker lokalisiert. Es stellte sich heraus, dass dieser EA nicht bei allen Brokern Fehler produziert. Und zwar bei denjenigen Brokern, die "Sonntags"-Daten haben. Konkret funktioniert Alpari normal, aber FIBO und MIG haben Fehler. Und die Fehler treten nur bei der Betrachtung der "Sonntags"-Balken auf.
Ich glaube nicht, dass dies ein "Feature" ist. Es sieht eher wie ein Käfer aus. Zumindest, weil die Fehler nicht bei denselben Paaren auftreten. Sie kann zu einem Zeitpunkt bei einem Paar, zu einem anderen Zeitpunkt bei einem anderen Paar und zu einem dritten Zeitpunkt bei beiden auftreten.
Ich hoffe immer noch, die Aufmerksamkeit der Entwickler auf dieses Problem zu lenken und eine Antwort von ihnen zu bekommen: was ist dieses Problem und wie kann man es bekämpfen ;o) (Sag mir nicht: "arbeite mit Alpari" :o))

P.S. Auf jeden Fall danke an Profi_R für die Teilnahme, aber wie man sieht, helfen einfache Lösungen nicht, vielleicht muss ich tiefer gehen. :о)
 
Ich versuche gerade, in etwa das Gleiche herauszufinden. Indikator:

#property copyright "Copyright Quark"
#property link      ""

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color2 Red
#property indicator_minimum -1
#property indicator_maximum 1

// indicator parameters
extern int nPeriod = 9;
extern int nPeriod_1 = 6;

// indicator buffers
double dUsdChf, dUsdChfPrev;

double arrGroupBuffer[];
double arrGroupMaBuffer[];

int nExtCountedBars = 0;

////////////////////////
int init()
{
	string strIndicatorShortName = "Group(" + Symbol() + " " + nPeriod + ")";  
	IndicatorShortName(strIndicatorShortName);

	// drawing settings
	SetIndexStyle(0, DRAW_NONE);
	SetIndexShift(0, 0);
		
	SetIndexStyle(1, DRAW_LINE);
	SetIndexShift(1, 0);

	IndicatorDigits(4);
		
	// indicator buffers mapping
	SetIndexBuffer(0, arrGroupBuffer);
	SetIndexBuffer(1, arrGroupMaBuffer);

	return(0);
}
///////////////////////////
int start()
{
	if(Bars <= nPeriod) 
		return(0);
		
	nExtCountedBars = IndicatorCounted();
	if(nExtCountedBars < 0) 
		return(-1);

	// last counted bar will be recounted
//	if(nExtCountedBars > 0) 
//		nExtCountedBars--;
		
	int nPos = Bars - nExtCountedBars - 1;

	double dPr = 2.0 / (nPeriod + 1);
	
	while(nPos > 0)
	{
		if(!IsTesting())
		{
			dUsdChf = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos - 1);
			dUsdChfPrev = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos);
		}

		arrGroupBuffer[nPos - 1] = 0;
			
		if(dUsdChfPrev - dUsdChf > 0)
			arrGroupBuffer[nPos - 1] += 1;
		else if(dUsdChfPrev - dUsdChf < 0)
			arrGroupBuffer[nPos - 1] -= 1;

		if(nPeriod_1 == 1)
			arrGroupMaBuffer[nPos - 1] = arrGroupBuffer[nPos - 1];
		else 
		{
			dPr = 2.0 / (nPeriod_1 + 1);

			arrGroupMaBuffer[nPos - 1] = arrGroupBuffer[nPos - 1] * dPr + 
				arrGroupMaBuffer[nPos] * (1 - dPr);
		}
		
		nPos--;
	}

	return(0);
}



Es gibt wenig praktischen Nutzen dafür, da es sich nicht zum Testen der Historie eignet (die zweite Währung erzeugt fantastische Gewinne, wenn die Balken der beiden Historien nicht synchronisiert sind, darüber habe ich schon einmal geschrieben). Aber das ist nicht der Punkt.

Wie Sie aus dem Code ersehen können, hängt der Indikator nicht von der Währung ab, mit der er im Diagramm verbunden ist. Es funktioniert immer für USDCHF. Wir hängen den Indikator an zwei Charts an, in meinem Fall AUDUSD und EURUSD, aber ich nehme an, wir können ihn an jeden Chart anhängen. Wir lassen es ein paar Tage liegen. Und wir sehen, dass die Diagramme UNTERSCHIEDLICH sind. Derselbe Indikator. In Echtzeit. Derselbe MT. Ziehen Sie sie gewaltsam um (aushaken - aushaken) - sie werden gleich. Seit einiger Zeit.

Ich bin gerade dabei, die Spur zu verfolgen, und wenn ich etwas finde, werde ich es Sie wissen lassen. Das kann natürlich auch an mir liegen :)

 
Jetzt geht's los. Da es bei "meinem" Indikator den Anschein haben könnte, dass in der Logik etwas nicht stimmt, habe ich einen vereinfachten Indikator geschrieben, um die "Hilfswährung" zu testen.

Der Code (siehe unten) nimmt (unabhängig davon, an welches Fenster der Indikator angehängt ist) Daten von USDCHF, H1 und zeichnet eine Grafik a) Open, MA(Open, 6) und MA(Open, 6, manuell berechnet, ohne den Standardindikator aufzurufen).

Der Indikator wurde an EURUSD H1 und AUDUSD H1 angehängt. Nach 12 Stunden Arbeit sind die Unterschiede auf den Charts zu sehen (wohlgemerkt, die Daten stammen vom USDCHF und es sollte keine Unterschiede geben). Außerdem liegen die Unterschiede nicht in den MA, sondern genau in den Open-Linien (natürlich auch in den MA, aber das ist zweitrangig, weil Open).

Es gibt also einen Fehler bei der Verwendung von Daten aus einer anderen Währung. Liebe Entwickler?

#property copyright "Copyright Quark"
#property link      ""

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Aqua
#property indicator_color3 Red


// indicator parameters
extern int nPeriod = 6;

double arrOpen[];
double arrMa[];
double arrMyMa[];

int nExtCountedBars = 0;

double dUsdChf, dUsdChfPrev;

////////////////////////
int init()
{
	string strIndicatorShortName = "Test(" + Symbol() + " " + nPeriod + ")";  
	IndicatorShortName(strIndicatorShortName);

	// drawing settings
	SetIndexStyle(0, DRAW_LINE);
	SetIndexShift(0, 0);

	SetIndexStyle(1, DRAW_LINE);
	SetIndexShift(1, 0);

	SetIndexStyle(2, DRAW_LINE);
	SetIndexShift(2, 0);

	IndicatorDigits(4);
		
	// indicator buffers mapping
	SetIndexBuffer(0, arrOpen);
	SetIndexBuffer(1, arrMa);
	SetIndexBuffer(2, arrMyMa);
		
	return(0);
}
///////////////////////////
int start()
{
	if(Bars <= nPeriod) 
		return(0);
		
	nExtCountedBars = IndicatorCounted();
	if(nExtCountedBars < 0) 
		return(-1);

	int nPos = Bars - nExtCountedBars - 1;

	double dPr = 2.0 / (nPeriod + 1);
	
	while(nPos > 0)
	{
		dUsdChf = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos - 1);
		dUsdChfPrev = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos);

		arrOpen[nPos - 1] = iOpen("USDCHF", 0, nPos - 1);
		arrMa[nPos - 1] = dUsdChf;

		arrMyMa[nPos - 1] = arrOpen[nPos - 1] * dPr + 
				arrMyMa[nPos] * (1 - dPr);

		nPos--;
	}

	return(0);
}
 
Je weiter man in den Wald vordringt, desto dichter werden die Partisanen.
Erstens: Je größer die Geschichte, desto größer die Fehler.
Zweitens, hier ist der Code (bitte entschuldigen Sie die Ungeschicklichkeit des Codes auf der Stelle):
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
extern int       BarsCount=20;   //кол-во считаемых баров, если 0 - то все
extern string    Currency1="EURUSD";
extern string    Currency2="GBPUSD";
string Para;
int TF;
int handle,handle2;
int init()
  {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,Currency1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,Currency2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);

   string Para=Symbol();
   int TF=Period();
   handle= FileOpen("testfile.csv",FILE_CSV|FILE_WRITE,';');
   handle2= FileOpen("testfile2.csv",FILE_CSV|FILE_WRITE,';');
  if(handle<1 || handle2<1 )
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
   return(0);
  }
int deinit()
  {
   FileClose(handle);
   return(0);
  }
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   double test1,test2;
   datetime tt1,tt2;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       ExtMapBuffer1[i]=iTime(Currency1,Period(),i);
       Sleep(1000);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),i);
       ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
       tt1=Time[i]-ExtMapBuffer1[i];
       tt2=Time[i]-ExtMapBuffer2[i];
       if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) 
        {
      if (FileWrite (handle,
      i,TimeToStr(Time[i]),TimeToStr(ExtMapBuffer1[i]),TimeToStr(ExtMapBuffer2[i])
       )<=0) Print("нифига не пишет!!");
        }
        FileFlush(handle);
      if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) ||
           Time[i]!=iTime(Currency1,Period(),i) ||
           iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i)
           ) && i>0)
        {
         if (FileWrite (handle2,
         TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i))
       )<=0) Print("нифига не пишет!!");

        }
      }
   return(0);
  }


für die Währungspaare EURUSD und GBPUSD, bei der Ausführung für EURGBP auf 4H ergeben sich über 2000 Fehler
auf 15M - über 26500.
Und auf 15M beträgt die Verschiebung nicht nur einen Balken, sondern viel, viel mehr (über 100 (!) Balken)
Hier ist ein Stück Holz:
15.06.2006 1:45 16.06.2006 0:45 16.06.2006 0:00
15.06.2006 1:30 16.06.2006 0:30 15.06.2006 23:45
15.06.2006 1:15 16.06.2006 0:15 15.06.2006 23:30
15.06.2006 1:00 16.06.2006 0:00 15.06.2006 23:15
15.06.2006 0:45 15.06.2006 23:45 15.06.2006 23:00
15.06.2006 0:30 15.06.2006 23:30 15.06.2006 22:45
15.06.2006 0:15 15.06.2006 23:15 15.06.2006 22:30
15.06.2006 0:00 15.06.2006 23:00 15.06.2006 22:15
14.06.2006 23:45 15.06.2006 22:45 15.06.2006 22:00
14.06.2006 23:30 15.06.2006 22:30 15.06.2006 21:45
14.06.2006 23:15 15.06.2006 22:15 15.06.2006 21:30
14.06.2006 23:00 15.06.2006 22:00 15.06.2006 21:15
14.06.2006 22:45 15.06.2006 21:45 15.06.2006 21:00
14.06.2006 22:30 15.06.2006 21:30 15.06.2006 20:45
Dieses Log wurde vom Alpari-Server mit frischem Terminal und frischer Historie (vor dem 3.10.2005 auf 15M für alle drei Währungspaare) genommen.
Bei all diesen Untersuchungen geht es darum, von den Entwicklern eine verständliche Erklärung für dieses Phänomen zu erhalten.
Und was mich verwirrt, ist, dass ich seit etwa einer Woche nichts mehr von Ihnen, meine Herren, gehört habe.
Ich weiß nicht, wie ich Ihnen die Ernsthaftigkeit des Problems beweisen soll, damit Sie es beachten.
Die überschaubare Einfachheit der Situation und des Codes hält mich davon ab, über einen trivialen Fehler nachzudenken. Deshalb BITTE ICH DIE ENTWURFSTELLER, sich zu vergewissern:
Sehr geehrte Damen und Herren! Ich bitte Sie aufrichtig, diesem Thema Aufmerksamkeit zu schenken und zumindest einige Kommentare Ihrerseits abzugeben. Wenn es mein Fehler ist, denken Sie bitte nicht, dass es meine Schuld ist - sagen Sie mir wenigstens, wo ich danach suchen soll. Und in diesem Fall werde ich mich dafür entschuldigen. Wenn es sich um einen Fehler in MT4 handelt, dann sollten Sie die Zeit der Leute respektieren (nicht nur mich, meine ich), die diese kostbare Ressource aufwenden, um diese Situation zu finden und Ihnen mitzuteilen, was eigentlich nicht ihre direkte Aufgabe ist.
Mit Respekt und Hoffnung auf einen konstruktiven Dialog ... :о)

 
Siehst du, du hast dich selbst verwirrt :)
Als ich vor fast zwanzig Jahren in meinem Studentenwohnheim saß und meinen Tee mit einem Löffel im Kreis umrührte, stellte ich fest, dass das Bild durch den Trichter verzerrt wurde. Ich vergaß sofort die einfache Erklärung und sah sie als Bestätigung dafür, dass Wassermassen, die sich im Kreis bewegen, lokale Änderungen der Gravitation verursachen (und das erklärt das Verschwinden von Schiffen um das Bermuda-Dreieck) und folglich die Brechung von Wellen (Licht). Diese Finsternis dauerte ein paar Minuten, bevor ich merkte, dass es sich um eine banale Linse handelte, die durch aufgewirbeltes Wasser entstand :)

Ich habe Ihren Code leicht geändert:
//+------------------------------------------------------------------+
//|                                             RedrawIndicators.mq4 |
//|                                                           Satori |
//|                             http://www.metaquotes.ru/forum/7790/ |
//+------------------------------------------------------------------+
#property copyright "Satori"
#property link      "http://www.metaquotes.ru/forum/7790/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
extern int       BarsCount=20;   //кол-во считаемых баров, если 0 - то все
extern string    Currency1="EURUSD";
extern string    Currency2="GBPUSD";

int handle,handle2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,Currency1);

   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,Currency2);

   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);

   handle= FileOpen("TestFile.csv",FILE_CSV|FILE_WRITE,';');
   handle2= FileOpen("TestFile2.csv",FILE_CSV|FILE_WRITE,';');
  if(handle<1 || handle2<1 )
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
   else
   {
   FileWrite (handle,"index",Symbol(),Currency1,Currency2);
   FileWrite (handle2,"index",Symbol(),"  ",Currency1,"  ",Currency2);
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   double test1,test2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       ExtMapBuffer1[i]=iTime(Currency1,Period(),iBarShift(Currency1,Period(),TimeMain));
       //Sleep(1000);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),iBarShift(Currency2,Period(),TimeMain));
       ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
       tt1=Time[i]-ExtMapBuffer1[i];
       tt2=Time[i]-ExtMapBuffer2[i];
       if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) 
         {
         if (FileWrite (handle,
         i,TimeToStr(Time[i]),TimeToStr(ExtMapBuffer1[i]),TimeToStr(ExtMapBuffer2[i])
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) ||
           Time[i]!=iTime(Currency1,Period(),i) ||
           iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i)
           ) && i>0)
        {
         if (FileWrite (handle2,i,
         TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i))
       )<=0) Print("нифига не пишет!!");

        }
      }//----
   return(0);
  }
//+------------------------------------------------------------------+



 
Ihr Code hat gezeigt, dass bei verschiedenen Instrumenten die Balken mit demselben Index nicht immer denselben Zeitrahmen widerspiegeln.
Die Frage lautet also: Warum sind sie nicht identisch, warum gibt es Lücken in der Geschichte? Ich habe diesen Indikator auf GBPJPY H4 angewendet und die beiden resultierenden Dateien geöffnet.
Sie können sofort sehen, dass die Zeitmessung an zwei Stellen unterbrochen ist und die zweite Datei eine Reihe von "Fehlern" aufweist




PS Alpari zitiert.
Grund der Beschwerde: