Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1448

 
Alexey Viktorov:

Beh, grazie... Almeno mi sono visto sei anni fa... Ero proprio come te adesso. Non ci ho pensato due volte a dare consigli nel modo sbagliato.

Per quanto riguarda il modello: se il modello ha un indicatore, ma nessun EA, allora il modello sarà caricato senza l'EA... E se il modello ha un EA? Sei sicuro che l'EA, caricato sul modello, non applicherà il modello e quindi fisserà e bloccherà il terminale?

non lo fa - tutto funziona bene!

 
SanAlex:

Non ho problemi - tutto funziona bene!

Non essere pigro come me. Fai un video di queste manipolazioni :-)))

 
Vitaly Muzichenko:

Ora sono arrivato al debugging del costrutto "SmoothedMAOnBuffer()" in mt4.

Cosa c'è che non va, non capisco affatto.

L'ho scritto un centinaio di volte: rimuovi la funzione dal ciclo.

Invece di questa merda:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);
   for(i = 0; i < counter - a; i++) {
     // buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i); // Так индикатор работает
      SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff); Совсем не работает, но и ошибок в журнале нет
      buf_3[i] = buff[0]; ???
   }
   for(i = counter - a; i > 0; i--) {
      Array_2[i] = Array_2[i + 1];

Scrivi così:

ArrayResize(buff, counter);
   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val_1) - ma_1(i, a);

if(SmoothedMAOnBuffer(counter, prev_calculated, i, period, Array_1, buff)==0)
   return 0;

for(i = counter - a; i > 0; i--) {
   Array_2[i] = Array_2[i + 1];

Te lo dico io - la chiamata di questa funzione è un ciclo completo di lisciatura dei dati in Array. I dati smussati di questo array saranno in buff array - basta prendere ulteriormente i dati smussati di cui avete bisogno da esso.

 
Alexey Viktorov:

Non essere pigro come me. Fai un video di queste manipolazioni :-)))

Ecco un peccato - che non ho visitato il tuo profilo prima. Hai dei codici così belli lì. Questo mi piace molto.https://www.mql5.com/ru/code/16396

EURGBPH1

TralingLine
TralingLine
  • www.mql5.com
Виртуальный Stop Loss или Trailing Stop.
 
Artyom Trishkin:

Te l'ho detto cento volte: rimuovi la funzione dal ciclo.

Invece di questa merda:

scrivetelo così:

Te lo dico io - la chiamata di questa funzione è un ciclo completo di lisciatura dei dati in Array. I dati smussati di questo array saranno in buff array - basta prendere ulteriormente i dati smussati di cui avete bisogno da esso.

Grazie, funziona.

SmoothedMAOnBuffer(rates_total, prev_calculated, count, period, Array_1, buf_3);

Non capisco come funziona, cercherò di capirlo ora.

 
Artyom Trishkin:

Te l'ho detto cento volte: rimuovi la funzione dal ciclo.

Invece di questa merda:

scrivetelo così:

Te lo dico io - la chiamata di questa funzione è un ciclo completo di lisciatura dei dati in Array. I dati smussati di questo array saranno in buff array - basta andare oltre e prendere i dati smussati di cui avete bisogno da esso.

Non sono riuscito ad applicarlo tutto in nessun modo, ho passato più di 4 ore.

Al primo avvio viene visualizzato correttamente, poi nessun refresh - si blocca, con quello standard funziona bene.

   double Array_1[];
   double Array_2[];
   int i=0;
   int period = (int)MathFloor(MathSqrt(a));
   int val = (int)MathFloor(a / 1.9);
   int bars=rates_total;
   int counter = bars - prev_calculated + a + 1;
   if(counter > bars)
      counter = bars;
   ArrayResize(Array_1, counter);
    ArraySetAsSeries(Array_1, true);
   ArrayResize(Array_2, counter);
    ArraySetAsSeries(Array_2, true);

   for(i = 0; i < counter; i++)
      Array_1[i] = 2.0 * ma_1(i, val) - ma_1(i, a);
  //  for(i = 0; i < counter - a; i++)
  //  buf_3[i] = iMAOnArray(Array_1, 0, period, 0, MODE_SMMA, i);
   SmoothedMAOnBuffer(rates_total, prev_calculated, prev_calculated, period, Array_1, buf_3); // Где-то здесь не правильно вписаны параметры

---

Cosa devo inserire?

In MT5 non mi mostra proprio nulla.

File:
test.mq4  13 kb
 
Vitaly Muzichenko:

Non ho potuto applicarlo tutto in nessun modo, ho passato più di 4 ore.

Al primo avvio viene visualizzato correttamente, poi nessun aggiornamento - si blocca, funziona bene con lo standard

---

Cosa devo inserire?

Non so cosa stia succedendo in MT5.

Puoi spiegare cosa vuoi ottenere come risultato?

Il tuo indicatore è costruito nel modo in cui hai bisogno di mostrare alla gente come non farlo :)

I buffer disegnati e calcolati sono tutti mescolati. Quelli calcolati dovrebbero essere gli ultimi della fila - non puoi mischiarli a caso, purtroppo.

Non funzionerà per un cinque perché la funzione ma_1() in un cinque restituirà un handle, non un valore MA.

Nella funzione SmoothedMAOnBuffer(), si passa prev_calculated invece dell'inizio dei dati significativi nell'array - per quale motivo? Dovete passarci almeno 0, e al massimo - un valore calcolato a seconda del periodo di calcolo dei dati MA memorizzati in Array_1 - beh, almeno il periodo

Nel blocco della scelta del colore da disegnare, hai un errore logico - sovrascrivi i buffer - metti un valore vuoto fuori dalle parentesi. Hai una condizione, e ciò che dovrebbe essere fatto in caso di verità è messo fuori parentesi. Cioè viene sempre eseguito. Questa è una conseguenza dell'abitudine di disporre le parentesi - quando la loro posizione non è chiaramente visibile.

Array_1 e Array_2 - perché non sono buffer calcolati?

Tutto sommato - ci sono molte domande.

Il valore della variabile a è strettamente impostato. Perché calcolare il valore della variabile val ad ogni tick ?

Crea due buffer calcolati per due variabili, calcolate con il periodo a e val a OnInit(). Da questi buffer e prendere i valori - funzionerà allora per entrambe le piattaforme.

 
Artyom Trishkin:

Riesci a esprimere a parole quello che vorresti fare alla fine?

Il tuo indicatore è costruito nel modo in cui hai bisogno di mostrare alla gente come non farlo :)

I buffer di disegno e di calcolo sono tutti mescolati. Quelli calcolati dovrebbero essere gli ultimi della fila - non puoi mischiarli a caso, purtroppo.

Non funzionerà per un cinque perché la funzione ma_1() in un cinque restituirà un handle, non un valore MA.

Nella funzione SmoothedMAOnBuffer(), si passa prev_calculated invece dell'inizio dei dati significativi nell'array - per quale motivo? È necessario passare lì minimo 0, e massimo - un valore calcolato a seconda del periodo di calcolo dei dati MA memorizzati in Array_1 - beh, almeno periodo

Nel blocco della scelta del colore da disegnare, hai un errore logico - sovrascrivi i buffer - metti un valore vuoto fuori dalle parentesi. Si controlla la condizione, ma ciò che dovrebbe essere fatto in caso di verità è messo fuori dalle parentesi. Cioè viene sempre eseguito. Questa è una conseguenza dell'abitudine di disporre le parentesi - quando la loro posizione non è chiaramente visibile.

Array_1 e Array_2 - perché non sono buffer calcolati?

Tutto sommato - ci sono molte domande.

Il valore della variabile a è strettamente impostato. Perché calcolare il valore della variabile val ad ogni tick ?

Crea due buffer calcolati per due variabili, calcolate con il periodo a e val a OnInit(). Da questi buffer e prendere i valori - funzionerà allora per entrambe le piattaforme.

Se avessi saputo la soluzione, non l'avrei scritto.

L'indicatore non è mio, non ho nemmeno guardato sotto iMAOnArray(), l'intero compito è solo quello di sostituire iMAOnArray() con qualcosa.

Posso avere un esempio funzionante di come dovrebbe essere?

Grazie!

P.S. Per mt5 le maniglie vanno bene
File:
max.mq5  14 kb
 
Vitaly Muzichenko:

Posso avere un esempio funzionante di come dovrebbe essere?

Un esempio funzionante di cosa? Un indicatore da quattro che funziona in cinque? Allora datemi un indicatore completamente funzionante da quattro.

O un esempio di come lavorare con la funzione SmoothedMAOnBuffer()?

 
Artyom Trishkin:

Un esempio funzionante di cosa? Un indicatore da quattro che funziona in cinque? Allora datemi un indicatore completamente funzionante da quattro.

O un esempio di come lavorare con la funzione SmoothedMAOnBuffer()?

Un esempio funzionante da mt4, con iMAOnArray standard si sta aggiornando, ma SmoothedMAOnBuffer alla prima esecuzione è ok, e poi nessun aggiornamento

Ho bisogno di un esempio di lavoro conSmoothedMAOnBuffer( )

File:
test.mq4  17 kb