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

 
Forexman77:

Caro, ho bisogno del tuo aiuto.

Sto ottimizzando il mio Expert Advisor tramite l'indicatore, il codice dell'indicatore è qui sotto.

L'ottimizzazione è lenta, ho fatto un codice nell'EA per ricalcolare l'indicatore su una nuova barra, che non è proprio adatto.

Si prega di vedere il codice dell'indicatore, cosa si può fare in esso per rendere il ricalcolo più veloce.


perché ha pensato che fosse colpa dell'indicatore?
 
Vladon:

calcolare il numero di caratteri, + la dimensione del carattere, in questo modo?

La dimensione dei caratteri non ti dà la conoscenza di cui hai bisogno. Devi disegnare diversi oggetti uno sopra l'altro. Solo il primo oggetto ha un punto di ancoraggio. Come ottenere il punto di ancoraggio del 2o e dei successivi oggetti?
 
Vladon:


Completamento forzato dell'EA nel caso in cui l'utente scarichi l'EA.

è meglio registrare i dati direttamente all'inizio.

Non è possibile farlo attraverso l'avvio. Stessa immagine.
----------------------------------------------------
stringo 25.03.2014 13:28

Il tempo di esecuzione di deinit è limitato a 10 secondi.

Nel tester al normale completamento il flag di stop non è impostato, quindi il deinit è tranquillamente completato.

----------------------------------------------------

Forse un limite di 10 secondi è imposto al funzionamento di qualsiasi funzione?
 
Ciao, studiando MQL4 è sorta una piccola domanda. Il problema è riportato nel tutorial su questo sito. Ecco la condizione: Compito 25. Creare un programma, in cui si realizzano le seguenti condizioni: se il tasso di cambio è salito oltre il livello specificato, allora dare un messaggio, in cui le parole indicano che il tasso supera il livello (fino a 100 punti); in altri casi, informare che il tasso non supera il livello specificato.
Ed ecco la soluzione proposta:
//--------------------------------------------------------------------
extern double Level=1.3200;                     // Заданный уровень 
string Text[101];                               // Объявление массива
//--------------------------------------------------------------------
int init()                                      // Спец. ф-ия init()
  {                                             // Присвоение значений
   Text[1]="один ";            Text[15]="пятнадцать ";
   Text[2]="два ";             Text[16]="шестнадцать ";
   Text[3]="три ";             Text[17]="семнадцать ";
   Text[4]="четыре ";          Text[18]="восемнадцать ";
   Text[5]="пять ";            Text[19]="девятнадцать ";
   Text[6]="шесть ";           Text[20]="двадцать ";
   Text[7]="семь ";            Text[30]="тридцать ";
   Text[8]="восемь ";          Text[40]="сорок ";
   Text[9]="девять ";          Text[50]="пятьдесят ";
   Text[10]="десять ";         Text[60]="шестьдесят";
   Text[11]="одиннадцать ";    Text[70]="семьдесят ";
   Text[12]="двенадцать ";     Text[80]="восемьдесят ";
   Text[13]="тринадцать ";     Text[90]="девяносто";
   Text[14]="четырнадцать ";   Text[100]= "сто";
   // Вычисление значений
   for(int i=20; i<=90; i=i+10)                // Цикл по десяткам
     {
      for(int j=1; j<=9; j++)                  // Цикл по единицам
         Text[i+j]=Text[i] + Text[j];          // Вычисление значения   
     }
   return;                                     // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. ф-ия start()
  {
   int Delta=NormalizeDouble((Bid-Level)/Point,0);// Превышение 
//--------------------------------------------------------------------
   if (Delta>=0)                                // Цена не выше уровня
     {
      Alert("Цена ниже уровня");                // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   if (Delta<100)                               // Цена более 100
     {
      Alert("Более ста пунктов");               // Сообщение
      return;                                   // Выход из start()
     }
//--------------------------------------------------------------------
   Alert("Плюс ",Text[Delta],"pt.");            // Вывод на экран
   return;                                      // Выход из start()
  }
//---------------------------------------------------------------------
По-моему в условных операторах неправильно проставлены знаки сравнения. Они должны быть с точностью до наоборот. Скажите прав ли я? И если нет, то почему так?  
 
Vladon:

Perché ha pensato che fosse colpa dell'indicatore?

Per esempio, ho ottimizzato AMA, è molto più veloce l'ottimizzazione, anche se l'indicatore è complesso.

Non dirò con certezza che è colpa dell'indicatore. Non ho ancora molta esperienza al riguardo.

Ma come accelerarlo? Ho fatto tutto bene o posso cambiare qualcosa?

In linea di principio, è sufficiente che l'indicatore sia calcolato utilizzando le ultime 100 barre, ma se imposto il numero 100 invece di 500, i valori scompaiono.

extern int Limit=70;

if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
 
   limit1=Bars-counted_bars-1;
   if (limit1>Limit && Limit>0) limit1=Limit;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }
Se si esegue l'ottimizzazione a questa velocità, la sua barba di completamento crescerà fino al pavimento e i mullen guadagnati non saranno utili) Bene, o il mercato sarà completamente diverso.
 
alxm:
Buon pomeriggio. Potete dirmi se è possibile definire o calcolare programmaticamente la larghezza/altezza su un grafico di un oggetto OBJ_TEXT?

Testo probabilmente no, ma etichetta per favore

docs.mql4.com/it/constants/objectconstants/enum_object_property

Proprietà OBJPROP_XSIZE e OBJPROP_YSIZE

 
Vladon:


Grazie per l'aiuto con l'operatore di loop, è andato tutto bene.
 
Forexman77:



Ma, come accelerare? Ho fatto tutto bene qui o c'è qualcosa che posso cambiare?



Bene, si vede subito che il calcolo è difettoso, per esempio è stata aggiunta una barra.

limit1=Bars-counted_bars-1;

limit1 sarà due... E poi

 if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;

Comunque, il ricalcolo è completamente sbagliato...

 
Vladon:



Grazie mille, buona giornata :) >)
 
splxgf:


Bene, qui si vede subito che il ricalcolo ha fatto un casino, per esempio è stata aggiunta una barra.

limit1 sarà due... E poi

Comunque, il ricalcolo è completamente sbagliato...

Qual è il modo giusto per farlo? Ecco perché lo chiedo. Non so davvero come contare gli indicatori.

Tirerò a indovinare:
limit1=Bars-counted_bars;

dovrebbe essere così?

Non so cosa stia succedendo qui.

if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
Se in generale, mi basta avere l'indicatore calcolato sulle ultime 100 barre.