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

 

Potete dirmi perché nel codice che ho copiato da questo sito il compilatore scrive "undeclared identifier" prima diMagic?

for (int pos=0; pos<=OrdersTotal()-1; pos ++) 
{
 if(OrderSelect (pos, SELECT_BY_POS)==true)
  {if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic &&OrderCloseTime()==0) // если у Вас есть отложенные ордера и открытие
  return;}
 else
  Print("OrderSelect() вернул ошибку - ",GetLastError());
}            
 //продолжае
 
VasiliKolchanov:

Potete dirmi perché nel codice che ho copiato da questo sito prima diMagic il compilatore scrive "undeclared identifier"?

deve essere perché non è dichiarato.

dichiararlo all'inizio. o come parametro consigliere o costante...o una variabile, almeno in qualche modo...l'entità deve esistere :-)

input int Magic=5566; // это чтобы он был в параметрах и можно поменять

// или const int Magic = 8899;

 
VasiliKolchanov:

Potreste dirmi perché nel codice che ho copiato da questo sito il compilatore scrive "undeclared identifier" prima diMagic?

Perché ho usato l'identificatore Magic, il cui tipo (e valore, rispettivamente) non è descritto da nessuna parte. Dovete dichiarare una variabile (o costante) con quel nome e assegnarle un valore.

 
VasiliKolchanov:

Potete dirmi perché nel codice che ho copiato da questo sito il compilatore scrive "undeclared identifier" prima diMagic?

Perché non è dichiarato da nessuna parte nel tuo codice - è ovvio.
 
Artyom Trishkin:
Perché non è dichiarato da nessuna parte nel tuo codice - questo è ovvio.
Grazie a tutti!
 

Ragazzi, ditemi come trattare e da dove cominciare!

Esempio: ho 15 ordini con lotto 0,01. Ho bisogno di chiudere qualche trade con lotto 0,07 ad un certo punto.

La mia domanda è: come posso chiudere 7 ordini o 0,07 in un OrderClose(...)?

Se metto 0,07 in una volta sola non vede i trade con volume 0,01.

Sono nuovo della programmazione

 
Rustam Bikbulatov:

Ragazzi, ditemi come trattare e da dove cominciare!

Esempio: ho 15 ordini con lotto 0,01. Ho bisogno di chiudere qualche trade con lotto 0,07 ad un certo punto.

La mia domanda è: come posso chiudere 7 ordini o 0,07 in un OrderClose(...)?

Se metto 0,07 in una volta sola non vede i trade con volume 0,01.

Sono nuovo nella programmazione.

Non c'è modo di chiuderlo con un ordine. Possiamo solo fare una selezione di ordini e di conseguenza cancellare ogni ordine. E se si cancella l'ordine di un volume più piccolo, si ha ancora un volume aperto. Lo confrontiamo con il nostro volume aperto rimanente. Chiudiamo finché il volume di 0,07 non raggiunge il suo limite. Questo è l'unico modo.

 
Rustam Bikbulatov:

Ragazzi, ditemi come trattare e da dove cominciare!

Esempio: ho 15 ordini con lotto 0,01. Ho bisogno di chiudere qualche trade con lotto 0,07 ad un certo punto.

La mia domanda è: come posso chiudere 7 ordini o 0,07 in un OrderClose(...)?

Se metto 0,07 in una volta sola non vede i trade con volume 0,01.

Sono nuovo nella programmazione.

Se il broker permette di usare la contro-chiusura, potete aprire un ordine opposto con il volume 0,07, fissando così il prezzo di profitto/perdita per questo volume. Bene, dopo questo, avremmo ancora bisogno di eseguire 7 operazioni di chiusura opposte (funzione OrderCloseBy()). C'è un'altra operazione di trading da eseguire con questo approccio. Il vantaggio è che tutti e sette gli ordini vengono chiusi ad un prezzo.

 

Ciao a tutti.

Per favore consigliatemi sulla velocità dell'EA, e probabilmente l'affidabilità e la correttezza del codice.

Mi riferisco agli ordini aperti e pendenti in ogni tick e cambiarli se necessario.

Nel manuale di OrderSelect c'è scritto:"Quando gli ordini sono selezionati in modo sequenziale usando il parametro SELECT_BY_POS, le informazioni sono date nell'ordine in cui sono state ricevute dal server di trading."

Da qui nasce la domanda: possiamo creare un array in cui memorizzare il tipo, il prezzo di entrata e, per esempio, un commento unico di un ordine? Si potrebbe scorrere l'array in ogni tick e poi, se necessario, rivolgersi alla funzione OrderSelect e fare una selezione utilizzando il commento unico dell'ordine?

 
Decromor:

Ciao a tutti.

Vi prego di dare il vostro consiglio, si tratta principalmente della velocità dell'EA e probabilmente della sua affidabilità e correttezza nella scrittura.

Mi riferisco agli ordini aperti e pendenti in ogni tick e cambiarli se necessario.

Nel manuale di OrderSelect c'è scritto:"Quando gli ordini sono selezionati in modo sequenziale usando il parametro SELECT_BY_POS, le informazioni sono date nell'ordine in cui sono state ricevute dal server di trading."

Da qui nasce la domanda: possiamo creare un array in cui memorizzare il tipo, il prezzo di entrata e, per esempio, un commento unico di un ordine? In ogni tick, dovremmo scorrere l'array e, se necessario, rivolgerci alla funzione OrderSelect e fare una selezione in base al commento unico dell'ordine?

La funzione OrderSelect() è implementata all'interno del terminale, e non c'è nessuna richiesta al server. Ecco perché non c'è niente di male nel chiamare la lista degli ordini ad ogni tick. Questo è esattamente ciò che fa la maggior parte degli EA.

E la tua domanda sull'array è legata all'architettura del programma. Nel caso di un EA complesso che opera con una grande quantità di ordini, questo è assolutamente necessario. Se l'Expert Advisor opera con un solo ordine con una logica semplice, l'array è ridondante.

Vale solo la pena menzionare il fatto che anche se abbiamo un array di ordini, non possiamo fare a meno di chiamare OrderSelect(). Dopo tutto, dobbiamo controllare ad ogni tick se l'ordine esiste ancora o no. E possiamo anche cambiare i suoi parametri.