Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 988

 
Aleksey Vyazmikin:

Ho già fatto un controllo per me stesso, ma questo controllo è per aggirare l'errore di questa funzione, l'aiuto non dice affatto della necessità di un controllo, il che significa che dovrebbe essere incorporato.

E poi, tu stai parlando di controllo dell'indicatore, mentre io sto usando Bars per calcolare il corretto tempo di inizio barra, come iBarShift è nella mia mente e solo adatto per il forex, dove non ci sono frequenti fallimenti con la storia a causa di compensazione e sessioni di trading non per tutto il giorno.

E dov'è la sua convalida? E perché introdurre qualche variabile se (quando si urta la storia o si cambia la storia) è sufficiente ricalcolare completamente l'indicatore. Questo è di solito fatto da "0" a "rates_total-1".

 
Vladimir Karputov:

E dov'è il tuo assegno? E perché dovresti inserire una variabile se hai solo bisogno di ricalcolare completamente l'indicatore (quando scambi la storia o cambi la storia). Di regola questo viene fatto da "0" a "rates_total-1".

Il mio problema non ha niente a che fare con l'indicatore o la paginazione della storia. Ecco un pezzo di codice

      datetime         StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
      datetime         StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

      int BarsGo=Bars(Symbol(),PERIOD_CURRENT,StartDt,StopDt);
      if(StartDt>StopDt)BarsGo=0;
      if(StartDt==StopDt)BarsGo=1;
      if (BarsGo>0)
        {
                //Полный расчет с вычислениями - копирование массивов цен и прочие тяжелые функции
        }
      else
        {
                //Упрощенный расчет с присвоением эмпирических значений переменным
        }
Il problema si verifica quando si apre una nuova barra in generale, quando la data di inizio della barra è maggiore dello spostamento di 1 barra dalla barra zero sul TF corrente.
 
Aleksey Vyazmikin:

Questa non è una difesa, ma un ostacolo al rilevamento di un errore nel codice!

Inoltre, non è affatto logico restituire il numero 2 se le date coincidono - qual è il ragionamento qui?

L'ora di inizio di una barra su FORTS può non coincidere e questo porta ad errori nei calcoli, per esempio, una barra si apre non alle 14:00 ma alle 14:05 - ne ho sofferto anch'io.

Forse il programmatore ha iniziato a lavorare nel modo in cui dice la documentazione ma poi ha deciso che sarebbe stato meglio restituire 'tra' piuttosto che 'da' e 'a' le date indicate, ma la documentazione non ha corretto questa descrizione. In realtà, non è molto necessario.

Non ho nemmeno una demo su FORTS. Non posso controllare.

 
Alexey Viktorov:

Forse originariamente lo hanno fatto come descritto nella documentazione, ma poi hanno deciso che sarebbe stato meglio restituire le date 'tra' invece delle date 'da' e 'a', ma la descrizione nella documentazione non è stata corretta. Ma non hanno corretto la descrizione.

Non ho nemmeno una demo su FORTS. Non posso controllare.

Come può essere inutile, non posso indovinare, e se è un errore, che sarà corretto più tardi, il codice non funzionerà più, e cercherò un errore per molto tempo... Ma Artem ha deciso che non è un errore e non ha scritto nulla in essence....

Sembra che sul conto demo di MQ la gente si colleghi a FORTS...

 
Aleksey Vyazmikin:

Come può non essere, non posso indovinare, e se è un errore, che sarà corretto più tardi, allora il codice non funzionerà più, e cercherò un errore per un tempo critico... Ma Artem ha deciso che non è un errore e non ha scritto nulla in essence....

Sembra che la gente si colleghi a FORTS su un conto demo da MQ...

Beh, se sei abbastanza attento ora e non sbagli l'ora di inizio e di fine, allora non c'è nulla da temere. Lasciateli governare.

 
Aleksey Vyazmikin:

Non ho problemi con l'indicatore o la paginazione della storia. Ecco un pezzo di codice

Il problema si verifica quando si apre una nuova barra in generale, quando la data di inizio della barra è più di 1 barra sfalsata dalla barra zero sul TF corrente.
datetime StartDt=iTime(Symbol(),PERIOD_CURRENT,Bars(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TF_iDeltaP,0),iTime(Symbol(),PERIOD_CURRENT,0))-1);
datetime StopDt=iTime(Symbol(),PERIOD_CURRENT,1); //Берем прошлый бар, что б не было расхождений между реалом и тестером при задержки на реальных данных

Non c'è alcun controllo su ciò che iTime(), Bars() restituiscono

Dovresti avere. Avresti dovuto davvero. Guardate nell'aiuto - cosa restituiscono iTime() e Bars()? E cosa c'è scritto nelle note?

 
Alexey Viktorov:

Beh, se sei abbastanza attento ora che non puoi sbagliare l'ora di inizio e l'ora di fine, non c'è niente di cui aver paura. Lasciateli governare.

Semplicemente non mi piace sedermi e aspettare passivamente, e mi è stato proibito di chiedere agli sviluppatori specificamente su questo - la domanda era originariamente per loro.

 
Artyom Trishkin:

Non ci sono controlli su ciò che iTime(), Bars() restituiscono

Beh, dovresti. Dovresti davvero farlo. Guarda nella guida - cosa restituiscono iTime() e Bars()? E cosa c'è scritto nelle note?

È sufficiente fare questi controlli una volta nel codice, o dovrebbero essere fatti dopo/prima di ogni chiamata di funzione?

Che tipo di controlli si propone di fare, per l'attuale bar/storia? Qual è il modo migliore per farlo?

 

Come posso trovare il motivo di questo messaggio?

2019.01.24 21:32:01.570 i-Regr4_05i (Si-3.19,M1)        indicator is too slow, 3011 ms. rewrite the indicator, please
 
Aleksey Vyazmikin:

È sufficiente fare questi controlli una volta nel codice, o dovrebbero essere fatti dopo/prima di ogni chiamata di funzione?

Che tipo di controlli proponi di fare, per la barra/storia attuale? Qual è il modo migliore per farlo?

Non sai come controllare il valore di ritorno per lo zero? E non sapete come uscire da OnCalculate() con un ritorno di zero? Avete mai provato a cercare informazioni su un sito web?

  1. Ottenere il valore richiesto dalla funzione
  2. Controlla se è zero
    1. Se è zero, allora ritorna 0;
    2. Se non è zero, allora al passo 3
  3. Lavorare con questo valore
Non avrei mai pensato di insegnare le basi della logica a un uomo con un rating superiore a 13 mila...