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

 

Buon pomeriggio. Ho scritto una funzione che dovrebbe restituire il numero di barre quando un ordine è stato aperto:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continua;
if (OrderType()>1) continua;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Tuttavia, restituisce sempre -1. Dove ho sbagliato? Grazie in anticipo.

 
first_may:

Buon pomeriggio. Ho scritto una funzione che dovrebbe restituire il numero di barre quando un ordine è stato aperto:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continua;
if (OrderType()>1) continua;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Tuttavia, restituisce sempre -1. Dove ho sbagliato? Grazie in anticipo.

Forse va così:

return(iBarShift(Symbol(),Period(),t)); cioè senza true.

 
first_may:

Buon pomeriggio. Ho scritto una funzione che dovrebbe restituire il numero di barre quando un ordine è stato aperto:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continua;
if (OrderType()>1) continua;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Tuttavia, restituisce sempre -1. Dove ho sbagliato? Grazie in anticipo.

Alla variabile t viene assegnato il prezzo di apertura, anche se è dichiarata come un intero

 
Vinin:

Alla variabile t viene assegnato il prezzo di apertura, anche se è dichiarata come un intero

Giusto, volevo scrivere OrderOpenTime(), ma ho scritto OrderOpenPrice();
 
Grazie, ho capito il mio errore.
 

Come si descrive una tale condizione?



avatar
13
4absinth 25.09.2011 19:23

Si prega di avvisare.

Se un estremo (ad esempio il massimo) della prima barra a 5 minuti del giorno corrente coincide con un estremo del giorno corrente (sul quotidiano), allora facciamo qualcosa. Come lo descriveresti?


Roger 25.09.2011 20:25 corretto | cancellare
se(MathAbs(High[1]-iHigh(NULL,PERIOD_D1,0))<Point)
 

aiutare le persone buone!!!


avatar
1
bavoso 25.09.2011 19:34

Ciao cari utenti della risorsa!

Si prega di aiutare chi deve leggere/scrivere un numero reale in un file.

Il compito è quello di leggere da un file di equilibrio, se l'equilibrio corrente è più - sovrascrivere il file.

Il problema è che emette sempre 0 (zero).

Con la scrittura/lettura di numeri interi non ho trovato questi problemi.

Ecco il codice:

doppio equilibrio;

int file_handle_bala;

file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_READ);
//copiare la posizione, in caso di file vuoto - posizione = 0
se (FileSize(file_handle_bala)>0)
{
balance=FileReadDouble(file_handle_bala,DOUBLE_VALUE);
Alert(balance); ------------------------------------- qui è dove dovrebbe essere scritto zero anche se il saldo precedentemente salvato dovrebbe essere scritto
FileClose(file_handle_bala);
if (AccountBalance()>balance) ------------------------------------ e questa regola non funziona perché l'avviso sottostante non produce nulla
{
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE);
balance=AccountBalance();
Allarme (equilibrio);
FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}
}
else // se il file è vuoto
{
FileClose(file_handle_bala); // prima, chiudere il file aperto
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE); //aprire per scrivere
balance=AccountBalance();
FileWriteDouble(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}

Grazie mille prima!!!


avatar
2222
Roger 9/25/2011 20:22

Nota questa linea

FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);


3461
Zhunko 25/09/2011 20:27

1. Dovreste essere più rispettosi e amichevoli nel pubblicare il vostro codice.

2. State cercando di scrivere un intero di 8 byte. MQL4 non ha un tale tipo di dati.

 

\Cosa ho fatto di male? Perché così tanti errori? (Ho bisogno di sapere il massimo(Ho bisogno di sapere il valore massimo dell'indicatore nelle ultime 10 barre). grazie in anticipo.

 

Buona giornata a tutti!

Sto scrivendo il mio primo bot e allo stesso tempo sto facendo conoscenza con MQL. Ho il seguente problema durante i test:

L'ordine OP_BUYSTOP viene eseguito subito dopo l'ordine, anche se a giudicare dal grafico, il prezzo non raggiunge il valore target (vedi sotto)

TempoTipoOrdinaVolumePrezzoS / LT / PProfittoEquilibrio
12011.09.19 02:10comprare stop10.0176.93576.73577.135
22011.09.19 02:10comprare10.0176.93576.73577.135

USDJPY,M5 (visivo)

Data 2011.09.19

Tempo 02:15

Aperto 76.903

Alto 76.909

Basso 76.890

Chiudere 76.890

Volume 66

Sto testando tutte le zecche.

Forse non capisco bene l'ordine OP_BUYSTOP? Comprare se il prezzo supera un certo valore, giusto?

Ecco un po' di codice sorgente che piazza un ordine

int ticket=OrderSend(Symb, OP_BUYSTOP, Lot, Price, 0, SL, TP);

Grazie mille a tutti voi in anticipo!

 
Shniperson:

\Cosa ho fatto di male? Perché così tanti errori? (Ho bisogno di sapere il valore massimo dell'indicatore per le ultime 10 barre). grazie in anticipo.

State dichiarando la funzione Hi:

double Hi(int pos=0)
all'interno della funzione start()