Come codificare? - pagina 63

 

Come aprire un ordine solo all'inizio di una barra?

Ciao,

Sto implementando un EA in cui voglio aprire un ordine solo se si è verificato un cross di un certo livello di un indicatore tra la seconda barra precedente e la precedente.

Per esempio, sul grafico giornaliero, se c'è un incrocio tra il 18 gennaio e il 19 gennaio, voglio aprire un ordine il 20 gennaio.

Ho fatto qualcosa del genere:

Quando apro un ordine, registro il tempo di apertura dell'ordine.

Poi faccio il seguente test: Se (CurrentTime() - LastOrderOpenTime) < Periodo()?

Se sì, significa che la barra attuale non è ancora finita e non dovrei aprire un nuovo ordine. Inoltre, quando questa condizione diventa falsa, dovrei essere sulla prossima barra del grafico, e la croce è avvenuta prima dell'ultima barra e nessun ordine dovrebbe essere aperto fino al prossimo segnale.

Il problema è che quando lo collego a un grafico, continua a creare nuovi ordini finché la barra non è finita. Qualcuno può dirmi cosa ho fatto di sbagliato?

 
dvarrin:
Ciao,

Sto implementando un EA in cui voglio aprire un ordine solo se si è verificato un cross di un certo livello da parte di un indicatore tra la seconda barra precedente e la precedente.

Per esempio, sul grafico giornaliero, se c'è un incrocio tra il 18 gennaio e il 19 gennaio, voglio aprire un ordine il 20 gennaio.

Ho fatto qualcosa del genere:

Quando apro un ordine, registro il tempo di apertura dell'ordine.

Poi faccio il seguente test: Se (CurrentTime() - LastOrderOpenTime) < Periodo()?

Se sì, significa che la barra attuale non è ancora finita e non dovrei aprire un nuovo ordine. Inoltre, quando questa condizione diventa falsa, dovrei essere sulla prossima barra del grafico, e la croce è avvenuta prima dell'ultima barra e nessun ordine dovrebbe essere aperto fino al prossimo segnale.

Il problema è che quando lo collego a un grafico, continua a creare nuovi ordini finché la barra non è finita. Qualcuno può dirmi cosa ho fatto di sbagliato?

Non sono sicuro, ma qui c'è quello che qualcuno ha fatto per me qualche tempo fa. Dovrei cercarlo su Google per dare il giusto riconoscimento all'autore originale.

Aiuta a determinare se sei sull'apertura di una nuova barra o meno.

int newbar()

{

double g;

int m,s,k;

m=Time[0]+Period()*60-TimeCurrent();

g=m/60.0;

s=m%60;

m=(m-m%60)/60;

return(m);

}[/CODE]

And I use it like this:

[CODE]if (newbar()==Period())

Spero che aiuti.

 
dvarrin:
Ciao,

Sto implementando un EA in cui voglio aprire un ordine solo se si è verificato un cross di un certo livello da parte di un indicatore tra la seconda barra precedente e la precedente.

Per esempio, sul grafico giornaliero, se c'è un incrocio tra il 18 gennaio e il 19 gennaio, voglio aprire un ordine il 20 gennaio.

Ho fatto qualcosa del genere:

Quando apro un ordine, registro il tempo di apertura dell'ordine.

Poi faccio il seguente test: Se (CurrentTime() - LastOrderOpenTime) < Periodo()?

Se sì, significa che la barra attuale non è ancora finita e non dovrei aprire un nuovo ordine. Inoltre, quando questa condizione diventa falsa, dovrei essere sulla prossima barra del grafico, e la croce è avvenuta prima dell'ultima barra e nessun ordine dovrebbe essere aperto fino al prossimo segnale.

Il problema è che quando lo collego a un grafico, continua a creare nuovi ordini finché la barra non è finita. Qualcuno può dirmi cosa ho fatto di sbagliato?

Allora faccio il seguente test: Is (CurrentTime() - LastOrderOpenTime) < Period()?

si può aggiungere // return (0);

O

questo potrebbe aiutare... aggiungete il codice...

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;

if(OrderSymbol()== Symbol () && OrderMagicNumber()== MN)

{

if( OrderOpenTime() >= iTime(0, PERIOD_D1, 0) samebar++;

}

}

si può scegliere tra i 2..

if ( samebar > 0 ) return (0);

O

if (samebar < 1) {i tuoi codici d'ordine;}

non sono bravo nella codifica quindi qualcuno potrebbe provare a controllare se ho messo i codici giusti...

 
dvarrin:
Ciao,

Sto implementando un EA in cui voglio aprire un ordine solo se si è verificato un cross di un certo livello da parte di un indicatore tra la seconda barra precedente e la precedente.

Per esempio, sul grafico giornaliero, se c'è un incrocio tra il 18 gennaio e il 19 gennaio, voglio aprire un ordine il 20 gennaio.

Ho fatto qualcosa del genere:

Quando apro un ordine, registro il tempo di apertura dell'ordine.

Poi faccio il seguente test: Se (CurrentTime() - LastOrderOpenTime) < Periodo()?

Se sì, significa che la barra attuale non è ancora finita e non dovrei aprire un nuovo ordine. Inoltre, quando questa condizione diventa falsa, dovrei essere sulla prossima barra del grafico, e la croce è avvenuta prima dell'ultima barra e nessun ordine dovrebbe essere aperto fino al prossimo segnale.

Il problema è che quando lo collego a un grafico, continua a creare nuovi ordini finché la barra non è finita. Qualcuno può dirmi cosa ho fatto di sbagliato?

Ummm...

if(iOpen(Symbol(),0,0)==iClose(Symbol(),0,0)&&iLow(Symbol(),0,0)==iHigh(Symbol(),0,0))

{

//A new bar has happend.

}
 

Come faccio a sapere il profitto del commercio precedente? E i lotti, e il lato?

 
Dan7974:
Come faccio a sapere il profitto del trade precedente? E i lotti e il lato?

Usa OrdersHistoryTotal() invece di OrdersTotal(). Poi usa OrderProfit(), OrderLots() ecc. Devi però assicurarti che le quotazioni storiche per il periodo di tempo che ti interessa siano caricate, e penso che tu possa farlo solo manualmente - clicca con il tasto destro sulla scheda 'Orders History' e seleziona 'All History'.

Avrei dovuto aggiungere che devi usare 'MODE_HISTORY' con OrderSelect()...

 
omelette:
Usa OrdersHistoryTotal() invece di OrdersTotal(). Poi usa OrderProfit(), OrderLots() ecc. Devi però assicurarti che le quotazioni storiche per il periodo di tempo che ti interessa siano caricate, e penso che tu possa farlo solo manualmente - clicca con il tasto destro sulla scheda 'Storia degli ordini' e seleziona 'Tutta la storia'. Avrei dovuto aggiungere che devi usare 'MODE_HISTORY' con OrderSelect()...

Ciao Omelette,

Sai che BT ha un problema di ricerca nella cronologia: guarda la cronologia reale, non quella del BT. Ho chiesto a Metaquote qualche mese fa di questo bug ma non hanno avuto alcuna risposta.... Forse ora è stato risolto...

 

Ciao

Come si codifica un ciclo di irrigidimento dei tassi di interesse su una valuta e un ciclo di riduzione dei tassi di interesse su un'altra valuta?

L'EA può guardare i tassi attuali e storici degli swap?

OILFXPRO

 
File: