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

 
polycomp:
Queste sono le funzioni, e gli oggetti sono i rettangoli che appaiono sul grafico.

File:
 
polycomp:


File:
 
Bisognerà vedere, ci vorrà del tempo.
 
polycomp:
Una delle possibili ragioni per cui il codice funziona diversamente dopo la reinizializzazione è la peculiarità dell'inizializzazione delle variabili statiche in MT4. Nella funzione isNewBar() si usa tale variabile. Durante l'inizializzazione primaria BarTime = 0. E alla successiva reinizializzazione questa variabile conterrà il valore precedente (non 0). Per verificare questa supposizione, rendete globale la variabile BarTime e controllate come funziona il codice.
 
polycomp:
alsu:

Per prima cosa, stampate qualcosa delle funzioni di libreria in Print, in modo da sapere se vengono chiamate affatto

Gli oggetti grafici sono creati in funzioni di libreria. Dopo la prima chiamata all'indicatore, gli oggetti vengono creati e visualizzati nella finestra del terminale.

Quando le chiamate di nuovo non sono presenti nella lista degli oggetti, il che suggerisce che le funzioni esterne non funzionano quando si ricalcola l'indicatore per qualche motivo, e il terminale è silenzioso su questo problema.

Ok. Invece di segni indiretti, stampate ( " chiamata di questa funzione") nell'indicatore; vedremo subito se questa funzione viene chiamata.

Dovresti essere meno arrogante, allora gli errori saranno trovati più velocemente)

 
polycomp:



In generale, il vostro problema è molto probabilmente nella funzione

bool isNewBar()
{
  static datetime BarTime;  
   bool res=false;
    
   if (BarTime!=Time[0]) 
      {
         BarTime=Time[0];  
         res=true;
      } 
   return(res);
}

Il fatto è che la statica non viene resettata durante la reinizializzazione, quindi quando si riavvia, il BarTime è sempre uguale al tempo dell'ultima barra contata l'ultima volta, cioè isNewBar () è falso finché non arriva una nuova candela. Sarebbe meglio spostare la funzione dalla libreria all'inluder mqh e azzerare BarTime=0 esplicitamente in init ().

Questo è solo un primo sguardo al codice, quindi non giudicate troppo severamente se mi sbaglio.

 
polycomp:



Comincerei rimuovendo questa linea dalla tua libreria

#property library

Poiché non state usando una libreria, ma un file di inclusione

 
alsu:

Per quanto mi ricordo, devi ricordare specificamente questo tempo quando imposti l'ordine pendente. Si può memorizzare direttamente nel commento all'ordine (o in magik, come perversione speciale:).
Grazie mille.
 

DOMANDA 1.

Come codificare questa idea.

Per impostare un ordine pend ente ma farlo convertire in un ordine a mercato solo se il prezzo impostato dell'ordine pendente è lo stesso del prezzo di apertura di qualsiasi candela TF60

DOMANDA 2.

Come codificare questa idea.

Se un ordine pendente viene convertito in un ordine a mercato, tra 10 minuti dovremmo impostare un altro ordine pendente con gli stessi valori: prezzo aperto, prezzo di stop, volume come nel precedente ordine pendente che è stato convertito in un ordine a mercato.

Grazie.

 
alsu:

Ok. Forse, invece di giudicare con segni indiretti, basta digitare l'indicatore stesso: Print ("call of such and such function"); vedremo subito se è chiamato o no.

Dovreste essere meno sicuri di voi stessi, allora gli errori saranno trovati più velocemente).

alsu:

E in generale il vostro problema è molto probabilmente nella funzione

Il fatto è che la statica non viene azzerata quando si reinizializza, quindi al riavvio il BarTime è sempre uguale al tempo dell'ultima barra contata l'ultima volta, cioè isNewBar () sarà falso finché non arriva una nuova candela. Sarebbe meglio spostare la funzione dalla libreria all'inluder mqh e azzerare BarTime=0 esplicitamente in init ().

Questo è solo un primo sguardo al codice, quindi non giudicate troppo severamente se mi sbaglio.


Grazie mille!

Rimosso isNewBar () dalla libreria e messo nel file indicatore. Tutto funziona come un orologio!

Motivazione: