Gli indicatori standard si sovrascrivono?! - pagina 3

 
Rosh, quello che sto cercando di capire è se l'errore si verifica perché la barra USDCHF inizia più tardi. Per tracciare questo, ho rimosso la MA (è solo d'intralcio), e ho introdotto in aggiunta Close[1] e Open[1]. Ciò significa che Open[1] sarà sempre corretto, e se questo è il problema, la discrepanza sarà in Open[0] e Open[1] no. Controllare ora. Cosa mi sono perso?
 
Bene, ho allegato 2 immagini, che mostrano che quando appare una nuova barra su GBPJPY ti riferisci ai vecchi dati invariati del grafico USDCHF, e quindi il tuo algoritmo calcola in modo errato. Conterà correttamente solo in un caso - se lo metti sul "grafico" nativo - ma l'obiettivo è il contrario.
 
Sono d'accordo. Ma solo se il test con Open[1] mostra che non ci sono errori. In questo caso sarò sicuro che sì, non c'è nessun bug in MT. C'è un certo... un eufemismo, per così dire.

Inoltre, la sfida è trovare un modo per aggirare la limitazione. Diciamo, vietare il ridisegno dell'indicatore EURUSD fino all'arrivo dei dati USDCHF. Ora sto testando la seguente variante

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



Ma tutto dipende da come MT calcola IndicatorCounted. Se per il tempo di arrivo delle zecche - non funzionerà, se per il fatto di ridisegnare la barra - funzionerà. Vediamo.

 
Qui è ora 11-56 MSK o 9-56 ora del server.
Open[1] EURUSD H1 è 1,2755
Open[1] USDCHF H1 è 1,2443

Una nuova barra di un'ora appare sull'EUR, nulla è ancora cambiato sul Franco. Cosa farà il vostro algoitmo?
 
Sono d'accordo. Ma solo se тестирование con Open[1] mostra che non si verifica alcun errore. In questo caso sarò sicuro che sì, non c'è nessun bug in MT. C'è un certo... reticenza o qualcosa del genere.

Inoltre, la sfida è trovare un modo per aggirare la limitazione. Diciamo, vietare il ridisegno dell'indicatore EURUSD fino all'arrivo dei dati USDCHF. Ora sto testando la seguente variante

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



Ma qui tutto dipende da come MT calcola l'IndicatorCounted. Se per il tempo di arrivo del tick - non funzionerà, se per il fatto di ridisegnare la barra - funzionerà. Vediamo.




Fermati, fermati. Qui è dove si scrive:
Come potete vedere dal codice, l'indicatore non dipende dalla valuta a cui è collegato. Funziona sempre per USDCHF. Colleghiamo l'indicatore a due grafici, nel mio caso AUDUSD e EURUSD, ma suppongo che tu possa collegarlo a qualsiasi grafico. Lo lasciamo per qualche giorno. E vediamo che i grafici sono DIVERSI. Lo stesso indicatore. In tempo reale. Lo stesso MT. Ridisegnare forzatamente (Disconnect - Connect) - diventano uguali. Per qualche tempo.

Quindi stiamo parlando di lavoro online, e ora siamo passati a un tester. Non ho tempo per questo.
 
L'ora è ora 11-56 MSK o 9-56 ora del server. <br / translate="no"> Aprire[1] EURUSD H1 è 1,2755
Aperto[1] USDCHF H1 è 1,2443

Una nuova barra oraria appare sull'EUR, nulla è ancora cambiato sul FRANK. Cosa farà il vostro algoitmo?



Sì, hai ragione. Dovremmo guardare l'ora del bar, non il suo numero.
 
<br / translate="no"> Quindi stiamo parlando di lavoro online e ora siamo passati a un tester. Non ho tempo per questo.


Nessun tester. Solo online.
 
cancellato
 
Caro Rosh, potresti spiegare come è possibile la seguente situazione.
L'ho emesso nel secondo file dell'elenco delle barre per poter vedere i dropdown.

//+------------------------------------------------------------------+
//|                                             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);
  }
//+------------------------------------------------------------------+



Lo eseguiamo su EURGBP 4H su altri due broker, non Alpari (MIG, FIBO).
L'immagine è quasi la stessa per entrambi, mostrerò un esempio su MIG.
indice EURGBP indice EURUSD indice 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

Prendiamo ad esempio le battute 46-47.
Nel secondo file:
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

Sembra essere ok... Ma ecco il problema - la barra 23.10.2006 00:00 è presente nella storia su tutte e tre le valute! Cioè è sul grafico, è nell'archivio delle citazioni.
Ma sembra essere assente dall'indicatore.
E l'ultimo trucco - se provate a mettere una linea verticale su questa barra si sposterà alla barra successiva. :о) Ho provato a segnarlo con una linea verticale ma non ha funzionato.



 
Ti dispiacerebbe farne una foto? Uno screenshot. È difficile organizzare le colonne nella tua mente.