Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1803

 
Artyom Trishkin #:

Nel tuo codice, se una posizione è aperta, un'altra posizione non si aprirà sul segnale opposto. Cioè, prima di tutto, quando arriva il segnale, bisogna controllare se c'è una posizione contraria e chiuderla.

Ma di nuovo, tutto questo limita molto le possibilità di migliorare le strategie.

Dovremmo evitare di legarci alla presenza/assenza di ordini (specialmente in quattro - ordini pendenti (che è corretto) e posizioni (che è sbagliato)).

No, è corretto e necessario avere a portata di mano il numero di ordini e posizioni in base ai loro tipi. Ma è sbagliato basarsi sull'assenza di ordini solo per i segnali.

In generale, il modo corretto è avere funzioni per calcolare ordini e posizioni (una funzione che riempie la struttura quando cambia il numero di ordini e posizioni), funzioni per aprire/chiudere posizioni, funzioni per impostare gli ordini e funzioni di allarme. Inoltre, la capacità di confrontare i dati delle posizioni (aperte o chiuse) con qualsiasi valore.

Qualsiasi strategia può essere costruita a partire da questo insieme.

Artem, la strategia c'è un ordine nel mercato fino a quando chiude al TP o SL.
 
MakarFX #:

Il tuo codice

(Un bar aperto e nessun ordine)

Controllato il segnale - nessun segnale

... Aspetta la prossima barra.

Hai ripetuto lo stesso errore dell'ultima volta

P.S.

è

deve essere effettuato dopo l'apertura dell'ordine

In realtà il mio codice è stato progettato per qualcos'altro. Per un robot che scambia solo a prezzi di apertura. Ho semplicemente preso da me e l'ho aggiunto al codice di un utentecittadino rispettoso della legge e l'ho cambiato secondo i commenti. Tutte le sfumature non possono essere considerate in una volta sola. Si vedono solo durante i test del robot.

Ma c'è una cosa. Sembra anche che tu abbia preso tutto in considerazione. Un segnale è stato ricevuto e la funzione bSignalSell obSignalBuy ha inviato un comando per aprire un ordine e ha restituito true (il primo punto). Il secondo punto è che nessun ordine è stato ancora aperto (il comando sta aspettando il suo turno nel terminale). Poi, quando la coda dei comandi arriva, viene inviata al server (questo è ancora tempo). Sul server viene eseguito. O il server si rifiuta di eseguirlo per una delle numerose ragioni possibili (vedere la documentazione per i dettagli). Oppure non ci arriva (interferenze, cattiva connessione e altri bug di rete). E il vostro robot pensa di aver aperto un ordine e aggiorna il tempo di apertura della barra. Va bene. Ma quell'ordine non è apparso nella lista degli ordini aperti. Quindi, immaginate di avere 0 ordini nella lista e il robot "pensa": "Va bene, sono entrato nel mercato. Diconseguenza, c'è un segnale durante un'intera barra dopo un'entrata non riuscita, ma l'Expert Advisor non lo "vede" e non fa nulla. È possibile una tale situazione? È possibile! Quindi il vostro codice non è molto buono. Faresti meglio a pensare meglio. O lasciare che il cittadino rispettoso della legge pensi. Sfortunatamente, ora non posso. Sto lavorando a un progetto molto interessante. E creare un vero e proprio EA completamente funzionante con tutti i suoi meccanismi ha senso solo per un buon sistema di trading redditizio. Il robot può essere semplicemente eseguito nello Strategy Tester e vedere se è un'altra delle mie versioni o quella sviluppata da voi. Non fa alcuna differenza.

 
законопослушный гражданин #:

L'ho notato solo ora.

bool bSignalBuy()
  {
   if(dMA > Open[1] && dMA < Close[1])  //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
      return(true);

   return(false);
  }
Open[1] и Close[1]

Indice 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0);

Mentre voi avete il MA con un indice di 0! Cioè, cammina per tutta la barra e può andare oltre Open e Close. Pertanto, è meglio indicizzare MA per 1.

dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 1);

Poi tutti i segnali saranno presi eccezionalmente sulla barra formata e il robot sarà completamente coerente con il sistema di trading con segnali sui prezzi aperti. Pertanto, il robot dovrà solo seguire l'apertura della barra (ho già aggiunto questo codice) ed entrare sulla barra appena formata. Sarà più affidabile. E non ci sarà bisogno di fare una piega, come ha dovuto fare Makar a causa dell'algoritmo di entrata originariamente sbagliato.

 
Mihail Matkovskij #:

L'ho notato solo ora.

Indice 1.

Mentre voi avete il MA con un indice di 0! Cioè, cammina per tutta la barra e può andare oltre Open e Close. Pertanto, è meglio indicizzare MA per 1.

Poi tutti i segnali saranno presi eccezionalmente sulla barra formata e il robot sarà completamente coerente con il sistema di trading con segnali sui prezzi aperti.

Questa è l'essenza del segnale.

L'attuale MA va nel corpo della candela precedente e a seconda di quale candela (UP/DN) dà lo stesso segnale.

 
MakarFX #:

Questa è l'essenza del segnale.

L'attuale MA va nel corpo di una candela precedente e a seconda della candela (UP/DN), sarà lo stesso segnale.

In questo caso la MA dovrebbe essere disegnata con l'indice 1 nel timeframe inferiore. Allora non ci sarà bisogno di applicare alcuna modifica. All'interno dell'Open e Close del time frame superiore ci saranno diverse (o molte) barre su quello inferiore. Sai perché sono stati inventati i tempi, vero? Se no, allora iniziate a studiare questa domanda dalla storia dei candelieri giapponesi. In breve, il punto è semplificare l'analisi tecnica. E con l'avvento dell'era digitale ha anche semplificato la discretizzazione dei sistemi di trading.

 
Mihail Matkovskij #:

In questo caso la MA dovrebbe essere presa con l'indice 1 sul time frame inferiore. Allora, non ci sarà bisogno di fare una piega. Ci saranno diverse (o molte) barre tra Open e Close del timeframe superiore su quello inferiore. Sai perché sono stati inventati i tempi, vero? Se no, allora iniziate a studiare questa domanda dalla storia dei candelieri giapponesi. In breve, il punto è semplificare l'analisi tecnica. E con l'avvento dell'era digitale si semplifica anche la discretizzazione dei sistemi di trading.

Non capisco perché sei arrabbiato con me. L'uomo scrive la sua strategia come la vede lui, e quest'uomo non sono io.

Ho solo risposto alla sua domanda: "Come posso evitare le aperture multiple sulla stessa barra?

Cosa imparo lo so da solo, e se non lo so, lo chiedo. In questo momento non ho chiesto niente a nessuno.

 
MakarFX #:

Non capisco perché te la prendi con me. L'uomo scrive la sua strategia come la vede e quell'uomo non sono io.

Ho solo risposto alla sua domanda: "Come evitare aperture multiple sulla stessa barra?".

Cosa imparo lo so da solo, e se non lo so, lo chiedo. Ora non ho chiesto niente a nessuno.

Strano. Sto cercando di arrivare al fondo di un problema e tu stai parlando di una sorta di chiarimento della relazione. Sto comunicando solo sul tema della programmazione. Se ti senti offeso da qualcosa, non offenderti. Ho scritto software per 15 anni. Lei dice che il mio codicenon funzionacorrettamente secondo lei. Non mi sto offendendo, sto cercando di spiegarti come funzionano i sistemi di trading automatico nella realtà. È una conversazione puramente tecnica. E tu mi stai parlando di una specie di insulto... :)

 
Mihail Matkovskij #:

Questo è strano. Sto cercando di arrivare al fondo di un problema e tu stai parlando di una specie di relazione. Sto comunicando solo sul tema della programmazione. Se ti senti offeso da qualcosa, non offenderti. Ho scritto software per 15 anni. Lei dice che il mio codicenon funzionacorrettamente secondo lei. Non mi sto offendendo, sto cercando di spiegarti come funzionano i sistemi di trading automatico nella realtà. È una conversazione puramente tecnica. E tu mi stai parlando di una specie di insulto... :)

Così ti ho anche spiegato cosa il tuo codice è sbagliato (in questo caso), e tu dici che devi rifare l'EA)
 
Mihail Matkovskij #:

Scrivo programmi da 15 anni.

Ho un suggerimento. Dammi il tuo telegramma in privato.

 
MakarFX #:
Così ti ho anche spiegato cosa il tuo codice è sbagliato (in questo caso), e tu dici che devi rifare l'EA)

In questo caso, deve essere rielaborato in modo che non si attorcigli. Perché il codice che ho aggiunto è progettato per un robot con segnali di prezzo di apertura, come ho detto prima. Ho pensato: questo è strano. E poi ho trovato la ragione. Se lo fai bene dall'inizio, non avrai problemi in futuro. Così, si dovrebbe sempre cercare la causa e non combattere la conseguenza.