Errori, bug, domande - pagina 2531

 
Aleksey Vyazmikin:

È un peccato che non abbiamo nemmeno osato partecipare ai test. L'argomento è interessante secondo me, poiché si scopre che processori diversi gestiscono in modo diverso compiti diversi, ma non ci sono ancora abbastanza statistiche.

Il mio processore di rarità è rimasto solo in mio possesso e in un museo, non interessa quasi a nessuno.

 
Aleksey Vyazmikin:

È un peccato che tu non abbia nemmeno osato partecipare ai test.

Voleva eseguire un test il primo giorno, ma il thread è cresciuto a diverse pagine, alcuni bug nella prima versione del codice di prova ... non ha letto oltre, i miei interessi

Penso che ho bisogno di un manuale chiaro (con immagini) e un minimo di pensiero su cosa fare per l'utente, poi l'attività dell'utente può apparire

 
Igor Makanu:

Volevo eseguire il test il primo giorno, ma il thread è cresciuto a diverse pagine, alcuni bug con la prima versione del codice di test... Non ho voluto leggere oltre, mi sono interessato ai miei interessi

Penso che ho bisogno di un manuale chiaro (con immagini) e un minimo di pensiero su cosa fare per l'utente, poi l'attività dell'utente può apparire

E il forum stesso è molto scomodo per una cosa del genere, abbiamo bisogno della possibilità per l'autore dell'argomento di modificare il primo post alla fine di ogni periodo, dove si trovano tutte le informazioni necessarie e rilevanti, piuttosto che cercare tra la massa dei messaggi. In questo formato, è solo un filo per il flubbing.

 

Ecco una domanda.

Ho bisogno di memorizzare un puntatore a un array di tipo double[] (solito, indicatore) in modo che possa essere referenziato all'interno del programma.

Gli sviluppatori standard suggeriscono o di passare un riferimento a questo array in tutta la gerarchia di funzioni, ingombrando i parametri di input dove non è assolutamente necessario, o di copiare l'intero array su se stesso adogni tick, e quindi utilizzare un riferimento al suo array interno, che può essere passato e ricordato e utilizzato all'interno della gerarchia di funzioni.

Entrambe le soluzioni mi sembrano molto brutte. Passare un riferimento attraverso l'intero albero delle chiamate è già brutto, e quando si considera che non sappiamo in quale punto potremmo aver bisogno di accedere all'array, diventa semplicemente molto stupido.

Copiare l'intera matrice ad ogni tick, quando c'è una sorgente, è anche un po' una mentalità e, soprattutto, fa perdere produttività.

Qualcuno ha incontrato questo problema? Come aggirare questa stupida limitazione?

Ricordo che una volta, credo,fxsaber ha suggerito una funzione di copia dell'indirizzo usando qualche azione sciamanica, ma non riesco a trovarla.

Chi può suggerire cosa?

 
Vict:

Il mio processore di rarità è solo in mio possesso e in un museo, non è interessante per nessuno.

È sempre interessante valutare i progressi.


Igor Makanu:

Volevo eseguire il test il primo giorno, ma il thread è cresciuto a diverse pagine, alcuni bug con la prima versione del codice di test... Non ho letto oltre e mi sono occupato dei miei interessi

Penso che ho bisogno di un manuale chiaro (con immagini) e un minimo di pensare cosa fare per l'utente, poi l'attività dell'utente può apparire

Non ci dovrebbero essere bug lì, gli altri funzionano bene. Ora c'è uno screenshot di come dovrebbe essere impostato il tester di strategia.

Non pensavo che sarebbe stato difficile impostare l'ottimizzatore... Quello che non è chiaro ora - lascia che ti dia un indizio.


Vittoria:

E il forum stesso è molto scomodo per qualcosa del genere, abbiamo bisogno della possibilità per l'autore del thread di modificare il primo post dopo qualsiasi periodo, dove si trovano tutte le informazioni necessarie e rilevanti, piuttosto che cercare tra le masse di post. In questo formato, è solo un filo per il flubbing.

Non abbiamo un altro forum, aggiorno regolarmente i risultati quando ci sono informazioni - non è così difficile da trovare.

 
Georgiy Merts:

Ecco una domanda.

Ho bisogno di memorizzare un puntatore a un array di tipo double[] (solito, indicatore) in modo che possa essere referenziato all'interno del programma.

Gli sviluppatori standard suggeriscono o di passare un riferimento a questo array in tutta la gerarchia di funzioni, ingombrando i parametri di input dove non è assolutamente necessario, o di copiare l'intero array su se stesso adogni tick, e quindi utilizzare un riferimento al suo array interno, che può essere passato e ricordato e utilizzato all'interno della gerarchia di funzioni.

Entrambe le soluzioni mi sembrano molto brutte. Passare un riferimento attraverso l'intero albero delle chiamate è già brutto, e quando si considera che non sappiamo in quale punto potremmo aver bisogno di accedere all'array, diventa semplicemente molto stupido.

Copiare l'intera matrice ad ogni tick, quando c'è una sorgente, è anche un po' una mentalità e, soprattutto, fa perdere produttività.

Qualcuno ha incontrato questo problema? Come aggirare questa stupida limitazione?

Ricordo che una volta, credo,fxsaber ha suggerito una funzione di copia dell'indirizzo usando qualche azione sciamanica, ma non riesco a trovarla.

Chi può suggerire cosa?

Se stiamo parlando di mql5, potremmo avvolgere l'indicatore in una classe e, se necessario, tirarlo, e in quella classe organizziamo la copia e la memorizzazione dei dati necessari all'ngbin necessario e il controllo del suo singolo aggiornamento ad ogni tick. Io lo faccio in questo modo.
 
Vladimir Simakov:
Se stiamo parlando di mql5, allora, in alternativa, trasformiamo l'indicatore in una classe e, se necessario, lo recuperiamo e lo usiamo per memorizzare e copiare i dati necessari all'ngbin necessario e controllare il suo singolo aggiornamento ad ogni tick. Io lo faccio in questo modo.

È quello che faccio di solito io stesso...

Ma non funziona con i buffer degli indicatori. O mi sono perso qualcosa e si può fare in qualche modo?

 
Georgiy Merts:

Ma con i buffer indicatori, l'involucro non va via.

L'ha sempre fatto.
 
Georgiy Merts:

Ma con i buffer indicatori, il wrapping non passa. O mi sono perso qualcosa, si può fare in qualche modo?

tutto funziona, ma gli array che saranno buffer indicatori dovrebbero essere descritti con il modificatore pubblico

Ho creato un indicatore HMA per MQL4 - 4 indicatori in una sottofinestra:

CHMA *hma[4];
int OnInit()
  {
//--- indicator buffers mapping
   int i=0;
   hma[0] = new CHMA(4,PeriodInd1,Method1,Price1,Shift1);
   hma[1] = new CHMA(3,PeriodInd2,Method2,Price2,Shift2);
   hma[2] = new CHMA(2,PeriodInd3,Method3,Price3,Shift3);
   hma[3] = new CHMA(1,PeriodInd4,Method4,Price4,Shift4);

   IndicatorBuffers(16);
   IndicatorSetDouble(INDICATOR_MINIMUM,0.0);
   IndicatorSetDouble(INDICATOR_MAXIMUM,5.0);
   IndicatorSetInteger(INDICATOR_HEIGHT,IndHeight);
   while(i<8)       { SetIndexBuffer(i,hma[int(i/2)].Uptrend); SetIndexBuffer(i+1,hma[int(i/2)].Dntrend); i+=2; 			}
   for(i=0;i<4;i++) { SetIndexBuffer(i+8,hma[i].ExtMapBuffer); SetIndexBuffer(i+12,hma[i].vect); 					}
   for(i=0;i<8;i++) { SetIndexStyle(i,DRAW_ARROW,EMPTY,ArrowWidth, i%2==0 ? ArrowColor1 : ArrowColor2); SetIndexArrow(i,ArrowCode); 	}
   for(i=8;i<17;i++){ SetIndexStyle(i,DRAW_NONE);											}
   IndicatorShortName("");
   IndicatorDigits(0);
//---
   return(INIT_SUCCEEDED);
  }

e la classe stessa dove il corpo del vecchio indicatore è stato appena copiato:

class CHMA
  {
private:
   int               period_,shift_,p,level_;
   ENUM_APPLIED_PRICE price_;
   ENUM_MA_METHOD    method_;
   double            GetWMA(int x,int per){ return(iMA(NULL,0,per,0,method_,price_,x+shift_)); }
public:
   double            ExtMapBuffer[],vect[],Uptrend[],Dntrend[];
                     CHMA(int level,int period,ENUM_MA_METHOD method,ENUM_APPLIED_PRICE price,int shift);
   void              calcind(int lim,int prevcalculated);
   int               lastvalue();
  };

il colore giallo è il buffer del vecchio indicatore, non ho voluto cambiare affatto il codice del vecchio indicatore, l'ho solo copiato nella classe, ci ho messo poco meno di un'ora

 
TheXpert:
sempre fatto.

Cosa vuoi dire? Si può dichiarare un membro della classe come un array di indicatori.

Ora controllo.

Hmmm... Giusto...

Bene, allora - tutto è molto più semplice, e la questione è risolta senza problemi - dichiariamo i membri della classe come array di indicatori, e passiamo un puntatore a questa stessa classe per la memorizzazione. La soluzione, ovviamente, non è molto bella, ma in assenza di puntatori all'array, va bene.