[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 60

 
7777877: trasferimento di parametri dal trasferimento di parametri per riferimento?

ecco il trasferimento dei parametri per riferimento, fai uno script come questo:

int start(){
   int res = 999;
   Print("func = ",func(res)," , res = ",res);
return(0);
}
//__________________________
int func(int &a){
   a = 10;
   return(a*10);
}

la scheda Expert mostrerà il seguente record: 2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10

e cercare di rispondere alla domanda perché abbiamo assegnato res = 999; e il registro ha ottenuto res = 10

 

Puoi dirmi come collegare le librerie? Sono presenti nei file mqh, ma quando si copiano danno

'strlib.mqh' - impossibile aprire il file del programma

 
IgorM:

ecco il trasferimento dei parametri dal link, fate uno script come questo:

la scheda Expert mostrerà la seguente voce: 2012.04.08 11:19:35 test EURUSD,M5: func = 100, res = 10

E prova a rispondere alla domanda perché abbiamo assegnato res = 999; ma nel registro abbiamo ottenuto res = 10


Ecco la mia spiegazione:

La funzione Print chiama la funzione utente func. Il parametro res=999 viene passato alla funzione func. Quando la funzione func stessa viene valutata, viene utilizzato il parametro a=10. Il valore a*10=100 viene passato indietro al luogo in cui viene chiamata la funzione func. Dato che finiamo con res=10, ne deduco che passare un parametro per riferimento significa quanto segue: potete passare QUALSIASI valore del tipo corrispondente (in questo caso, res=999) alla funzione chiamata (in questo caso, a func), ma la funzione stessa sarà valutata già con quel valore (cioè(cioè nel nostro caso con a=10), che sarà inizializzato all'interno della funzione stessa (che in un caso particolare può anche coincidere con il valore passato nella funzione chiamata, cioè in questo caso, in func). E al trasferimento del valore calcolato nella funzione (in questo caso, a func) di nuovo nella stringa di chiamata della funzione, la variabile (in questo caso, res) avrà già un valore diverso da prima, cioè il valore che ha ricevuto quando è stata calcolata la funzione func (cioè, in questo caso, res=10). Così: quando si passa un parametro a una funzione per riferimento, all'interno di una funzione valutata, il valore del parametro può cambiare, e inoltre, dopo che il valore calcolato viene restituito nella stringa di chiamata della funzione, questo parametro avrà un valore CAMBIATO (in un caso particolare, lo stesso), che ha ricevuto durante il calcolo della funzione chiamata.

Ho capito bene?

 
7777877: Quando un parametro viene passato a una funzione per riferimento, il valore del parametro può cambiare all'interno della funzione valutata
sì, lo fa
 
IgorM:
Proprio così.

Grosse danke schoen!!!
 

Per favore ditemi, voglio fare una modifica dell'ordine, in modo che l'EA cambi il valore dello stop-loss al momento specificato, ma inizia ad ingannare.

Ecco il mio codice

extern int tp = 350; // valore di profitto takeprofit
extern int sl = 400; // valore di perdita stoploss

int ticket;

int start()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // l'ordine si apre alle 2:00 ora del terminale
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // qui ho impostato una condizione che l'ordine con il ticket selezionato deve essere modificato alle 3h00 ora del terminale. tempo.

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // qui ho specificato la selezione dell'ordine, trade
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // modifica l'ordine con il ticket selezionato, dal prezzo della posizione aperta, cambia il valore SL in punti, TP lasciato invariato


}
//--

}


C'è un problema durante il test: l'Expert Advisor inizia a fare un sacco di modifiche inutili nel tempo, da ore 3 00 minuti a ore 3 59 minuti. EA sta scherzando e facendo modifiche ogni secondo! Perché, cosa c'è di sbagliato nel codice?

 
oleg_felix:

Per favore ditemi, voglio fare una modifica dell'ordine, in modo che l'EA cambi il valore dello stop loss all'ora da me specificata, ma inizia a fare lo stupido.

Ecco il mio codice

extern int tp = 350; // valore di take profit
extern int sl = 400; // valore di stop loss

biglietto int;

int start()
{
//----
if (OrdersTotal()==0 && Hour( )==2 && Minute( )==0) // l'ordine si apre alle 2:00 ora del terminale
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",123,0,Red);

//----

if (OrdersTotal()==1 && Hour( )==3 && Minute( )==0) // qui ho specificato una condizione che l'ordine con il ticket selezionato deve essere modificato alle 15:00 secondo l'orario del terminale.

{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // qui ho specificato la selezione dell'ordine, trade
OrderModify(ticket, OrderOpenPrice(), Ask+300*Point, OrderTakeProfit(),0,Blue); // modificare l'ordine con il ticket selezionato, dal prezzo della posizione aperta, cambiare il valore SL in punti, lasciare TP invariato


}
//--

}


Durante il test, sorge un problema: l'Expert Advisor inizia a fare un sacco di modifiche inutili nel tempo, da ore 3 00 minuti a 3 59. Expert Advisor sta giocando e facendo modifiche ogni secondo! PERCHÉ? Cosa c'è di sbagliato nel codice?



Perché sul tempo..... sul profitto!!!

 

Come scrivere la funzione corretta per modificare un ordine aperto in un conto ECN, dove non è possibile mettere stop e profitto in una volta sola, ma bisogna farlo attraverso la modifica.

Il problema è che qualcosa è sbagliato, per favore aiutatemi a trovare l'errore.

extern int tp = 350; // valore di profitto takeprofit
extern int sl = 400; // valore di perdita stoploss

int ticket;
int start()
{
//----
if (OrdersTotal()==0 && Close[1]<Open[1] && High[1]<Bid) )==0) // l'ordine si apre alle condizioni
ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,0,0t,",123,0,Red);
//----
if (OrdersTotal()==1 ) // qui ho impostato una condizione che modifica un ordine con un solo ordine selezionato.
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // qui ho specificato la selezione dell'ordine, le transazioni
OrderModify(ticket, OrderOpenPrice(), Ask+sl*Point,Ask-tp*Point,0,Blue); // modifica l'ordine con il ticket selezionato, dal prezzo della posizione aperta, cambia il valore SL in punti, lascia TP invariato
}
}

 
oDin48:
  • Ragazzi, come faccio a collegare le biblioteche? Quando provo a compilare l'EA dà

  • 'strlib.mqh' - impossibile aprire il file del programma

A trovare la linea:
#include <strlib.mgh>

e sostituire con:

#include <stdlib.mgh>
 
7777877:

Gente, per favore, spiegate in forma semplice cos'è il trasferimento di parametri per riferimento. Ho letto la documentazione, ma ho capito solo che è possibile e che dopo l'identificazione della variabile è obbligatorio mettere un modificatore &. Sarebbe bello se la spiegazione fosse accompagnata da un piccolo programma con spiegazioni... Qual è la differenza tra il solito passaggio di parametri e il passaggio di parametri per riferimento?

Il senso generale del passaggio di parametri per riferimento è quello di passare non la variabile stessa, ma il suo indirizzo nel parametro. Nel caso opposto, una copia della variabile viene passata al parametro.
Motivazione: