Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 383

 
Vitalie Postolache:

Se non è esterno - c'è PositionClose

Puoi anche aprire una posizione con lo stesso volume nella direzione opposta, che risulterà in una chiusura.

nessuna funzione del genere?
 
Tapochun:

Nella funzione OnTick impostiamo due variabili locali di tipo bool: buyExist = false e sellExist = false.

Quando arriva un nuovo tick, si controlla se ci sono ordini che appartengono a questo EA. Se c'è un ordine di vendita, sellExist = true e la stessa cosa con l'ordine di acquisto. E poi si controlla se buyExist = true - non aprire un ordine di acquisto. Lo stesso vale per la vendita. Questo è tutto.

A cosa ci servono le variabili inutili se controlliamo comunque se ci sono posizioni aperte?

Abbiamo controllato se ci sono posizioni Buy - nessun Buy aperto, ne abbiamo aperto uno. Perché abbiamo bisogno di variabili?

 
Artyom Trishkin:

Perché abbiamo bisogno di variabili extra se stiamo comunque controllando le posizioni aperte?

Controlliamo per acquistare - nessun acquisto aperto - ne apriamo uno, controlliamo per vendere - nessuna vendita aperta - ne apriamo uno. Perché abbiamo bisogno di variabili?

Possiamo farlo in questo modo. L'ho semplicemente presentato nella mia mente come una funzione di controllo separata in cui i flag sono passati per riferimento. In questo caso, la mia variante esegue solo una funzione - controllare gli ordini e non controllare+aprire. Sarebbe più facile estendere il programma. In breve - una funzione - un'azione.
 
Artyom Trishkin:

Perché abbiamo bisogno di variabili extra se stiamo comunque controllando le posizioni aperte?

Controlliamo per acquistare - nessun acquisto aperto - ne apriamo uno, controlliamo per vendere - nessuna vendita aperta - ne apriamo uno. Perché abbiamo bisogno di variabili?

Ho pensato che sarebbe stato simile a OrderTotal.
 
le0nid2014:
Pensavo che sarebbe stato qualcosa come OrderTotal, ma qui bisogna fare il rimbalzo e scrivere la funzione per riconoscere gli ordini?
Come si può fare senza forza bruta? Potresti avere molti ordini da molti Expert Advisors per molti simboli in una sola volta. Volete che il vostro Expert Advisor elabori solo i suoi ordini, vero?
 
Tapochun:
Potresti farlo. L'ho solo immaginato nella mia testa come una funzione di controllo separata, dove le bandiere sono passate per riferimento. In questo caso, la mia variante, esegue solo una funzione - controllare gli ordini, non controllare+aprire. Sarebbe più facile estendere il programma. In breve - una funzione - un'azione.

Bene, il controllo è una chiamata di funzione che restituisce una bandiera:

if(!function_check_open_position(symbol, OP_BUY,magic)) function_open_position(symbol,OP_BUY,Lots,stop_loss,take_profit,magic,comment);
if(!Function_check_open_position(symbol,OP_SELL,magic)) Function_open_position(symbol,OP_SELL,Lots,stop_loss,take_profit,magic,comment);

 
le0nid2014:
Pensavo che sarebbe stato qualcosa come OrderTotal.
Naturalmente, cerca un ordine di mercato per simbolo, tipo e mago, e restituisce il risultato della ricerca: vero - sì, falso - no.
 
new-rena:
nessuna funzione del genere?
Sì, il mio errore quando ho detto "nessun inludere", quella funzione è solo nell'inludere Trade.mqh.
 
Tapochun:
Come si può fare senza sforzarsi troppo? Potresti avere un mucchio di ordini da un mucchio di Expert Advisors su un mucchio di simboli contemporaneamente. E tu vuoi che il tuo EA elabori solo i tuoi ordini, vero?

è un'aggiunta iniziale al robot principale. il robot principale ha sempre due ordini aperti in entrambe le direzioni (il robot principale li raccoglie, ma il robot principale stesso non può partire. Quando il robot principale finisce una delle direzioni la chiude) e poi questo EA dovrebbe aprire di nuovo un ordine nella direzione del mercato dove non c'è nessun ordine.

dobbiamo solo aggiungere le condizioni di apertura dell'ordine


extern double Lots = 1.00;

extern int MagicNumb = 698541; //Magic


int inizio ()

{


if(OrdersTotal() == 0 && ********** )

OrderSend("USDCHF",OP_BUY,Lots,Ask,0,0,0, "5891",MagicNumb,0,Red);


if (OrdersTotal() == 0 && ***********)

OrderSend("USDCHF",OP_SELL,Lots,Bid,0,0,0, "58892",MagicNumb,0,Red);


}

 
le0nid2014:
è un'aggiunta iniziale al robot principale. il robot principale ha sempre due ordini aperti in entrambe le direzioni (il robot principale li raccoglie, ma il robot principale stesso non può partire. Quando il robot principale finisce una delle direzioni la chiude) e poi questo EA dovrebbe aprire di nuovo un ordine nella direzione del mercato in cui non c'è nessun ordine.
I due EA dovrebbero avere gli stessi maghi. Dovrebbero essere lanciati su diversi grafici per un simbolo. In generale, ovviamente, è più facile migliorare l'EA principale che costruirne un altro.
Motivazione: