[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 644

 
Myth63:


La questione è che non sono molto bravo nella programmazione MQL e il mio EA è basato sui principi BASIC =) Una variabile è assegnata a un ordine aperto. Il terminale dice che sono stato riloggato e il valore di questa variabile scompare quando l'ordine viene aperto. Se questo accade, il terminale dovrebbe controllare le posizioni aperte e assegnare quei valori alle variabili che sono state assegnate dal robot. E l'Expert Advisor mostra buone letture nel test.

A seconda di ciò che si vuole memorizzare (quali informazioni), si possono usare diverse opzioni:

  • le informazioni sull'ordine possono essere memorizzate nel suo commento e poi lette dal commento;
  • le informazioni desiderate possono essere scritte su un file - un processo lento;
  • La variante più usata è quella di scriverlo nelle variabili globali del terminale.
 
FelixFX:

Se non ti dispiace, ecco un esempio. Per quanto ho capito, i dati non saranno aggiornati fino all'esecuzione del ciclo?
int start()
{
//----
    while (!IsStopped() && IsExpertEnabled())
    {fMineFunction();}
//----
    return (0);
}
 
TarasBY:

Saranno usati solo gli stessi dati durante questo ciclo infinito? I dati saranno aggiornati con la nuova spunta o no?
 
Myth63:


Il fatto è che non sono molto bravo nella programmazione MQL e il mio EA è basato sui principi di Bacyca =) Una variabile è assegnata a un ordine aperto. Il terminale dice che sono stato riloggato e il valore di questa variabile scompare quando l'ordine viene aperto. Mi chiedo come fargli controllare le posizioni aperte se c'è un overlog e assegnare quei valori alle variabili che sono state impostate da un robot.

Stai parlando di un numero magico? Non ci sono abbastanza informazioni per aiutarti... qual è la variabile e come è assegnata - è da lì che devi partire.

Ma il mio Expert Advisor sta mostrando buoni risultati nel test.

100 scambi non è una lettura, è un buon pezzo di storia. Un paio di migliaia di scambi in 2-3 anni è qualcosa di cui ci si può fidare.
 
FelixFX:

Saranno usati solo gli stessi dati durante questo ciclo infinito? I dati saranno aggiornati con una nuova spunta o no?
No. Per essere aggiornato, deve essere questo. Alla domanda sul looping risponde il motore di ricerca del sito, quante pagine restituisce. Leggete.
 
FelixFX:

Saranno usati solo gli stessi dati durante questo ciclo infinito? I dati saranno aggiornati con la nuova spunta o no?
Il loop vi permette di eseguire la vostra funzione in un "ciclo", senza aspettare l'arrivo del prossimo tick. Di quali dati stai chiedendo?
 
Per favore consigliatemi se c'è una funzione integrata che mi permette di eseguire una funzione che ho scritto solo all'apertura di ogni barra, non su ogni tick. Sembra essere facile da scrivere a mano, ma quando parte del codice viene eseguito per tick, e parte per barre, il programma diventa molto confuso) Grazie mille)
 
Qwertee:
Per favore consigliatemi se c'è una funzione incorporata, che posso eseguire qualche funzione, scritta da me, solo all'apertura di ogni barra, non su ogni tick. Non è così difficile da scrivere a mano, ma quando un po' di codice viene eseguito dai tick e un po' dalle barre, il programma diventa molto confuso) Grazie mille)

quindi basta determinare quando si apre una nuova barra ed eseguire la vostra funzione.

Potete determinare l'apparizione di una nuova barra memorizzando il tempo di apertura della barra e poi confrontandolo con il tempo attuale della barra 0. Se il nuovo tempo è più lungo del tempo precedente, allora abbiamo una nuova barra.

 

sergeev grazie per il consiglio, sembra funzionare)

Ok, un'altra cosa.

Nel mio EA ho questa ramificazione:

if(period=="M15")
{
//controlla per aprire buy
Alert(buysell);

se(buysell=="comprare")

Allarme(1);

.............

}

Fondamentalmente, if annidati. MA. la condizione if(period=="M15") è soddisfatta e Alert dà un risultato, e compra, ma la condizione if(buysell=="buy") non è soddisfatta e il comando Alert(1) non è nemmeno avviato. diavolo, entrambe le condizioni sono anche sintatticamente le stesse, ma perché una è soddisfatta e l'altra no?

 
sergeev:

quindi devi solo determinare quando si apre una nuova barra ed eseguire la tua funzione.

Potete determinare l'apparizione di una nuova barra memorizzando il tempo di apertura della barra e poi confrontandolo con il tempo attuale della barra 0. Se il nuovo tempo è più lungo del tempo precedente, allora avete una nuova barra.

Lo scriverò:

int time.marker;

void start() {
   if(time.marker!=Time[0]) {
      time.marker=Time[0];
      // тут то что буде исполнятся только на открытии бара
      }
   // тут то что буде исполнятся на каждом тике
   }
Motivazione: