[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 749

 
artmedia70:
Saggi sviluppatori. Se fosse possibile chiamare uno script, ci farei pagare uno scivolone, ma nemmeno tu puoi, a quanto pare, perché non c'è bisogno di un mucchio di consiglieri in una volta sola... Non c'è una via d'uscita facile per noi :)
 

Signori programmatori. Potreste per favore aiutarmi.

Dalle variabili di ingresso.

extern bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;

int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Il tempo del commercio non è ancora arrivato!");
return(0);
}
}

Voglio aggiungere un secondo periodo di tempo in cui il commercio dovrebbe essere fatto con altre variabili UseHourTrade2, FromHourTrade2, ToHourTrade2.

Per favore aiutatemi. per favore ditemi cosa dovrebbe essere aggiunto alla funzione di avvio. Ho provato tante cose che non funzionano.

Voglio ringraziarvi in anticipo. Non posso aiutare.

 
cyclik33:
extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
 }

Qualcosa del genere, credo.

SZY Il pulsante di inserimento del codice "SRC" è scomodo da usare, non è facile da leggere.

 
Abzasc:

L'enigma è questo.

L'indicatore alla fine del codice crea un oggetto che serve come flag per un altro indicatore.

Dopo aver creato l'oggetto, ho bisogno di "addormentare" l'indicatore per 5 secondi, poi cancellare l'oggetto e addormentarlo per 60 secondi, dopo di che andrà all'ultimo tentativo e ricomincerà dall'inizio con un nuovo tick.

Cercando di fare questo

Si blocca fino a quando sembra esaurire il tempo.

Qualche consiglio su come farlo?


La logica è questa: entrambi gli indicatori conoscono il nome dell'oggetto e un oggetto aggiuntivo

il primo crea l'oggetto e non fa nulla mentre è lì - all'inizio dell'inizio scriviamo la condizione di uscita (return;)

il secondo legge l'oggetto, fa il suo lavoro e imposta un oggetto addizionale

il primo, senza vedere l'oggetto principale, se ne va senza fare nulla e trova immediatamente il secondo (oggetto aggiuntivo), legge il tempo di creazione dell'oggetto (è inserito lì dal secondo componente nella descrizione durante la creazione), conta alla rovescia la pausa richiesta (60 secondi) e cancella tutti gli oggetti - si può continuare a lavorare ....

 
Abzasc:
Non funziona negli indicatori. Non capisco la ragione di farlo in questo modo. A quanto pare, un indicatore costantemente funzionante deve essere ipnotizzante :)

La ragione è che l'indicatore lavora nel flusso dell'interfaccia, non puoi metterlo a dormire, perché se tu potessi "rallentarlo", in quel momento non potresti premere nessun pulsante nel terminale, per esempio "Nuovo ordine", o chiudere un ordine, ecc.
Un'altra sottigliezza in questo argomento riguarda il tester. Nel terminale reale, ci sono diversi thread, un thread di interfaccia è creato separatamente per Expert Advisors (ecco perché può essere rallentato senza conseguenze) e nel tester, è lo stesso per tutti, e tutti per uno :)
Ecco perché la funzione Sleep() funziona in modo così specifico in modalità test. Se si mette a dormire il flusso del tester, allora tutto smetterà di funzionare, compresi gli Expert Advisors, gli indicatori e la generazione di tick, naturalmente. Quindi, se ho capito bene la tua idea, può essere testata solo su una demo. Se vuoi rallentare il flusso dell'interfaccia, puoi usare la seguente funzione:

//+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep(int sec){
   int pause = TimeSeconds(TimeLocal()) + sec;
   if(pause >= 60)pause = pause - 60;
   while(TimeSeconds(TimeLocal()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust:


conta alla rovescia la pausa desiderata (60 sec)

Si può provare, ma l'importante è come mettere in pausa... Sono bloccato su questo.
 

Leggete attentamente, ho spiegato tutto, e non è necessario usare un oggetto grafico, si può fare con globals....

 
ToLik_SRGV:

La ragione è che l'indicatore lavora nel flusso dell'interfaccia, non può essere messo a dormire...

Ecco fatto... Ora si è alleggerito, grazie.


Amico, che rocce. Non si può mettere in un indicatore, non si può mettere a dormire... Cercherò di farlo con le variabili globali.
 
xrust:

Leggete attentamente, ho spiegato tutto, e non è affatto necessario usare un oggetto grafico, si può fare con globals....

Credo di aver capito. La cancellazione per tempo di esistenza è anche un timer. Ma lo rileggerò ancora una volta:)
 
Abzasc:

... Cercherò di farlo funzionare con le variabili globali.

Penso che Rustam abbia accennato correttamente, perché il congelamento dei thread è l'ultima cosa da fare, è una misura estrema, e non solo in MQL, ma in tutti i linguaggi di programmazione.