Domande da un "manichino" - pagina 63

 
masharov:

L'expert advisor usa l'indicatore su un diverso timeframe. Sui test l'EA mostra dati errati dall'indicatore.

L'EA stesso funziona su M5, e l'indicatore su H4. Gli indicatori chiamati sullo stesso timeframe (M5) restituiscono i valori corretti.

I valori restituiti sono simili ai valori dell'indicatore, ma sono diversi dai valori reali che sono visibili quando l'indicatore è applicato alla finestra del grafico dei prezzi.

Qual è il problema?

Esempio di codice di chiamata dell'indicatore:

Possibili cause:

- la regola delle prime 14 barre non è rispettata: https://www.mql5.com/ru/articles/15 nell'indicatore;

- la correlazione tra il TF corrente e quello preimpostato non è rispettata (per esempio il numero di serie della barra con il valore richiesto dell'estremo su un altro TF sarà probabilmente diverso, che su quello preimpostato, e di conseguenza il massimo, il minimo, ecc. saranno diversi) - tutto questo dipende dalla realizzazione specifica dell'indicatore; si dovrebbe capire chiaramente cosa esattamente deve essere correlato e ricalcolare secondo la formula utilizzando la correlazione di diversi periodi;

- forse, i vecchi valori dell'indicatore dal tick precedente rimangono nel buffer, e può essere necessario reinizializzare il buffer con valori vuoti: ArrayInitialize(array,EMPTY_VALUE).

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
x100intraday:

Possibili cause:

- la regola delle prime 14 barre non è rispettata: https://www.mql5.com/ru/articles/15 nell'indicatore;

- Non si osserva la correlazione tra il TF corrente e quello preimpostato (per esempio il numero di serie della barra con il valore richiesto di un estremo in un altro TF deve essere diverso, rispetto a quello preimpostato, e di conseguenza il massimo, il minimo, ecc. saranno diversi) - tutto ciò dipende dalla particolare implementazione dell'indicatore;

- forse, i vecchi valori del tick precedente rimangono nell'indicatore, e può essere necessario reinizializzare il buffer con valori vuoti: ArrayInitialize(array,EMPTY_VALUE).

1. l'indicatore è disegnato su tutte le barre del grafico del prezzo.

2. Qui è tutto a posto.

3. non ha aiutato

 

Il riferimento dice che la data/ora può essere rappresentata così:

D'12:00:00'

Assegno un valore a una variabile di tipo datetime:

 datetime start = D'12:00:00'

Un avvertimento appare sulla compilazione:

Perché?

 
Urain:
Poiché non viene specificata alcuna data, viene specificata solo l'ora 12:00:00. La data si scrive con un punto, non con i due punti.

Il riferimento dice che:

Si può omettere la data (anno, mese, data) o l'ora (ore, minuti, secondi) o tutti insieme. La gamma di valori va dal 1° gennaio 1970 al 31 dicembre 3000.

Esempi:

D'2004.01.01 00:00'// Nuovo Anno
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12'//nuovo anno d'1980.07.19 12:00:00'
D'01.01.2004'//equivalente D'01.01.2004 00:00:00'
D'12:30:27' //equivalente a D'[data di compilazione] 12:30:27'
D''//equivalente a D'[data di compilazione] 00:00:00''

...

O sto fraintendendo?

 
masharov:

L'EA stesso gira su M5 e l'indicatore su H4. Gli indicatori chiamati sullo stesso timeframe (M5) restituiscono i valori corretti.

Continuo ad insistere sul secondo punto.

Tu stesso scrivi che sullo stesso TF vengono restituiti i valori corretti. Su quelli diversi, ovviamente, verranno restituiti valori che non sono previsti per la TF corrente.

masharov:

I valori restituiti sono simili ai valori dell'indicatore, ma sono diversi dai valori reali che sono visibili quando l'indicatore è collegato a una finestra del grafico dei prezzi.

Valori simili probabilmente non provengono dal soffitto, ma da uno dei TF non uguale a M5. Se l'attuale TF è H4, allora i valori provengono probabilmente da esso, mentre i valori da M5 sono attesi. Se rimodelliamo il codice da M5 a H4, molto probabilmente quando si trovano valori su H4 sarà possibile catturare valori corretti esattamente per H4 (per altri TF sembreranno errati).

Se l'indicatore è in grado di restituire i valori corretti secondo l'uno o l'altro TF, ma non è in grado, per esempio, su M5, di visualizzare ciò che fa su H4, allora cosa possiamo aspettarci dai valori restituiti quando lavoriamo insieme all'Expert Advisor che non è sullo stesso TF?

 
tol64:

Il riferimento dice che:

Si può omettere la data (anno, mese, data) o l'ora (ore, minuti, secondi) o tutti insieme. La gamma di valori va dal 1° gennaio 1970 al 31 dicembre 3000.

Esempi:

D'2004.01.01 00:00'// Capodanno
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12'//nuovo anno d'1980.07.19 12:00:00'
D'01.01.2004'//equivalente D'01.01.2004 00:00:00'
D'12:30:27' //equivalente a D'[data di compilazione] 12:30:27'
D''//equivalente a D'[data di compilazione] 00:00:00''

...

O sto fraintendendo?

Sì sì, hai capito bene, non stavo prestando attenzione nella fretta.

Apparentemente era così in origine e poi è stato cancellato e il certificato non è stato corretto.

Comunque la domanda rimane, è un'imprecisione dell'aiuto o un bug?

 

Urain:

...

Comunque la domanda rimane, è un'imprecisione nella guida o un bug?

Un esempio di script:

void Set_Start_And_End_TradeSession()
{
 datetime start = D'00:45:00';
 datetime array[];
 int s = 0, e = 0, i = 0;
 long chart_ID = ChartID();
 long count_bars = Bars(Symbol(),0);
 
 CopyTime(Symbol(),0,0,(int)count_bars,array);
 
 ArraySetAsSeries(array,true);
 
 for(s = 0; s < count_bars; s++)
   {
    ObjectCreate(chart_ID,"start_date",OBJ_VLINE,0,array[s],0); ChartRedraw();
    Sleep(50);
    if(array[s]==start) { Comment("Ok!!!"); break; }
    if(i==1441) { Comment("Error!!!"); break; }
    i++;
   }
}
È così che funziona. Non mi piacciono gli avvertimenti dopo la compilazione)). Forse uno degli sviluppatori commenterà.
 
Urain:

In ogni caso la domanda rimane, è un'imprecisione nella guida o un bug?

Gliavvertimenti del compilatore non significano ancora che c'è un errore. Stampatelo: tutto si riflette secondo la Guida.
 
masharov:

L'expert advisor usa l'indicatore su un diverso timeframe. Sui test l'EA mostra dati errati dall'indicatore.

L'EA stesso funziona su M5, e l'indicatore su H4. Gli indicatori chiamati sullo stesso timeframe (M5) restituiscono i valori corretti.

I valori restituiti sono simili ai valori dell'indicatore, ma sono diversi dai valori reali che sono visibili quando l'indicatore è applicato alla finestra del grafico dei prezzi.

Qual è il problema?

Esempio di codice di chiamata dell'indicatore:

Il flag AS_SERIES non può essere impostato negli array multidimensionali e negli array statici.

Prova

void OnNewBar() // моя функция
{
 double wave[];
 ArraySetAsSeries(wave, true);
 CopyBuffer(W_handle,0,(int)0,2,wave);
 if (wave[1] > 0) Buy(); 
}

o come segue

void OnNewBar() // моя функция
{
 double wave[1];
 if(CopyBuffer(W_handle,0,(int)1,1,wave)<1) return;
 if (wave[0] > 0) Buy(); 
}
 
  string Symb="EURUSD";
  for(i=0;i<OrdersTotal()+PositionsTotal();i++)
     {
      if(Symb==PositionGetSymbol(i)) Orders_Total++;
     }
     Alert(Orders_Total);
Potreste dirmi perché l'avviso mostra Orders_Total=1, quando in realtà c'è una posizione e un ordine, cioè in teoria dovrebbe mostrare 2, non 1.
Motivazione: