Aiuto per la codifica - pagina 557

 
mntiwana:
Carissimo MLADEN,

può essere la mia richiesta precedente accidentalmente cancellata come la maggior parte delle cose che corrono qua e là, cercando e regolando il loro posto esatto, ma siamo facili e comodità con fare il nostro lavoro, come promemoria ti chiedo per alcuni semplici trailing stop con codice BE che voglio aggiungere / unire in allegato EA che ho alterato con il vostro aiuto gentile e guida, ma io non ho fretta, quando è possibile per voi, so quante cose diffuse e in attesa per voi, grazie.

saluti

semplice_ma_cross_eamod-hp.mq4

OK. Sarà fatto

 
 

Ciao a tutti,

Grazie per aver trovato il tempo di leggere il mio post. Sono un principiante assoluto quando si tratta di codice. Ho provato un paio di cose per far funzionare questo EA ma non erano la risposta. Sto studiando le variabili globali perché penso che ne abbia bisogno per ricordare ciò che è successo invece di ripartire quando si è verificato un refresh/reload ecc. Funziona perfettamente in un backtest, ma per qualche motivo, quando è in esecuzione dal vivo, smette di prendere le operazioni o di chiuderle e non riesco proprio a capirlo. Sto anche cercando di imparare come fare queste cose ma ho appena iniziato, quindi perdonatemi se faccio le cose nel modo sbagliato. L'EA ha un tempo di inizio e di fine e in quel tempo può aprire x trade e quando questo si chiude allora un ciclo si completa. È impostato per consentire solo 1 ciclo per periodo di tempo.

Qualcuno può dare un'occhiata a questo codice per vedere qual è il problema. Molte grazie per qualsiasi aiuto

maa1

quantum_shaolin_1.3.2.mq4

quantum.mq4

 

Ciao Mladen,

Ho un indicatore scanner che dice quanti indicatori indicano un'opportunità di acquisto o di vendita in un particolare simbolo, e analizza il simbolo su più timeframe.

Il problema è che l'indicatore dice che ci sono sempre indicatori che indicano, anche quando in realtà non lo fanno. Quando questo è il caso, l'importo dell'indicatore è sempre lo stesso numero.

Si prega di guardare il codice qui sotto:

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

Quando tutto viene visualizzato in un messaggio di avviso ottengo qualcosa come EURUSD: 15m/60m/4u/1d/1w/1mo indica un'opportunità di acquisto 7/7/7/7/7/7/.

Questo significa che ha sommato 7 indicatori per ogni timeframe che chiaramente è errato. Lo afferma anche quando tolgo tutte le chiamate di funzione. Quando faccio questo tutti gli elementi di BufferALL[] sono vuoti.

Ma apparentemente il valore VUOTO è ancora un valore che può essere confrontato con un altro valore come 534653647457 per esempio. Quando uso il confronto >= o = 534653647457 per == 534653647457 i messaggi /7/7/7/7/7/7 si fermano. Come posso rimediare a questo?

 
mrcodix:
Ciao Mladen,

Ho un indicatore scanner che dice quanti indicatori indicano un'opportunità di acquisto o di vendita in un particolare simbolo, e analizza il simbolo su più timeframe.

Il problema è che l'indicatore dice che ci sono sempre indicatori che indicano, anche quando in realtà non è così. Quando questo è il caso, l'importo dell'indicatore è sempre lo stesso numero.

Si prega di guardare il codice qui sotto:

double BufferALL[22];

int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};

for(x=0; x<=5; x++) {

if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;

BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);

//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);

BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);

BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);

BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);

BufferALL[5]=indi(symbol[y],Timeframe[x][0]);

BufferALL[6]=indi(symbol[y],Timeframe[x][0]);

BufferALL[7]=indi(symbol[y],Timeframe[x][0]);

BufferALL[8]=indi(symbol[y],Timeframe[x][0]);

BufferALL[9]=indi(symbol[y],Timeframe[x][0]);

BufferALL[10]=indi(symbol[y],Timeframe[x][0]);

BufferALL[11]=indi(symbol[y],Timeframe[x][0]);

BufferALL[12]=indi(symbol[y],Timeframe[x][0]);

BufferALL[13]=indi(symbol[y],Timeframe[x][0]);

BufferALL[14]=indi(symbol[y],Timeframe[x][0]);

BufferALL[15]=indi(symbol[y],Timeframe[x][0]);

BufferALL[16]=indi(symbol[y],Timeframe[x][0]);

BufferALL[17]=indi(symbol[y],Timeframe[x][0]);

BufferALL[18]=indi(symbol[y],Timeframe[x][0]);

BufferALL[19]=indi(symbol[y],Timeframe[x][0]);

BufferALL[20]=indi(symbol[y],Timeframe[x][0]);

BufferALL[21]=indi(symbol[y],Timeframe[x][0]);

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

} // end of timeframe loop 6 iterations

Quando tutto viene visualizzato in un messaggio di avviso ottengo qualcosa come EURUSD: 15m/60m/4u/1d/1w/1mo indica un'opportunità di acquisto 7/7/7/7/7/7/.

Questo significa che ha sommato 7 indicatori per ogni timeframe che chiaramente è errato. Lo afferma anche quando tolgo tutte le chiamate di funzione. Quando faccio questo tutti gli elementi di BufferALL[] sono vuoti.

Ma apparentemente il valore EMPTY è ancora un valore che può essere confrontato con un altro valore come 534653647457 per esempio. Quando uso il confronto >= o = 534653647457 per == 534653647457 i messaggi /7/7/7/7/7/7 si fermano. Come posso rimediare a questo?

mrcodix

Senza sapere esattamente cosa fanno gli indicatori (quali sono i loro valori di ritorno) tutto quello che posso fare sono congetture selvagge, e questo non aiuterebbe affatto

 
mladen:

mrcodix

Senza sapere esattamente cosa fanno gli indicatori (quali sono i loro valori di ritorno) tutto quello che posso fare sono congetture selvagge, e questo non aiuterebbe affatto

Caro Mladen,

Non è necessario conoscere i valori di ritorno perché non sono gli indicatori il colpevole. Vedi, lo stesso identico problema si presenta quando disabilito tutte le funzioni di chiamata aggiungendo un "//" davanti ad ogni linea di codice (trasformandole in linee di commento). Lo stesso vale per i valori dietro il = in questa parte:

for(z=0; z<=14; z++){

if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<

}[/CODE]

it might aswell be something like

for(z=0; z<=14; z++){

if (BufferALL[z] >=1111111111111) Timeframe[x][1]=Timeframe[x][1]+1;

if (BufferALL[z] <=2222222222222) Timeframe[x][2]=Timeframe[x][2]+1;

}

for(z=15; z<=21; z++){

if (BufferALL[z] >= 333333333333) Timeframe[x][2]=Timeframe[x][2]+1; //>

if (BufferALL[z] <= 444444444444) Timeframe[x][1]=Timeframe[x][1]+1; //<

}

it will give the same exact alert message that says /15m/60m/4u/1d/1w/1mo/ is indicating a buying opportunity /7/7/7/7/7/7/. I disabled all the function call lines with // so the BufferALL[22] elements should be EMPTY, they shoulden't contain any value whatsoever. Yet, when the computer comes at the if condition parts BufferALL[z] >=1111111111111 etc it ALWAYS states that the "value" thats inside BufferALL[z] is larger then 11111111111 (or any value you wish to put behind it). The only way to make these additions stop is by changing the if condition = into ==. When the computer asks whether the empty value of BufferALL[z] is exactly the same as 11111111 or 22222 or whatever value you wish to compare, it doesen't return a true and Timeframe is not added with +1. Please try it for youself. I will add the message construction code below:

[CODE]

int SymbolBars[216][7];

if (((Timeframe[0][1] > 0) && (Timeframe[1][1] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][1] > 0) && (Timeframe[2][1] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][1] > 0) && (Timeframe[3][1] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][1] > 0) && (Timeframe[4][1] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][1] > 0) && (Timeframe[5][1] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][1]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][1],"/"));

SymbolBars[y][0]=iBars(symbol[y],15);

}

if (Timeframe[1][1]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][1],"/"));

SymbolBars[y][1]=iBars(symbol[y],60);

}

if (Timeframe[2][1]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][1],"/"));

SymbolBars[y][2]=iBars(symbol[y],240);

}

if (Timeframe[3][1]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][1],"/"));

SymbolBars[y][3]=iBars(symbol[y],1440);

}

if (Timeframe[4][1]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][1],"/"));

SymbolBars[y][4]=iBars(symbol[y],10080);

}

if (Timeframe[5][1]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][1],"/"));

SymbolBars[y][5]=iBars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a selling opportunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}

if (((Timeframe[0][2] > 0) && (Timeframe[1][2] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][2] > 0) && (Timeframe[2][2] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][2] > 0) && (Timeframe[3][2] > 0)

&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][2] > 0) && (Timeframe[4][2] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][2] > 0) && (Timeframe[5][2] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))

{

if (Timeframe[0][2]>0)

{

StringAdd(alarmbericht,"15m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][2],"/"));

SymbolBars[y][0]=Bars(symbol[y],15);

}

if (Timeframe[1][2]>0)

{

StringAdd(alarmbericht,"60m/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][2],"/"));

SymbolBars[y][1]=Bars(symbol[y],60);

}

if (Timeframe[2][2]>0)

{

StringAdd(alarmbericht,"4u/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][2],"/"));

SymbolBars[y][2]=Bars(symbol[y],240);

}

if (Timeframe[3][2]>0)

{

StringAdd(alarmbericht,"1d/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][2],"/"));

SymbolBars[y][3]=Bars(symbol[y],1440);

}

if (Timeframe[4][2]>0)

{

StringAdd(alarmbericht,"1w/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][2],"/"));

SymbolBars[y][4]=Bars(symbol[y],10080);

}

if (Timeframe[5][2]>0)

{

StringAdd(alarmbericht,"1mo/");

StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][2],"/"));

SymbolBars[y][5]=Bars(symbol[y],43200);

}

Alert(+symbol[y]+" "+alarmbericht+" are indicating a buying oppertunity. " +indicatoraantal+".");

alarmbericht = "";

indicatoraantal = "";

}
 

Mladen,

Ecco un esempio della messaggistica di allerta continua quando rimuovo tutte le chiamate di indicatori trasformandole in linee di commento.

Quando si tratta di un'opportunità di acquisto, tutte le sommatorie di indicatori in tutti i possibili time frame sono 15. Quando è un'opportunità di vendita è 7. Il BufferALL[] è VUOTO quindi questo non ha alcun senso.

Infine, vorrei dirvi qualcosa fuori tema. In passato ho chiesto qualcosa riguardo l'indicatore scanner che scansiona più simboli in successione. Mi chiedevo se l'indicatore non riuscisse ad ottenere tutti i tick dei simboli che cambiano più frequentemente quando l'indicatore è collegato ad un grafico in cui il simbolo corrente non si aggiorna così frequentemente (meno tick al secondo). Questo significherebbe che in teoria l'indicatore sarebbe ancora nella barra a 5 minuti delle 20:05 mentre i simboli che si aggiornano più velocemente e che dovrebbero essere analizzati sono già alle 20:10. Semplicemente perché una nuova barra inizia al primo tick dopo le 20:04:59, e non quando l'orologio tocca le 20:05:00. Hai risposto a questo dicendo che tutti i simboli saranno controllati con una velocità di controllo fissa perché nella nuova versione di metatrader la procedura start {return} non è più attivata su ogni nuovo tick. Invece si attiva ad una velocità fissa. Questo si è rivelato non essere vero. Dopo aver trasformato tutti i miei indicatori in funzioni che sono incluse nel codice del mio indicatore scanner stesso, l'intero indicatore faceva ancora bloccare mt4 quando lo eseguivo. Quindi usando iCustom() per chiamare il codice o inserendo il codice e trasformandolo in una funzione interna non fa alcuna differenza, si blocca ancora. Ma ho trovato una soluzione per questo abbandonando il ciclo for master lungo 215 iterazioni (ogni iterazione viene trattato un simbolo diverso da symbol[y]) e sostituendolo con una variabile che ottiene un'aggiunta dopo ogni tick. Uso questo per dire al computer quale simbolo dovrebbe usare, così ora invece di cercare di analizzare tutti i 216 simboli ad ogni tick (che fa bloccare l'intera cosa) solo un simbolo viene analizzato ad ogni tick. Quando la variabile di addizione arriva a 215 viene riportata a 0 e l'intero ciclo 216 ricomincia da capo. Ora tutti i simboli vengono analizzati, anche se un po' più lentamente di quando sarebbero stati analizzati tutti e 216 ad ogni tick (se non si bloccasse, ovviamente) .... In ogni caso. Il punto è che Start{} si attiva solo quando il simbolo corrente nel grafico si sta aggiornando. Questo significa che ci vuole più tempo per passare attraverso tutti i 216 simboli quando l'indicatore è un simbolo meno attivo (come un'azione) rispetto a un simbolo molto attivo (come EURUSD). Quindi Start{} è ancora attivato ad ogni nuovo tick.

File:
 

Ciao Mladen e Mrtools, chiedo un grande piacere.

Sarebbe gentile a risolvere il problema di due errori durante la compilazione dell'indicatore allegato.

Grazie in anticipo

Moreno

PS: Mi dispiace per il mio inglese :-)

File:
 
morenokosta:
Ciao Mladen e Mrtools, chiedo un grande piacere.

Sarebbe gentile a risolvere il problema di due errori durante la compilazione dell'indicatore allegato.

Grazie in anticipo

Moreno

PS: Mi dispiace per il mio inglese :-)

morenokosta

Quell'indicatore ci va bene così com'è

Non c'è bisogno di fare alcun cambiamento di codice

 

Ciao Mladen

Puoi per favore aggiungere un avviso su questo indicatore, sono un principiante.

Grazie

File:
cross.mq4  2 kb
Motivazione: