Standard-Blinker außer Kraft setzen?! - Seite 3

 
Rosh, was ich versuche herauszufinden, ist, ob der Fehler auftritt, weil der USDCHF-Balken später beginnt. Um dies zu verfolgen, habe ich den MA entfernt (er ist nur im Weg) und zusätzlich Close[1] und Open[1] eingeführt. Das bedeutet, dass Open[1] immer korrekt sein wird, und wenn dies das Problem ist, wird die Diskrepanz in Open[0] sein und Open[1] nicht. Jetzt prüfen. Was habe ich verpasst?
 
Nun, ich habe 2 Bilder angehängt, die zeigen, dass, wenn ein neuer Balken auf GBPJPY erscheint, Sie sich auf alte, unveränderte USDCHF-Chartdaten beziehen, und Ihr Algorithmus daher falsch berechnet. Es wird nur in einem Fall richtig gezählt - wenn Sie es auf die einheimische "Karte" setzen - aber das Ziel ist das Gegenteil.
 
Ich stimme zu. Aber nur, wenn der Test mit Open[1] zeigt, dass es keine Fehler gibt. In diesem Fall werde ich sicher sein, dass es keinen Fehler in MT gibt. Es gibt eine gewisse... Untertreibung, sozusagen.

Außerdem besteht die Herausforderung darin, einen Weg zur Umgehung dieser Beschränkung zu finden. Sagen wir, verbieten Sie das Neuzeichnen des EURUSD-Indikators, bis die USDCHF-Daten eintreffen. Jetzt teste ich die folgende Variante

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0)))



Aber es hängt alles davon ab, wie MT IndicatorCounted berechnet. Wenn durch die Ankunftszeit des Ticks - wird es nicht funktionieren, wenn durch die Tatsache, dass der Balken neu gezeichnet wird - wird es funktionieren. Schauen wir mal.

 
Hier ist es jetzt 11:56 Uhr MSK oder 9:56 Uhr Serverzeit.
Open[1] EURUSD H1 ist 1,2755
Open[1] USDCHF H1 ist 1,2443

Ein neuer einstündiger Balken erscheint beim EUR, beim Franc hat sich noch nichts geändert. Was wird Ihr Algorithmus tun?
 
Ich stimme zu. Aber nur, wenn тестирование mit Open[1] zeigt, dass kein Fehler auftritt. In diesem Fall werde ich sicher sein, dass es keinen Fehler in MT gibt. Es gibt eine gewisse... Zurückhaltung oder so etwas.

Außerdem besteht die Herausforderung darin, einen Weg zur Umgehung dieser Beschränkung zu finden. Sagen wir, wir verbieten das Neuzeichnen des EURUSD-Indikators, bis die USDCHF-Daten eintreffen. Jetzt teste ich die folgende Variante

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0)))



Aber hier hängt alles davon ab, wie MT den IndicatorCounted berechnet. Wenn durch die Ankunftszeit des Ticks - wird es nicht funktionieren, wenn durch die Tatsache, dass der Balken neu gezeichnet wird - wird es funktionieren. Schauen wir mal.




Halt, halt. Hier können Sie schreiben:
Wie Sie aus dem Code ersehen können, hängt der Indikator nicht von der Währung ab, mit der er 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, Sie 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. Zwangsweise neu zeichnen (Trennen - Verbinden) - sie werden gleich. Seit einiger Zeit.

Wir sprechen also über Online-Arbeit, und jetzt sind wir zu einem Prüfer übergegangen. Dafür habe ich keine Zeit.
 
Es ist jetzt 11:56 Uhr MSK oder 9:56 Uhr Serverzeit. <br / translate="no"> Open[1] EURUSD H1 ist 1.2755
Eröffnet[1] USDCHF H1 ist 1.2443

Beim EUR erscheint ein neuer Stundenbalken, beim FRANK hat sich noch nichts geändert. Was wird Ihr Algorithmus tun?



Ja, Sie haben Recht. Sie müssen auf die Zeit des Taktes achten, nicht auf seine Nummer.
 
<br / translate="no"> Wir sprechen also über Online-Arbeit und sind jetzt zu einem Tester übergegangen. Dafür habe ich keine Zeit.


Kein Tester. Nur online.
 
gelöscht
 
Lieber Rosh, könnten Sie bitte erklären, wie die folgende Situation möglich ist?
Ich habe es in die zweite Datei der Liste der Balken ausgegeben, um die Dropdowns sehen zu können.

//+------------------------------------------------------------------+
//|                                             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=0;   //кол-во считаемых баров, если 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(),"index",Currency1,"index",Currency2);
   FileWrite (handle2,"index",Currency1,Currency2,Symbol());
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
   FileClose(handle2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   int test1,test2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   Print (Bars," ",iBars(Currency1,Period())," ",iBars(Currency2,Period()));
   Print (BarsCount);
   
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       test1=iBarShift(Currency1,Period(),TimeMain);
       test2=iBarShift(Currency2,Period(),TimeMain);
       
       ExtMapBuffer1[i]=iTime(Currency1,Period(),test1);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),test2);

       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]),iBarShift(Currency1,Period(),TimeMain),TimeToStr(ExtMapBuffer1[i]),iBarShift(Currency2,Period(),TimeMain),TimeToStr(ExtMapBuffer2[i])
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if (FileWrite (handle2,i,
         TimeToStr(iTime(Currency1,Period(),test1)),
         TimeToStr(iTime(Currency2,Period(),test2)),
         TimeToStr(Time[i])
          )<=0) Print("нифига не пишет!!");
        FileFlush(handle2);

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



Wir lassen es auf EURGBP 4H bei zwei anderen Brokern laufen, nicht bei Alpari (MIG, FIBO).
Das Bild ist für beide fast das gleiche, ich werde ein Beispiel für MIG zeigen.
Index EURGBP Index EURUSD Index GBPUSD
15 30.10.2006 0:00 16 29.10.2006 23:00 16 29.10.2006 23:00
46 23.10.2006 0:00 47 22.10.2006 23:00 47 22.10.2006 23:00
77 16.10.2006 0:00 78 15.10.2006 23:00 78 15.10.2006 23:00
108 09.10.2006 0:00 109 08.10.2006 23:00 109 08.10.2006 23:00
139 02.10.2006 0:00 139 02.10.2006 0:00 140 01.10.2006 23:00

Nehmen Sie zum Beispiel die Takte 46-47.
In der zweiten Datei:
45 23.10.2006 4:00 23.10.2006 4:00 23.10.2006 4:00
46 22.10.2006 23:00 22.10.2006 23:00 23.10.2006 0:00
47 22.10.2006 23:00 22.10.2006 23:00 22.10.2006 23:00
48 20.10.2006 20:00 20.10.2006 20:00 20.10.2006 20:00

Scheint in Ordnung zu sein... Aber hier ist das Problem - Bar 23.10.2006 00:00 ist in der Geschichte auf allen drei Währungen vorhanden! D.h. es ist auf dem Chart, es ist im Archiv der Zitate.
Sie scheint jedoch im Indikator nicht enthalten zu sein.
Und der letzte Trick: Wenn Sie versuchen, einen vertikalen Strich auf diesen Balken zu setzen, wird er zum nächsten Balken verschoben. :о) Ich habe versucht, sie mit einer vertikalen Linie zu markieren, aber das hat nicht funktioniert.



 
Könnten Sie daraus ein Bild machen? Ein Bildschirmfoto. Es ist schwer, die Spalten im Kopf zu ordnen.