Caratteristiche utili da KimIV - pagina 22

 
rid:

Ora ho messo una funzione nel commento - Comment (isCloseLastPosByStop());

Stai facendo dei test nel tester? Se nel tester, allora sicuramente ci può essere una situazione in cui due o più ultime posizioni chiuse non avranno un OrderCloseTime() diverso.

 

Capisco. Se diverse posizioni sono chiuse simultaneamente nel tester (secondo il segnale), allora la funzione isCloseLastPosByStop() potrebbe "glitchare" e non funzionare? Ma online sembra funzionare.

Sì, - l'ho controllato ora nel tester lavorando con una posizione. Tutto funziona correttamente! La funzione visualizza correttamente nel commento (isCloseLastPosByStop()) la chiusura per Stop Loss e cambia il flag in tempo quando si chiude per un altro motivo.

 
rid писал (а):
Capisco. Se diverse posizioni sono chiuse nel tester allo stesso tempo, allora la funzione isCloseLastPosByStop() potrebbe "glitchare" e non funzionare?

Sì, perché isCloseLastPosByStop() identifica l'ultima posizione chiusa in base al tempo massimo di chiusura, che si misura in secondi. Pertanto, abbiamo bisogno che passi più di un secondo tra la chiusura di più posizioni. Nel tester può passare meno di un secondo.

rid ha scritto:
E online apparentemente funzionerà.
Ci possono essere anche dei glitch nella modalità online, ma molto meno spesso che nel tester. Anche il robot di trading automatico richiede un po' di tempo per chiudere le posizioni. Se avete delle idee su come identificare in modo più affidabile l'ultima posizione chiusa, allora le accetterò con gratitudine e cercherò di modificare la funzione.
 

Buon pomeriggio, KimIV. Ho bisogno del vostro consiglio, o meglio del vostro aiuto. Ho bisogno che la funzione start() funzioni non in base al tick, ma che venga eseguita ogni secondo, indipendentemente dal fatto che un nuovo tick sia arrivato o meno. Ecco come ho cercato di implementare questo compito:

int start()
  {
   if(first==true)return(0); 
   else 
   {   
      for(int j=0;j<10;j++)
         {
         RefreshRates();//обновляем котировки 

         //Код эксперта

         first=true;
         Sleep(1000);//задержка в 1 секунду
         j=0;
         }
   }
   return(0);
  }
 
StatBars писал (а):
Voglio che la funzione start() venga eseguita ogni secondo, indipendentemente dal fatto che un nuovo tick sia arrivato o meno.

Ho fatto così:

void start() {
  while (IsExpertEnabled() && !IsStopped()) {
    // код .............
    Sleep(1000);
  }
}
 

Grazie mille!!!! Puoi ancora dirmi se il mio codice funziona? Non nel tester... Funziona nel tester...? O devo...

Void start()...

 
StatBars писал (а):
Potete anche dirmi se il mio codice funziona?

Non so... non ho controllato...

StatBars ha scritto (a):
Nonnel tester... Funzionerà nella vita reale...?

Nel tester, qualsiasi cosa in loop non funziona. Solo quelli sulle zecche funzionano...

In linea, il tuo codice dovrebbe sembrare funzionare. Almeno sembra funzionare logicamente...

StatBars:

Oppure devi...

Void start()...

No, non è necessario. Perché dichiarare una funzione tipizzata se non restituisce alcun valore, e se lo fa, quel valore non viene usato in alcun modo?
 

Capisco. Grazie ancora.

 
KimIV:
. Se avete delle idee su come identificare in modo più affidabile l'ultima posizione chiusa, le accetterò con gratitudine e cercherò di riprogettare la funzione.

Grazie per la gentile offerta. Purtroppo le buone idee non mi vengono spesso (ahimè...) in testa! Non molto tempo fa, per esempio, ho notato che le vostre funzioni non fanno quasi nessun uso del "componente" - OrderComment

Tuttavia, forse, l'applicazione di questa funzione vi darà nuove idee (per la gioia di tutti i presenti).

Per esempio, se (OrderComment()==" [sl]" && .... - potrebbe ampliare la gamma dei compiti che puoi svolgere!

//---------------------------------------------------------------------------------

"Più funzioni, - buone e diverse!" (c)

 
rid:
KimIV:
. Se avete delle idee su come identificare in modo più affidabile l'ultima posizione chiusa, le accetterò con gratitudine e cercherò di rivedere la funzione.

Per esempio, come se(OrderComment()==" [sl]" && .... - potrebbe ampliare la gamma dei compiti da svolgere!

rid, hai suggerito un modo per identificare lo stop che scatta dalla voce nei commenti dell'ordine. Grazie, ma ci possono essere altre voci oltre a [sl] nei commenti.

Risolvo lo stesso problema confrontando il prezzo di chiusura con il prezzo di stop.