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

 

OrderClose(OrderTicket(),0.01,Bid,2);

in "esperti" dice "biglietto non valido per la funzione OrderClose".

Aiuto: il mio obiettivo è chiudere l'ordine sul grafico attuale.

 
Escapee:

OrderClose(OrderTicket(),0.01,Bid,2);

in "esperti" dice "biglietto non valido per la funzione OrderClose".

Aiuto: il mio obiettivo è chiudere l'ordine sul grafico attuale.

if (OrdersTotal()==true)
{
if(OrderSelect(ticket,SELECT_BY_TICKET)>0 && OrderType()==(OP_BUY/OP_SELL здесь поставишь какой ордер) && (здесь можешь написать условия закрытия т.е. сигнал) 
{
bool close = OrderClose(OrderTicket(),OrderLots(),Bid,3,clrRed); 
if(!close)
Print("Ошибка закрытия ордера. Код ошибки=",GetLastError());
else
Print("Ордер BUY успешно закрыт.");
}
}
 
Ho bisogno di chiudere DAVVERO l'ordine, se posso? Perché orderticket non funziona nella linea del programma che ho scritto?
 
Pokrov:

Buona sera, aiutatemi a capire il codice qui sotto, vendere è scritto sullo stesso principio, perché tre opzioni per aprire, perché ho dovuto armeggiare con l'opzione per evitare di aprire un ordine poi - quando l'ordine si apre sulla barra corrente e si chiude su un no draw,

e il segnale rimane e si apre di nuovo, quindi ho dovuto scriverlo così. Il problema è che solo un ordine di acquisto e di vendita è aperto e tutto il resto è silenzioso. Non riesco a trovare altri errori, vi sono molto grato in anticipo.

Come capite questa linea?

if (!OrdersTotal()==true)

Non so come leggere questa linea e quest'altra.

if (!OrdersHistoryTotal()==true)

e questo...

if(OrderSelect(ticket,SELECT_BY_TICKET)>0 // дальше я не смотрел

Anche se quest'ultima linea funzionerà, ma non è così scrivere ... Sono senza parole.

Beh, se non riesci a trovare l'errore, allora probabilmente non c'è nessun errore...

 
Escapee:

OrderClose(OrderTicket(),0.01,Bid,2);

in "esperti" dice "biglietto non valido per la funzione OrderClose".

Aiuto: il mio obiettivo è chiudere l'ordine sul grafico attuale.

Perché prima di lavorare con un ordine ho bisogno di selezionarlo con la funzione OrderSelect()
 
AlexeyVik:

Come capite questa linea?

e questo.

E questo...

Anche se quest'ultima linea funzionerà, ma non è il modo di scrivere... Sono senza parole.

Beh, se non hai trovato l'errore, allora probabilmente non c'è nessun errore...

1. Se non ci sono ordini aperti

2. Se non ci sono ordini chiusi.

Cosa c'è che non va?

 
Pokrov:

1. Se non ci sono ordini aperti

2. Se non ci sono ordini chiusi.

Cosa c'è che non va?

int OrdersTotal(); - restituisce numero, non verità-falso, ecco cosa c'è di sbagliato. Se non ci sono ordini, significa 0. Se ci sono ordini, non è solo 1.

E non ci sono ordini chiusi solo su un conto appena aperto su cui non abbiamo ancora fatto trading. Di nuovo, questo è un uso scorretto della funzione.

E perché RefreshRates(); DOPO che l'ordine è stato inviato al server? È come pagare prima qualcosa e poi chiedere "quanto costa?

 
Pokrov:

if (OrdersTotal()==true)
{
if(OrderSelect(ticket,SELECT_BY_TICKET)>0 && OrderType()==(OP_BUY/OP_SELL здесь поставишь какой ордер) && (здесь можешь написать условия закрытия т.е. сигнал) 
{
bool close = OrderClose(OrderTicket(),OrderLots(),Bid,3,clrRed); 
if(!close)
Print("Ошибка закрытия ордера. Код ошибки=",GetLastError());
else
Print("Ордер BUY успешно закрыт.");
}
}

Che tipo di sciocchezze stai facendo qui?

Se il numero totale di ordini e posizioni è 1 o più...
Se un ordine è selezionato su un biglietto sconosciuto e non è chiaro se è chiuso o aperto...
...ecc...

Pensi che abbia aiutato?

 
evillive:

... Nessun ordine significa 0, e se ci sono ordini, non è solo 1.

...

Qui è dove correggerò con permesso, per così dire.

In bool se c'è 0 allora è falso, tutto il resto diverso da zero è vero

 
Escapee:

OrderClose(OrderTicket(),0.01,Bid,2);

in "esperti" dice "biglietto non valido per la funzione OrderClose".

Aiuto: il mio obiettivo è chiudere l'ordine sul grafico attuale.

Per chiudere una posizione usando un ticket, devi prima conoscere il numero esatto del ticket della posizione da chiudere. Poi dovete selezionare l'ordine usando la funzione OrderSelect(ticket,SELECT_BY_TICKET), con controlli per la selezione riuscita. Poi dobbiamo controllare il tempo di chiusura dell'ordine selezionato con successo. Perché? Perché quando selezioniamo per ticket, il parametro pool della funzione OrderSelect(..., ..., pool) viene ignorato (viene usato solo quando selezioniamo per indice). E significa che anche se abbiamo selezionato con successo un ordine, dobbiamo ancora sapere in quale lista lo abbiamo scelto - la lista delle posizioni chiuse o aperte. È il controllo del tempo di chiusura che ci permette di sapere "se l'ordine è ancora sul mercato". Se il tempo di chiusura è uguale a zero, l'ordine è ancora sul mercato. Se il tempo è diverso da zero, l'ordine è già stato chiuso prima. E dopo tutta questa procedura, possiamo inviare un ordine per chiudere quell'ordine.