Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 601

 
AlexeyVik:
Probabilmente non è esattamente così che ho provato.
Ho appena ricompilato il codice in EA e l'ho eseguito. Quando cambio il parametro Sys nel commento questo valore cambia.

Ho provato a passare di nuovo alla tua versione... ancora non funziona... È nell'EA, ed è visibile come EA...
 
peace1984:

Ho provato a passare di nuovo alla tua versione... ancora non funziona... è nell'EA, ed è visibile come EA...


O ho sbagliato?

File:
11_1_1.mq4  8 kb
 
AlexeyVik:


O ho frainteso qualcosa?



capisco che il messaggio "sys non dovrebbe essere 1" apparirà se sys!=1, ma se si cambia l'utente da 0, dovrebbe essere 1. e "sys dovrebbe essere 1" dovrebbe apparire

nella tua versione dell'EA, durante i test nell'angolo in alto a sinistra c'è scritto sys=0 e questo non dovrebbe essere il caso...

 
peace1984:

capisco che il messaggio "sys non dovrebbe essere 1" apparirà se sys!=1 e se cambiate l'utente da 0, dovrebbe essere 1 e "sys dovrebbe essere 1" dovrebbe apparire

Ecco uno sguardo al nuovo lancio. Linee dal basso verso l'alto.


L'esperto è caricato.

Elenco delle variabili esterne: Sys = 0

Inizializzazione superata.

le prossime 3 righe vengono stampate da EA.

Motivo di deinizializzazione 5(i parametri di ingresso sono stati cambiati dall'utente)

Elenco variabili esterne: Sys = 1

Inizializzazione passata

Le seguenti 3 linee, la stampa dell'Expert Advisor.

Motivo di deinizializzazione 1(Il programma è stato rimosso dal grafico)


Cosa vuoi chiarire? Non capisco cosa non funziona...

ps: non prestate attenzione a questi simboli. Si tratta di un conto di opzioni, ecco perché questi nomi di simboli.

 
AlexeyVik:

Non è questo il punto. Nessuno ha bisogno del tuo codice segreto completo. Basta scrivere un pezzo di codice di prova completo con quel malinteso. Che ne dite di questo?

quando hai cancellato la linea evidenziata? I telepati non aiutano, i semplici mortali ancora meno...

Poi c'è questa parte.

Non so quale programmatore l'abbia scritto, ma è completamente inadeguato... Non è colpa tua. Tu, come molti altri, hai appena preso il codice e cerchi di aggiustarlo...

Se la variabile counted_bars è uguale al numero di barre rimaste invariate dall'ultima chiamata dell'indicatore (la prima linea)

Come può diventare meno di zero if(counted_bars < 0) non riuscirò mai a capire...

Anche il resto non ha senso, ma sono troppo pigro per smontarlo...


Sono totalmente d'accordo con te. Perché non ci hai pensato? )

Allego il codice e il file di questo misero indicatore.

Lanciate sul grafico, il terminale si blocca naturalmente, lasciatelo per 10 minuti (a seconda delle prestazioni del PC. Ho i5 3.1 Ghz), chiudete forzatamente MT, aprite il file di log con nome "bug log.csv", osservate il fatto del bug IndicatorCounted().

#property indicator_separate_window
#property indicator_buffers 1

double Buffer_1[];

bool busy=false;
int han;

int init()
{
   han=FileOpen("bug log.csv", FILE_CSV|FILE_WRITE);
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,1);       
   SetIndexBuffer(0,Buffer_1); 
   return(0);
}

int deinit()
{
   FileClose(han);
   return(0);
}

int start()
{
   //if(busy) return(0);
   int limit=3000;
   if(IndicatorCounted()>0) limit=1;
   
   for (int i=0; i<limit; i++)
   { 
      busy=true;
      FileWrite(han, TimeToStr(TimeCurrent(), TIME_MINUTES|TIME_SECONDS), DoubleToStr(i, 0), DoubleToStr(IndicatorCounted(), 0));
      FileFlush(han);
      
      for(int j=1; j<7000; j++)
        for(int k=1; k<7000; k++)
          double var=2*0.34*MathArccos(0.5)+1.33*MathArcsin(0.23)+1.53*MathArctan(0.11)+2.33*MathCos(0.23)+1.22*MathLog(12)+1.22;
      
      Buffer_1[i]=var;
   }
   
   busy=false;
   return(777);
}
File:
bugqtest.mq4  2 kb
 

Ciao a tutti, potete consigliarmi cosa manca nello script, se chiude tutti gli ordini aperti se la condizione (AccountProfit()>1) è soddisfatta, ora chiude solo una parte degli ordini finché la condizione i

f(ContoProfitto()>1)

{ for (i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,10,Green); return(0);
} else { OrderClose(OrderTicket(),OrderLots(),Ask,10,Red); return(0);
}}}
 
Expert:


Sono completamente d'accordo con te. Perché non ci hai pensato? )

Allego il codice e il file dell'indicatore woe-is-me stesso.

Lanciate sul grafico, il terminale si blocca ovviamente, lasciatelo per 10 minuti (dipende dalla velocità del PC. Ho i5 3.1 Ghz), chiudete forzatamente MT, aprite il file di log con il nome "bug log.csv", osservate il fatto del bug IndicatorCounted().

Non lo so. Ho questo indicatore che ha registrato un file come questo.

File:
test.zip  21 kb
 
AlexeyVik:

Non lo so. Ho fatto scrivere a questo indicatore un file come questo.




Grazie mille per il vostro feedback!

Provato la tua versione - stesso risultato ((

Avete un'idea del perché questo accade?
Non sono solo io. Ho provato su un altro PC, più potente del mio, ed è lo stesso problema.

File:
bugflog.zip  122 kb
 
i999i:

Ciao a tutti, potete consigliarmi cosa manca nello script, se chiude tutti gli ordini aperti se la condizione (AccountProfit()>1) è soddisfatta, ora chiude solo una parte degli ordini finché la condizione i

f(ContoProfitto()>1)

{ for (i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,10,Green); return(0);
} else { OrderClose(OrderTicket(),OrderLots(),Ask,10,Red); return(0);
}}}
return(0); era ridondante, grazie a tutti
 
Expert:


Grazie mille per il vostro feedback!

Provato la tua versione - stesso risultato ((

Qualche idea sul perché questo accada?
Non sono l'unico. Ho provato su un altro PC, più potente del mio, ed è lo stesso problema.

O io non ti capisco, o tu non capisci qualcosa... Cosa c'è di sbagliato nel file .csv? Fino al conteggio della prima barra prev_calculated o IndicatorCounted() (nella vecchia versione) sarà zero e questo è corretto.